序文
最近のHadoop +スパーク+のpythonに従事し、私たちは地元のHadoop環境、アドレス構築するための基本的な環境設定hadoop2.7.7分散クラスタのインストールと構成を
このブログは主に構築された場合は、説明とスパーククラスタのHadoopに統合されています
インストールプロセス
インストールのスパーク、Scalaのバージョンの火花に対応する必要がインストールプロセス中にScalaの注意をインストールするには、スパークのHadoopを必要とするも、具体的にダウンロードページがスパークの公式ウェブサイトで見ることができ、対応するバージョンを保持
SACLAをダウンロードしてインストール
httpswwwscalalangorgfilesarchivescala21112 の.tgz タールzxfスカラ 21112 の.tgz
移動し、アクセス権を変更
chownコマンドhduser:hduser -R Scalaの-2.11.11
MV /root/scala-2.11.11は/ usr / local /スカラ
設定の環境変数
vimのbashrcに
#のScalaのVaRの
輸出SCALA_HOME =は/ usr / local / Scalaの
輸出PATH = $ PATH:$のSCALA_HOME / binに
インストールは、Scalaのことで、このようなインタラクティブなページとして、あなたが入力することができます完了です
注意事項
注意:スパークは、HadoopのHDFSを読みますと、Hadoopの糸でプログラムを実行することができなければならないので、スパークとHadoopのバージョンは、お互いに一致している必要があり、それが選択するために、Hadoopの当社の現在のバージョンに合わせてインストールする必要があります
。ここでは、著者をhadoop2あるので、私が選んだ7.7内蔵で事前のためのApache Hadoopの2.7 およびそれ以降の
火花をダウンロードしてインストール
http://mirror.bit.edu.cn/apache/spark/spark-2.3.3/spark-2.3.3-bin-hadoop2.7 の.tgz
タールzxf火花 -2.3.3-ビンhadoop2.7.tgz
移動し、アクセス権を変更
chownコマンドhduser:hduserスパーク-2.3.3-binの-hadoop2.7
MVスパーク -2.3.3ビン-hadoop2.7は/ usr / local /火花
設定の環境変数
vimのbashrcに
#のスパークするvar
輸出SPARK_HOME =は/ usr / local / スパーク
輸出PATH = $ PATHの:$ SPARK_HOME / binに
スパーク対話ページに
デフォルトでは、現在のバージョンが古い場合、あなたは(のpython他のサーバーのインストールの現在のバージョンものとする)別のバージョンを選択するpysparkを変更することができ、python2.7.xバージョンです
修改master下的spark-env.sh #没有这个文件可以cp spark-env.sh.template spark-env.sh
在最后一行添加如下
export PYSPARK_PYTHON=/usr/bin/python3
修改master下的spark bin目录下pyspark
将文本中
PYSPARK_PYTHON=python
改为
PYSPARK_PYTHON=python3
#取消INFO信息打印
复制conf目录下的log4j模本文件到log4j.properties
将文本中
log4j.rootCategory=INFO, console
改为
log4j.rootCategory=WARN, console
测试与效果图
本地运行spark
pyspark --master local[4]
spark 读取本地文件,所有节点都必须存在该文件
textFile=sc.textFile("file:/usr/local/spark/README.md")
spark 读取hdfs文件
textFile2=sc.textFile("hdfs://hadoop-master-001:9000/wordcount/input/LICENSE.txt")
Hadoop YARN运行spark
HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop pyspark --master yarn --deploy-mode client
textFile = sc.textFile("hdfs://hadoop-master-001:9000/wordcount/input/LICENSE.txt")
textFile.count()
spark Standalone Cluster运行
编辑spark-env.sh #spark_home/conf
export SPARK_MASTER=hadoop-master-001 //设置master的ip或域名
export SPARK_WORKER_CORES=1 //设置每个worker使用的CPU核心
export SPARK_WORKER_MEMORY=512m //设置每个worker使用的内存
export SPARK_WORKER_INSTANCES=4 //设置实例数
将master环境中的spark目录打包并分别远程传输到所有slave节点中.
设置spark Standalone Cluster 服务器(master环境)
vim /usr/local/spark/conf/slaves 添加ip或域名
hadoop-data-001
hadoop-data-002
hadoop-data-003
启动与关闭
/usr/local/spark/sbin/start-all.sh
/usr/local/spark/sbin/stop-all.sh
pyspark --master spark://hadoop-master-001:7077 --num-executors 1 --total-executor-cores 3 --executor-memory 512m
textFile = sc.textFile("file:/usr/local/spark/README.md")
textFile.count()
注意 当在cluster模式下,如yarn-client或spark standalone 读取本地文件时,因为程序是分不到不同的服务器,所以必须确认所有机器都有该文件,否则会发生错误.
建议 最好在cluster读取hdfs文件,这样不会出现文件
text2=sc.textFile("hdfs://hadoop-master-001:9000/wordcount/input/LICENSE.txt")
text2.count()
spark web ui
异常处理
hadoop yarn运行pyspark时异常信息:
ERROR SparkContext: Error initializing SparkContext. org.apache.spark.SparkException: Yarn application has already ended! It might have been killed or unable to launch application master
解决方式
查看http://hadoop-master-001:8088/cluster/app/ 最新任务点击history 查看信息
"Diagnostics: Container [pid=29708,containerID=container_1563435447194_0007_02_000001] is running beyond virtual memory limits. Current usage: 55.6 MB of 1 GB physical memory used; 2.2 GB of 2.1 GB virtual memory used. Killing container."
修改所有节点的yarn-site.xml,添加如下
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
主节点执行stop-yarn.sh, start-yarn.sh 重启所有节点yarn