---spark
spark 產(chǎn)生背景
MapReduce的局限性
1)代碼繁瑣
2)只能夠支持map與reduce的方法
3)執(zhí)行效率低下
4)不適合迭代多次(機器學習)拯辙、交互式(數(shù)據(jù)挖掘)、流式的處理(MapReduice數(shù)據(jù)源為靜態(tài))
框架多樣化
1)批處理(離線):MapReduce Hive Pig
2)流式處理: Storm苟翻、JStorm
3)交互式計算:Impala
=======> Spark
Spark 生態(tài)圈
BDAS : Berkeley Data Analytics Stack
spark搭建文檔:http://spark.apache.org/docs/latest/building-spark.html
Spark搭建環(huán)境
首先進入官網(wǎng)下載spark-2.1.0.tgz 并且解壓
1)前提Maven大于3.3.9 jdk大于7 目前最新2.3需要8+
2)export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m" 您需要通過設置來配置Maven以使用比平時更多的內存MAVEN_OPTS:
如果是cdh版本
進入 pom.xml在原來的<repositories>內增加(要放到原有倉庫的后面)
<repository>
<id>central</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
進入spark根目錄
Maven編譯命令 指定依賴與hadoop版本(如果hadoop不設置 默認2.2.0)
./build/mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.7.0 -Phive -Phive-thriftserver -DskipTests clean package
(耗時較長 可能達到小時級別)
Maven編譯可運行的 #推薦使用
先指定scala版本
./dev/change-scala-version.sh 2.x.x
./dev/make-distribution.sh
--name 2.6.0-cdh5.7.0
--tgz
-Pyarn -Phadoop-2.6
-Phive -Phive-thriftserver
-Dhadoop.version=2.6.0-cdh5.7.0
-U
-X
具體可以看make-distribution.sh腳本 這種編譯模式可以不需要配置內存 腳本已經(jīng)存在
如果報內存不夠 請自行加內存。
編譯完成后:
spark-VERSION-bin-NAME.tgz
我的名稱 spark-2.1.0-bin-2.6.0-cdh5.7.0.tgz 然后解壓就可以了
啟動spark local模式
首先進入根目錄的bin文件夾 可以不帶jars 我個人需要這個jar包
./spark-shell --master local[2] --jars ~/software/mysql-connector-java-5.1.27-bin.jar
現(xiàn)在可以打開spark的web界面
http://ip:4040/jobs/
spark Standalone模式的架構和Hadoop 與HDFS/YARN類似
1 master + n worker
進入spark根目錄
cd conf
vi spark-env.sh
SPARK_MASTER_HOST=hadoop001
SPARK_WORKER_CORES=2
SPARK_WORKER_MEMORY=2g
SPARK_WORKER_INSTANCES=1
然后進入sbin
./start-all.sh
查看 logs/spark-hadoop-org.apache.spark.deploy.master.Master-1-hadoop001.out
logs中包含了很多啟動日志 可以看到端口的占用
可以在http://ip:8080/ 中查看master狀態(tài)
多臺機器的情況
可以配置
vi conf/slaves
每行加入一臺hostname
這樣當我們啟動start-all.sh時 會在slaves列表中的機器 去啟動woker進程
啟動spark-shell
./spark-shell --master spark://hadoop001:7077 //master 為我們的master host給出的webUI上的Master URL
spark-shell 中實現(xiàn)wordcount
val file = spark.sparkContext.textFile("file:///home/hadoop/data/wc.txt")
val wordCounts = file.flatMap(line => line.split(",")).map((word =>(word,1))).reduceByKey(+)
wordCounts.collect
wc.txt 中的內容
hello,world,hello
hello,world
welcome