Spark 踩坑笔记
启动Spark Master失败,但是Worker成功,启动Master时日志如下:
原因是第一个WARN,Spark已经不建议使用SPARK_MASTER_IP来指定master的ip,而是使用SPARK_MASTER_HOST
于是在配置文件中改掉就好
Hbase 已启动,但是使用list指令出现错误:Can’t get master address from ZooKeeper; znode data == null
原因可能有很多:
- 1.hbase 和zookeeper在单机部署上,zookeeper和hbase的服务通常不稳定,重启即可解决。这里我写了一个脚本来重启restart_hbase,注意启动时要先启动zookeeper再启动hbase。
- 2.新旧版本数据不一致,参考这篇博客can’t get master address from zookeeper /新旧数据不一致
- 3.如果以上方法都不行,则使用下面这个终极方法,重新格式化namenode(若有重要数据请自行备份)。
cd {hadoop directory}
删除data文件夹,这个文件夹为自己配置文件中dfs.name.dir的路径,如果不删除会导致datanode与namenode的clusterID不一致,进而导致datanode启动失败。详情参考这篇博客解决Hadoop启动时,没有启动datanode
rm -rf {data directory}
格式化namenode
bin/hdfs namenode -format
sbin/start-dfs.sh
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/{username} # make sure you add correct username here
启动 zookeeper
zkServer start
进入zkCli
zkCli
删除/hbase数据,防止2中提到的问题
rmr /hbase
启动hbase
./start-hbase.sh
Spark + python 中的那些坑
注:这里是指在本地搭建环境,包括local模式和standalone模式
之前我用的spark版本时是2.2.0,搭配scala 2.11.11一切运行完美,然而在使用python时却遇到了诸多大坑
- Python in worker has different version 2.7 than that in driver 3.6, PySpark cannot run with different minor versions.Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set.
原因分析:这个报错说得很清晰,即worker和driver中的python版本不同,于是我按照要求在spark-env.sh和.bash_profile中设置了PYSPARK_PYTHON和PYSPARK_DRIVER_PYTHON环境变量,并指向同一个python 3.6, 并修改了电脑上所有关于python的环境变量,使默认的 python指令也指向同一个python环境,但是worker依然会指向python 2.7。
解决方式:在代码中指定PYSPARK_PYTHON,
import os
os.environ['PYSPARK_PYTHON'] = '/anaconda3/python.app/Contents/MacOS/python'
2.在local模式下能正常运行,但是spark-submit提交到master时失败
提交的指令:
spark-submit --master spark://127.0.0.1:7077 SparkTopK.py
出现如下报错:
All masters are unreponsive! Giving up.
master日志中有如下报错,这个比较关键:
18/10/22 19:51:53 ERROR TransportRequestHandler: Error while invoking RpcHandler#receive() for one-way message.
java.io.InvalidClassException: org.apache.spark.rpc.RpcEndpointRef; local class incompatible: stream classdesc serialVersionUID = -1329125091869941550, local class serialVersionUID = 1835832137613908542
解决方式:
检查pyspark版本与spark是否一致(如果配置了环境变量,可以分别启动spark-shell和pyspark,查看spark版本)
我这里版本不一致的原因是因为spark是我很早以前安装的,而在配置python环境时,直接使用了
conda install pyspark / pip3 install pyspark
默认安装了2.3.2版本(最新版),导致pyspark与spark master的版本不一致,所以出现了这种错误。
所以,重新下载配置了2.3.2的spark,就解决了...
看起来很简单,其实这个bug折腾了我整整一天...
点击量:1031