spark集群安裝並集成到hadoop集群


前言

  最近在搞hadoop+spark+python,所以就搭建了一個本地的hadoop環境,基礎環境搭建地址hadoop2.7.7 分布式集群安裝與配置

  本篇博客主要說明,如果搭建spark集群並集成到hadoop

安裝流程

  安裝spark需要先安裝scala 注意在安裝過程中需要對應spark與scala版本, spark 也要跟hadoop對應版本,具體的可以在spark官網下載頁面查看

下載sacla並安裝

https://www.scala-lang.org/files/archive/scala-2.11.12.tgz tar zxf scala-2.11.12.tgz

移動並修改權限

chown hduser:hduser -R scala-2.11.11 mv /root/scala-2.11.11 /usr/local/scala

配置環境變量

vim .bashrc #scala var
export SCALA_HOME=/usr/local/scala export PATH=$PATH:$SCALA_HOME/bin

安裝完成可以通過scala進如交互頁面

注意事項

注意:Spark與hadoop版本必須互相匹配,因為Spark會讀取Hadoop HDFS 並且必須能在Hadoop YARN執行程序,所以必須要按照我們目前安裝的Hadoop版本來選擇 筆者這里用的是hadoop2.7.7 所以我選擇的是Pre-built for Apache Hadoop 2.7 and later

下載並安裝spark

http://mirror.bit.edu.cn/apache/spark/spark-2.3.3/spark-2.3.3-bin-hadoop2.7.tgz tar zxf spark-2.3.3-bin-hadoop2.7.tgz

移動並修改權限

chown hduser:hduser spark-2.3.3-bin-hadoop2.7 mv spark-2.3.3-bin-hadoop2.7 /usr/local/spark

配置環境變量

vim .bashrc #spark var
export SPARK_HOME=/usr/local/spark export PATH=$PATH:$SPARK_HOME/bin

進入spark交互頁面

默認是python2.7.x版本,對於當前來說版本比較老,可以修改pyspark來選擇其他版本(前提是當前服務器已安裝其他版本python)

修改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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM