Fork me on GitHub

Python+Spark2.0+Hadoop

Python+Spark2.0+Hadoop 机器学习与大数据实战
遇到的问题记录

1、启动 HDFS 报 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable,

  • 开启 debug
1
che

Failed to load native-hadoopwith error: java.lang.UnsatisfiedLinkError: no hadoop in java.library.path

  • 官方文档需要的文件名 libhadoop.so,但是 usr/local/hadoop/lib/native 文件中只有 libhadoop.so.1.0.0,官方编译软件确实有个 libhadoop.so 文件,但是是个 link
1
ln -s libhadoop.so.1.0.0 libhadoop.so

2、每次使用 start-all.sh 启动 HDFS 和 YARN 的时候无法启动 NameNode,每次都需要使用 hadoop namenode -format 格式化 HDFS 所有数据,才能启动

解决办法:

  • 配置 tmp 文件目录

    默认在根目录/tmp 文件中,如果 tmp 文件中无重要文件可以清空文件夹

    1
    sudo rm -rf /tmp/*
  • 创建 hadoop_tmp 目录

    1
    sudo mkdir /home/hduser/hadoop_tmp  /*hduser是用户名*/
  • 配置 core-site.xml 文件,新增如下节点

    1
    sudo gedit /usr/local/hadoop/etc/hadoop/core-site.xml
    1
    2
    3
    4
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/hduser/hadoop_tmp</value>
    </property>
  • 格式化 namenode

    1
    hadoop namenode -format

3、hadoop 集群 master 主机启动 namenode,但其 slaves 未启动 datanode

  • 原因 hadoop namenode -format 执行,导致 master 中/usr/local/hadoop/hadoop_data/hdfs/namenode/current 里面的 version 和 salve 中/usr/local/hadoop/hadoop_data/hdfs/datanode/current/version 内容不一致,导致的。
  • 我将 master 里面的 version 复制到 salves 里面问题没有解决
  • 将所有 current 删除后重新启动,解决了
  • 不要执行 hadoop namenode -format

4、运行 scala 报错,Exception in thread “main” java.lang.UnsupportedClassVersionError: scala/tools/nsc/MainGenericRunner : Unsupported major.minor version 52.0

安装的 scala 版本较高,降级安装 scala.2.11.6
或者升级 jdk1.7=>jdk1.8

将目录所有者更改为 hduser

1
sudo chown -R hduser:hduser /usr/local/hadoop

启动共享文件夹

1
sudo mount -t vboxsf Hadoop共享 /mnt/share/

8.7 在 Hadoop YARN 运行 pyspark

1
HADOOP_CONF_DIR=/usr/hadoop/etc/hadoop pyspark  --master yarn --deploy-mode client

8.8 在 Spark Standalone 运行 pyspark

  • 1、启动 Spark Standalone Cluster
1
/usr/local/spark/sbin/start-all.sh

分别启动 master 与 slaves

1
2
/usr/local/spark/sbin/start-master.sh
/usr/local/spark/sbin/start-salves.sh
  • 2、在 Spark Standalone 运行 pyspark
1
pyspark --master spark://master:7077 --num-executors 1 --total-executor-cores 3 --executor-memory 512m
  • 3、读取本地文件
1
2
textFile=sc.textFile("file:/usr/local/spark/README.md")
textFile.count()

错误
WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

-------------本文结束感谢阅读-------------