大數據系列——Spark學習筆記之初識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來替代MR二、Hive、Storm等傳統的大數據並行計算框架

2. Spark是什麼?

  • Apache Spark™ is a unified analytics engine for large-scale data processing.
  • 大規模數據集的統一分析引擎
  • Spark是一個基於內存的通用並行計算框架,目的是讓數據分析更加快速
  • Spark包含了大數據領域常見的各類計算框架java

    • spark core(離線計算)
    • sparksql(交互式查詢)
    • spark streaming(實時計算)
    • Spark MLlib (機器學習)
    • Spark GraphX (圖計算)

3. Spark能代替hadoop嗎?

不徹底對python

由於咱們只能使用spark core代替mr作離線計算,數據的存儲仍是要依賴hdfssql

Spark+Hadoop的組合,纔是將來大數據領域最熱門的組合,也是最有前景的組合! shell

4. Spark的特色

  • 速度api

    • 內存計算在速度上要比mr快100倍以上
    • 磁盤計算在速度上要比mr快10倍以上
  • 容易使用緩存

    • 提供了java scala python R語言的api接口
  • 一站式解決方案app

    • spark core(離線計算)
    • spark sql(交互式查詢)
    • spark streaming(實時計算)
    • .....
  • 能夠運行在任意的平臺框架

    • yarn
    • Mesos
    • standalone

5. Spark的缺點

  • JVM的內存overhead太大,1G的數據一般須要消耗5G的內存 (Project Tungsten 正試圖解決這個問題 )
  • 不一樣的spark app之間缺少有效的共享內存機制(Project Tachyon 在試圖引入分佈式的內存管理,這樣不一樣的spark app能夠共享緩存的數據)

6. Spark vs MR

6.1 mr的侷限性

  • 抽象層次低,須要手工編寫代碼來完成,使用上難以上手
  • 只提供兩個操做,Map和Reduce,表達力欠缺
  • 一個Job只有Map和Reduce兩個階段(Phase), 複雜的計算須要大量的Job完成,Job之間的依賴關係是由開發者本身管理的
  • 中間結果 (reduce的輸出結果) 也放在HDFS文件系統中
  • 延遲高,只適用Batch數據處理,對於交互式數據處理,實時數據處理的支持不夠
  • 對於迭代式數據處理性能比較差

6.2 Spark解決了mr中的那些問題?

  • 抽象層次低,須要手工編寫代碼來完成,使用上難以上手機器學習

    • 經過spark中的RDD(Resilient distributed datasets)來進行抽象
  • 只提供兩個操做,Map和Reduce,表達力欠缺分佈式

    • 在spark中提供了多種算子
  • 一個Job只有Map和Reduce兩個階段

    • 在spark中能夠有多個階段(stage)
  • 中間結果也放在HDFS文件系統中(速度慢)

    • 中間結果放在內存中,內存放不下了會寫入本地磁盤,而不是HDFS
  • 延遲高,只適用Batch數據處理,對於交互式數據處理,實時數據處理的支持不夠

    • sparksql和sparkstreaming解決了上面問題
  • 對於迭代式數據處理性能比較差

    • 經過在內存中緩存數據,提升迭代式計算的性能

==所以,Hadoop MapReduce會被新一代的大數據處理平臺替代是技術發展的趨勢,而在新一代的大數據處理平臺中,Spark目前獲得了最普遍的承認和支持==

7. Spark的版本

  • spark1.6.3 : scala的版本2.10.5
  • spark2.2.0 : scala的版本2.11.8(新項目建議使用spark2.x的版本)
  • hadoop2.7.5

8. Spark單機版的安裝

  • 準備安裝包spark-2.2.0-bin-hadoop2.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/jdk
    export SPARK_MASTER_IP=uplooking01
    export SPARK_MASTER_PORT=7077
    export SPARK_WORKER_CORES=4
    export SPARK_WORKER_INSTANCES=1
    export SPARK_WORKER_MEMORY=2g
    export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop
  • 配置環境變量

    #配置Spark的環境變量
    export SPARK_HOME=/opt/spark
    export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
  • 啓動單機版spark

    start-all-spark.sh
  • 查看啓動

    http://uplooking01:8080

9. Spark分佈式集羣的安裝

  • 配置spark-env.sh

    [root@uplooking01 /opt/spark/conf]    
            export JAVA_HOME=/opt/jdk
            #配置master的主機
            export SPARK_MASTER_IP=uplooking01
            #配置master主機通訊的端口
            export SPARK_MASTER_PORT=7077
            #配置spark在每一個worker中使用的cpu核數
            export SPARK_WORKER_CORES=4
            #配置每一個主機有一個worker
            export SPARK_WORKER_INSTANCES=1
            #worker的使用內存是2gb
            export SPARK_WORKER_MEMORY=2g
            #hadoop的配置文件中的目錄
            export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop
  • 配置slaves

    [root@uplooking01 /opt/spark/conf]
            uplooking03
            uplooking04
            uplooking05
  • 分發spark

    [root@uplooking01 /opt/spark/conf]    
            scp -r /opt/spark  uplooking02:/opt/
            scp -r /opt/spark  uplooking03:/opt/
            scp -r /opt/spark  uplooking04:/opt/
            scp -r /opt/spark  uplooking05:/opt/
  • 分發uplooking01上配置的環境變量

    [root@uplooking01 /]    
            scp -r /etc/profile  uplooking02:/etc/
            scp -r /etc/profile  uplooking03:/etc/
            scp -r /etc/profile  uplooking04:/etc/
            scp -r /etc/profile  uplooking05:/etc/
  • 啓動spark

    [root@uplooking01 /]    
        start-all-spark.sh

10. Spark高可用集羣

先中止正在運行的spark集羣

  • 修改spark-env.sh

    #註釋如下這兩行內容
    #export SPARK_MASTER_IP=uplooking01
    #export SPARK_MASTER_PORT=7077
  • 添加內容

    export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=uplooking03:2181,uplooking04:2181,uplooking05:2181 -Dspark.deploy.zookeeper.dir=/spark"
  • 分發修改的[配置

    scp /opt/spark/conf/spark-env.sh uplooking02:/opt/spark/conf
    scp /opt/spark/conf/spark-env.sh uplooking03:/opt/spark/conf
    scp /opt/spark/conf/spark-env.sh uplooking04:/opt/spark/conf
    scp /opt/spark/conf/spark-env.sh uplooking05:/opt/spark/conf
  • 啓動集羣

    [root@uplooking01 /]
        start-all-spark.sh
    [root@uplooking02 /]
        start-master.sh

11. 第一個Spark-Shell程序

spark-shell  --master spark://uplooking01:7077 
#spark-shell能夠在啓動時指定spark-shell這個application使用的資源(總核數,每一個work上使用的內存)
spark-shell  --master  spark://uplooking01:7077   --total-executor-cores 6   --executor-memory 1g

#若是不指定  默認使用每一個worker上所有的核數,和每一個worker上的1g內存
sc.textFile("hdfs://ns1/sparktest/").flatMap(_.split(",")).map((_,1)).reduceByKey(_+_).collect

12. Spark中的角色

  • Master

    • 負責接收提交的做業的請求
    • master負責調度資源(在woker中啓動CoarseGrainedExecutorBackend)
  • Worker

    • worker中的executor負責執行task
  • Spark-Submitter ===> Driver

    • 提交spark應用程序給master

13. Spark提交做業的大致流程

圖片描述

相關文章
相關標籤/搜索