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 | /usr/local/spark/sbin/start-master.sh |
- 2、在 Spark Standalone 运行 pyspark
1 | pyspark --master spark://master:7077 --num-executors 1 --total-executor-cores 3 --executor-memory 512m |
- 3、读取本地文件
1 | textFile=sc.textFile("file:/usr/local/spark/README.md") |
错误
WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources