Spark簡介安裝和簡單例子

Spark簡介安裝和簡單例子

Spark簡介

Spark是一種快速、通用、可擴展的大數據分析引擎,目前,Spark生態系統已經發展成爲一個包含多個子項目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLlib等子項目,Spark是基於內存計算的大數據並行計算框架。簡單來講Spark是 內存迭代計算,每一個算子將計算結果保存在內存中,其餘算子,讀取這個結果,繼續計算。java

Spark的四個特性:

1.快
Spark實現了高效的DAG執行引擎,能夠經過基於內存來高效處理數據流。node

2.易用
Spark支持Java、Python和Scala的API,還支持超過80種高級算法,並且Spark支持交互式的Python和Scala的shell,能夠很是方便地在這些shell中使用Spark集羣來驗證解決問題的方法。
依賴外部數據源hdfs、本地文件.kafka.flume.mysql.ELK)mysql

3.通用
Spark提供了統一的解決方案。Spark能夠用於批處理、交互式查詢(Spark SQL)、實時流處理(Spark Streaming)、機器學習(Spark MLlib)和圖計算(GraphX)。這些不一樣類型的處理均可以在同一個應用中無縫使用。算法

4.兼容性
Spark能夠很是方便地與其餘的開源產品進行融合。好比,Spark可使用Hadoop的YARN和Apache Mesos做爲它的資源管理和調度器,器,而且能夠處理全部Hadoop支持的數據,包括HDFS、HBase和Cassandra等。它實現了Standalone做爲其內置的資源管理和調度框架,使得全部人均可以很是容易地部署和使用Spark。sql

Spark的安裝:

1.準備兩臺以上Linux服務器,安裝好JDK1.7
2.在官網:http://spark.apache.org/ 中下載Spark安裝包
http://www.apache.org/dyn/closer.lua/spark/spark-1.5.2/spark-1.5.2-bin-hadoop2.6.tgz
上傳解壓安裝包
上傳spark-1.5.2-bin-hadoop2.6.tgz安裝包到Linux上
解壓安裝包到指定位置
tar -zxvf spark-1.5.2-bin-hadoop2.6.tgz -C /usr/local
3.進入到Spark安裝目錄
cd /usr/local/spark-1.5.2-bin-hadoop2.6
進入conf目錄並重命名並修改spark-env.sh.template文件
cd conf/
mv spark-env.sh.template spark-env.sh
vi spark-env.sh
在該配置文件中添加以下配置
export JAVA_HOME=/usr/java/jdk1.7.0_45
export SPARK_MASTER_IP=機器的ip
export SPARK_MASTER_PORT=7077
保存退出
重命名並修改slaves.template文件
mv slaves.template slaves
vi slaves
在該文件中添加子節點所在的位置(Worker節點)
子節點機器地址1
子節點機器地址2
子節點機器地址3
保存退出
將配置好的Spark拷貝到其餘節點上
scp -r spark-1.5.2-bin-hadoop2.6/ 子節點機器地址1:/usr/local/
scp -r spark-1.5.2-bin-hadoop2.6/ 子節點機器地址2:/usr/local/
scp -r spark-1.5.2-bin-hadoop2.6/ 子節點機器地址3:/usr/local/shell

Spark集羣配置完畢,目前是1個Master,3個Work,在master所在機器上啓動Spark集羣
/usr/local/spark-1.5.2-bin-hadoop2.6/sbin/start-all.shapache

啓動後執行jps命令,主節點上有Master進程,其餘子節點上有Work進行,登陸Spark管理界面查看集羣狀態(主節點):http://master機器ip:8080/編程

到此爲止,Spark集羣安裝完畢,可是有一個很大的問題,那就是Master節點存在單點故障,要解決此問題,就要藉助zookeeper,而且啓動至少兩個Master節點來實現高可靠,配置方式比較簡單:
Spark集羣規劃:node1,node2是Master;node3,node4,node5是Worker
安裝配置zk集羣,並啓動zk集羣
中止spark全部服務,修改配置文件spark-env.sh,在該配置文件中刪掉SPARK_MASTER_IP並添加以下配置
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=zk1,zk2,zk3 -Dspark.deploy.zookeeper.dir=/spark"
(1).在node1節點上修改slaves配置文件內容指定worker節點
(2).在node1上執行sbin/start-all.sh腳本,而後在node2上執行sbin/start-master.sh啓動第二個Master 。服務器

啓動Spark Shell

spark-shell是Spark自帶的交互式Shell程序,方便用戶進行交互式編程,用戶能夠在該命令行下用scala編寫spark程序。框架

/usr/local/spark-1.5.2-bin-hadoop2.6/bin/spark-shell  
--master spark://node1:7077  
--executor-memory 2g  
--total-executor-cores 2

參數說明:
--master spark://node1:7077 指定Master的地址
--executor-memory 2g 指定每一個worker可用內存爲2G
--total-executor-cores 2 指定整個集羣使用的cup核數爲2個

注意:
若是啓動spark shell時沒有指定master地址,可是也能夠正常啓動spark shell和執行spark shell中的程序,實際上是啓動了spark的local模式,該模式僅在本機啓動一個進程,沒有與集羣創建聯繫。

Spark Shell中已經默認將SparkContext類初始化爲對象sc。用戶代碼若是須要用到,則直接應用sc便可

WordCount程序

1.首先啓動hdfs
2.向hdfs上傳一個文件到hdfs://master機器ip:9000/words.txt
3.在spark shell中用scala語言編寫spark程序
sc.textFile("hdfs://node1:9000/words.txt").flatMap(_.split(" "))
.map((_,1)).reduceByKey(_+_).saveAsTextFile("hdfs://node1:9000/out")

4.使用hdfs命令查看結果
hdfs dfs -ls hdfs://master機器ip:9000/out/p*

說明: sc是SparkContext對象,該對象時提交spark程序的入口 textFile(hdfs:/master機器ip:9000/words.txt)是hdfs中讀取數據 flatMap(_.split(" "))先map在壓平 map((_,1))將單詞和1構成元組 reduceByKey(_+_)按照key進行reduce,並將value累加 saveAsTextFile("hdfs://master機器ip:9000/out")將結果寫入到hdfs中

相關文章
相關標籤/搜索