spark概述和安裝部署
-
1、什麽是spark
-
基於內存的計算引擎,它的計算速度非常快。但是spark僅僅只涉及到數據的計算,沒有涉及到數據的存儲。
-
-
2、為什麽學習spark
-
比mapreduce計算速度快很多。
-
-
3、spark特點
-
1、速度快
-
比mapreduce在內存中快100x,在磁盤中快10x
-
1、由於mapreduce每次job的中間結果數據都會落地到磁盤中,而spark每次中間結果數據可以不落地(可以保存在內存中)
-
2、mapreduce任務對應都會產生一些map任務和reduce任務,這些任務都會以進程的方式運行在集群中,針對於spark任務,它是以線程的方式運行在spark集群中。
-
-
-
2、易用性
-
可以快速寫一個spark應用程序采用4中語言(java/scala/Python/R)
-
-
3、通用性
-
可以使用sparkSql /sparkStreaming/Mlib/Graphx
-
-
4、兼容性
-
可以把spark程序提交到不同的平臺中運行(standalone/yarn/mesos)
-
-
2、spark集群安裝部署
-
1、下載spark安裝包
-
2、規劃安裝目錄
-
3、解壓安裝包到指定安裝目錄
-
4、重明名安裝目錄
-
5、修改配置文件
-
1、vi spark-env.sh (mv spark-env.sh.template spark-env.sh)
-
配置java環境變量
-
export JAVA_HOME=/export/servers/jdk
-
-
配置master的地址
-
export SPARK_MASTER_HOST=node1
-
-
配置master的端口
-
export SPARK_MASTER_PORT=7077
-
-
-
2、vi slaves (mv slaves.template slaves)
-
添加worker節點
-
node2
-
node3
-
-
-
-
6、添加spark環境變量
-
vi /etc/profile
export SPARK_HOME=/export/servers/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
-
-
7、分發spark安裝目錄到其他節點
-
scp -r spark root@node2:/export/servers
-
scp -r spark root@node3:/export/servers
-
scp /etc/profile root@node2:/etc
-
scp /etc/profile root@node3:/etc
-
-
8、讓所有spark環境變量生效
-
在所有節點執行
-
source /etc/profile
-
?
-
3、spark集群啟動和停止
-
啟動spark集群
-
在主節點上執行腳本
-
$SPARK_HOME/sbin/start-all.sh
-
-
-
停止spark集群
-
在主節點上執行腳本
-
$SPARK_HOME/sbin/stop-all.sh
-
-
4、spark集群web管理界面
-
spark web管理界面
-
訪問地址:http://master的地址:8080
-
5、基於zookeeper的sparkHA高可用部署
-
1、修改配置文件 vi spark-env.sh
-
1、註釋掉手動指定的master地址
-
export SPARK_MASTER_HOST=node1
-
-
2、添加配置參數 SPARK_DAEMON_JAVA_OPTS
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hdp-node-01:2181,hdp-node-02:2181,hdp-node-03:2181 -Dspark.deploy.zookeeper.dir=/spark"
-
-
2、啟動zk集群
-
3、啟動sparkHA
-
可以在任意一臺機器上啟動腳本(它會在當前機器中產生一個Master進程) 前提條件:配置所有機器兩兩之間對應的ssh免登錄
-
start-all.sh
-
-
可以在其他機器上單獨啟動master進程
-
start-master.sh
-
-
6、spark角色介紹
-
1、Driver
-
就是運行客戶端main方法,構建SparkContext對象
-
-
2、Application
-
包含driver代碼,還有當前這個任務計算所有需要的資源
-
-
3、Master
-
它是集群中老大,負責資源的分配和任務的調度
-
-
4、ClusterManager
-
spark應用程序可以獲取的外部資源
-
Standalone
-
spark自帶的集群模式,資源的分配和任務調度由Master
-
-
Yarn
-
資源的分配和任務調度由ResourceManager
-
-
Mesos
-
是apache開源的一個資源調度框架。
-
-
-
-
5、Worker Node
-
集群中的小弟,負責任務計算的節點
-
Standalone: 通過slaves文件指定的節點
-
spark on yarn: yarn中的NodeManager節點
-
-
6、executor
-
它是一個進程,它會在worker節點上啟動
-
-
7、task
-
是以線程的方式運行在executor進程中
-
7、初識spark程序
-
1、普通模式提交任務(已經知道活著的master地址)
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://node1:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
examples/jars/spark-examples_2.11-2.0.2.jar \
10 -
2、高可用模式提交任務(並不知道哪一個master是活著的master)
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://node1:7077,node2:7077,node3:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
examples/jars/spark-examples_2.11-2.0.2.jar \
10
8、spark-shell使用
-
1、spark-shell --master local[N] 讀取本地數據文件,實現單詞計數
-
--master local[N]
-
指定master的地址為本地單機版模式 ,N是一個正整數,(local[2])表示本地采用2個線程來運行任務
-
-
它會產生一個SparkSubmit進程
sc.textFile("file:///root/words.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect
?
sc.textFile("file:///root/words.txt").flatMap(x=>x.split(" ")).map(x=>(x,1)).reduceByKey((x,y)=>x+y).collect
-
-
2、spark-shell --master local[N] 讀取HDFS上數據文件,實現單詞計數
-
spark整合HDFS
-
vi spark-env.sh
export HADOOP_CONF_DIR=/export/servers/hadoop/etc/hadoop
sc.textFile("/words.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect -
-
-
3、spark-shell --master 指定master為spark集群中活著的master,讀取HDFS上數據文件,實現單詞計數
-
spark-shell --master spark://node1:7077 --executor-memory 1g --total-executor-cores 2
-
spark概述和安裝部署