任務描述
知識點:安裝配置Spark?
重? 點: 安裝配置Spark?
難? 點:無
內? 容:
? ? ? ? Apache Spark?是專為大規模數據處理而設計的快速通用的計算引擎。Spark是UC Berkeley AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用并行框架,Spark,擁有Hadoop MapReduce所具有的優點;但不同于MapReduce的是Job中間輸出結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數據挖掘與機器學習等需要迭代的MapReduce的算法。
? ? ? ? 本任務主要內容是安裝配置Spark,并搭建Spark HA高可用架構。
任務指導
安裝Spark集群主要包括以下步驟:
1、下載Spark安裝包,在各節點中安裝部署spark集群
2、配置整合
3、啟動并測試
注:Spark的運行方式分為三種,這里使用在工作中最常用的方式 Spark on YARN,將Spark托管到YARN上運行
任務實現
1. 下載Spark
可以從官方網站下載合適的版本。當前環境已經提供了安裝包,存放在 /opt/software目錄下。
2. 在node1節點上安裝Spark
- 解壓安裝Spark
[root@node1 ~]# cd /opt/software/
[root@node1 software]# tar -xzf spark.tar.gz -C /opt/module/
- 配置Spark環境變量,修改系統配置文件/etc/profile。
輸入【# vim?/etc/profile】命令,編輯/etc/profile文件,增加如下內容:
export SPARK_HOME=/opt/module/spark/
export PATH=$PATH:$SPARK_HOME/bin
- 使用【source? /etc/profile】命令使配置文件生效
[root@node1 software]# source /etc/profile
- 進入/opt/module/spark/conf 配置文件夾
[root@node1 software]# cd $SPARK_HOME/conf
- 配置spark-env.sh文件,配置過程如下:
使用【cp】命令,從spark-env.sh.template模板文件復制并創建spark-env.sh文件
[root@node1 conf]# cp spark-env.sh.template spark-env.sh
然后使用【 vim spark-env.sh】命令編輯該文件
[root@node1 conf]# vim spark-env.sh
添加如下內容:
export JAVA_HOME=/opt/module/jdk1.8.0_301
export HADOOP_CONF_DIR=/opt/module/hadoop/etc/hadoop
3. 將node1節點上的Spark分別都拷貝到node2、node3節點上
- 將配置好的Spark復制到其他節點對應位置上,通過scp命令發送。
[root@node1 conf]# scp -rq /opt/module/spark node2:/opt/module/
[root@node1 conf]# scp -rq /opt/module/spark node3:/opt/module/
- 將配置好的環境變量/etc/profile復制到其他節點對應位置上,通過scp命令發送。
[root@node1 conf]# scp -rq /etc/profile node2:/etc/
[root@node1 conf]# scp -rq /etc/profile node3:/etc/
4. Spark配置的常見問題
- Spark相關命令比較靈活,這里使用【 spark-shell --master yarn】進行測試,代碼指定將Spark托管到YARN上
- 由于YARN調度機制的問題,Spark的資源無法被正確申請,所以需要修改Hadoop中的yarn-site.xml
- 進入node1的Hadoop配置目錄
[root@node1 ~]# cd $HADOOP_HOME/etc/hadoop
- 使用【vim】命令修改yarn-site.xml文件
[root@node1 hadoop]# vim yarn-site.xml
- 在yarn-site.xml文件的<configuration>標簽內,添加如下配置
<property>
<!--是否啟動一個線程檢查每個任務正使用的物理內存量,如果任務超出分配值,則直接將其殺掉,默認是true -->
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<!--是否啟動一個線程檢查每個任務正使用的虛擬內存量,如果任務超出分配值,則直接將其殺掉,默認是true -->
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
- 修改完成后將更新的yarn-site.xml文件分發至node2、node3的Hadoop配置文件目錄中
[root@node1 hadoop]# scp yarn-site.xml node2:/opt/module/hadoop/etc/hadoop/
[root@node1 hadoop]# scp yarn-site.xml node3:/opt/module/hadoop/etc/hadoop/
- 在node1節點上,重啟YARN集群
[root@node1 hadoop]# stop-yarn.sh
[root@node1 hadoop]# start-yarn.sh
5. 測試Spark
- 在node1節點上,首先上傳一個文件至HDFS目錄
[root@node1 ~]# cd $HADOOP_HOME/
[root@node1 hadoop]# hdfs dfs -put README.txt /
- 進入Spark Shell
[root@node1 hadoop]# spark-shell --master yarn
- 在Spark客戶端執行如下代碼,實現對HDFS上的 README.txt 文件的內容進行詞頻統計(即,統計每個單詞在文檔中出現的總次數),并將統計的結果保存到HDFS上的 /result目錄下。
scala> sc.textFile("hdfs://node1:9000/README.txt").flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey((a,b) => a+b).saveAsTextFile("hdfs://node1:9000/result")
- 輸入【:quit】退出 Spark Shell
scala> :quit
- 觀察HDFS的/result目錄中的數據,如果可以查看到詞頻統計的結果,則說明集群運行正常
[root@node1 hadoop]# hadoop fs -ls /result
[root@node1 hadoop]# hadoop fs -cat /result/part*