天天看點

光環大資料spark文檔_大資料系列:Spark學習筆記1.關于Spark2.什麼是Spark?3. Spark可以取代Hadoop嗎?4.Spark的特點5.Spark的缺點6. Spark與MR7. Spark版本8.獨立安裝spark

光環大資料spark文檔_大資料系列:Spark學習筆記1.關于Spark2.什麼是Spark?3. Spark可以取代Hadoop嗎?4.Spark的特點5.Spark的缺點6. Spark與MR7. Spark版本8.獨立安裝spark

1.關于Spark

  • 2009年,spark誕生于伯克利大學的amplab。最重要的是,spark隻是一個實驗項目,隻包含很少的代碼,屬于輕量級架構。
  • 2010年,伯克利大學正式啟動了Spark項目。
  • 2013年6月,Spark成為Apache基金會的一個項目,并進入了高速開發階段。第三方開發人員貢獻了大量代碼,并且非常活躍
  • 2014年2月,Spark被稱為Apache的頂級項目。與此同時,大資料公司cloudera宣布增加對spark架構的投資,以取代MapReduce。
  • 2014年4月,大資料公司MAPR進入了Spark陣地。Apache mahout放棄了MapReduce,将使用spark作為計算引擎。
  • 2014年5月,釋出了Spark 1.0.0。
  • 2015年,Spark在國内IT行業中越來越受歡迎。越來越多的公司開始專注于部署或使用Spark取代MR2,hive,storm和其他傳統的大資料并行計算架構。

2.什麼是Spark?

  • Apache Spark™ 是用于大規模資料處理的統一分析引擎。
  • 大型資料集的統一分析引擎
  • Spark是基于記憶體的通用并行計算架構,旨在使資料分析更快
  • Spark包含大資料領域的各種通用計算架構
  • Spark Core(離線計算)
  • Sparksql(互動式查詢)
  • Spark Streaming(實時計算)
  • Spark mllib(機器學習)
  • Spark graphx(圖形計算)

3. Spark可以取代Hadoop嗎?

不完全正确。

因為我們隻能用火花的核心,而不是MR用于離線計算,資料存儲仍取決于HDFS。

Spark+Hadoop的結合是最流行的組合和最有前途的一個,在未來大資料的領域!

4.Spark的特點

  • 速度
  • 記憶體計算比Mr快100倍
  • 磁盤計算比Mr快10倍以上
  • 易于使用
  • 提供Java Scala Python R語言的API接口
  • 一站式解決方案
  • Spark核心(離線計算)
  • Spark SQL(互動式查詢)
  • Spark流式傳輸(實時計算)
  • …..
  • 可以在任何平台上運作
  • Yarn
  • Mesos
  • Standalone

5.Spark的缺點

  • JVM的記憶體開銷太大,1g的資料通常會消耗5g的記憶體(tungsten項目試圖解決此問題)
  • 不同的spark應用程式之間沒有有效的共享記憶體機制(項目Tachyon正在嘗試引入分布式記憶體管理,是以不同的spark應用程式可以共享緩存的資料)

6. Spark與MR

6.1 MR的局限性

  • 低層次的抽象,需要手工編寫代碼,很難使用
  • 僅提供兩個操作,即Map和Reduce,缺少表達式
  • 作業隻有兩個階段:映射和縮小。複雜的計算需要完成大量工作。作業之間的依賴關系由開發人員自己管理。
  • 中間結果(reduce的輸出)也放置在HDFS檔案系統中
  • 高延遲,僅适用于批處理資料,并且對互動式資料處理和實時資料處理的支援不足
  • 疊代資料處理性能不佳

6.2 Spark解決了哪些問題?

  • 低層次的抽象,需要手工編寫代碼,很難使用
  • 在Spark中通過RDD(彈性分布式資料集)進行抽象
  • 僅提供兩個操作,即map和reduce,缺少表達式
  • 火花中提供了許多運算符
  • 作業隻有兩個階段:map和reduce。
  • Spark可能有多個階段
  • 中間結果也在HDFS檔案系統上(緩慢)
  • 如果中間結果在記憶體中,它将被寫入本地磁盤而不是HDFS。
  • 高延遲,僅适用于批處理資料,并且對互動式資料處理和實時資料處理的支援不足
  • Sparksql和sparkstreaming解決了以上問題
  • 疊代資料處理性能不佳
  • 通過将資料緩存在記憶體中來提高疊代計算的性能

==是以,将Hadoop MapReduce替換為新一代大資料處理平台是技術發展的趨勢。在新一代的大資料處理平台中,spark是目前得到最廣泛認可和支援的。

7. Spark版本

  • spark1.6.3:Scala版本2.10.5
  • spark2.2.0:Scala 2.11.8版本(建議用于新項目)
  • hadoop2.7.5

8.獨立安裝spark

  • 準備安裝軟體包spark-2.2.0-bin-hadoop 2.7.tgz
$tar -zxvf spark-2.2.0-bin-hadoop2.7.tgz -C /opt/$mv spark-2.2.0-bin-hadoop2.7/ spark
           
  • 修改spark env.sh
export JAVA_HOME=/opt/jdkexport SPARK_MASTER_IP=hdp01export SPARK_MASTER_PORT=7077export SPARK_WORKER_CORES=4export SPARK_WORKER_INSTANCES=1export SPARK_WORKER_MEMORY=2gexport HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop
           
  • 配置環境變量
#Configure environment variables for sparkexport SPARK_HOME=/opt/sparkexport PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
           
  • 啟動stand-alone模式的Spark
$start-all-spark.sh
           
  • 檢視啟動狀态
http://hdp01:8080
           

9.安裝spark分布式叢集

  • 配置spark env.sh

[[email protected] /opt/spark/conf]

export JAVA_HOME=/opt/jdk #Configure the host of the master export SPARK_MASTER_IP=hdp01 #Configure the port for master host communication export SPARK_MASTER_PORT=7077 #Configure the number of CPU cores used by spark in each worker export SPARK_WORKER_CORES=4 #Configure one worker per host export SPARK_WORKER_INSTANCES=1 #The memory used by worker is 2GB export SPARK_WORKER_MEMORY=2g #Directory in Hadoop's configuration file export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop
           
  • 配置slaves

[[email protected] /opt/spark/conf]

hdp03 hdp04 hdp05
           
  • 分發Spark

[[email protected] /opt/spark/conf]

$scp -r /opt/spark hdp02:/opt/ $scp -r /opt/spark hdp03:/opt/ $scp -r /opt/spark hdp04:/opt/ $scp -r /opt/spark hdp05:/opt/
           
  • 分發在hdp01上配置的環境變量
$scp -r /etc/profile hdp03:/etc/
           

[[email protected] /]

$scp -r /etc/profile hdp02:/etc/ $scp -r /etc/profile hdp03:/etc/ $scp -r /etc/profile hdp04:/etc/ $scp -r /etc/profile hdp05:/etc/
           
  • 啟動Spark

[[email protected] /]

$start-all-spark.sh
           

10. 配置Spark高可用性叢集

先停止正在運作的火花叢集

  • 修改spark env.sh
#Note the following two lines#export SPARK_MASTER_IP=hdp01#export SPARK_MASTER_PORT=7077
           
  • 添加以下内容
$export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hdp03:2181,hdp04:2181,hdp05:2181 -Dspark.deploy.zookeeper.dir=/spark"
           
  • 分發修改後的配置
$scp /opt/spark/conf/spark-env.sh hdp02:/opt/spark/conf$scp /opt/spark/conf/spark-env.sh hdp03:/opt/spark/conf$scp /opt/spark/conf/spark-env.sh hdp04:/opt/spark/conf$scp /opt/spark/conf/spark-env.sh hdp05:/opt/spark/conf
           
  • 啟動叢集

[[email protected] /]

$start-all-spark.sh
           

[[email protected] /]

$start-master.sh
           

11.第一個Spark Shell程式

$spark-shell --master spark://hdp01:7077 #Spark shell can specify the resources (total cores, memory used on each work) used by the spark shell application at startup.$spark-shell --master spark://hdp01:7077 --total-executor-cores 6 --executor-memory 1g#If you do not specify to use all cores on each worker by default, and 1G memory on each worker>>>sc.textFile("hdfs://ns1/sparktest/").flatMap(_.split(