一 、Spark概述
官網:http://spark.apache.orgjava
Spark是一種快速、通用、可擴展的大數據分析引擎,2009年誕生於加州大學伯克利分校AMPLab,2010年開源,2013年6月成爲Apache孵化項目,2014年2月成爲Apache頂級項目。項目是用Scala進行編寫。node
目前,Spark生態系統已經發展成爲一個包含多個子項目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLib、SparkR等子項目,Spark是基於內存計算的大數據並行計算框架。除了擴展了普遍使用的 MapReduce 計算模型,並且高效地支持更多計算模式,包括交互式查詢和流處理。Spark 適用於各類各樣原先須要多種不一樣的分佈式平臺的場景,包括批處理、迭代算法、交互式查詢、流處理。經過在一個統一的框架下支持這些不一樣的計算,Spark 使咱們能夠簡單而低耗地把各類處理流程整合在一塊兒。而這樣的組合,在實際的數據分析 過程當中是頗有意義的。不只如此,Spark 的這種特性還大大減輕了原先須要對各類平臺分 別管理的負擔。linux
大一統的軟件棧,各個組件關係密切而且能夠相互調用,這種設計有幾個好處:一、軟件棧中全部的程序庫和高級組件 均可以從下層的改進中獲益。二、運行整個軟件棧的代價變小了。不須要運 行 5 到 10 套獨立的軟件系統了,一個機構只須要運行一套軟件系統便可。系統的部署、維護、測試、支持等大大縮減。三、可以構建出無縫整合不一樣處理模型的應用。算法
Spark的內置項目以下:shell
Spark Core:實現了 Spark 的基本功能,包含任務調度、內存管理、錯誤恢復、與存儲系統 交互等模塊。Spark Core 中還包含了對彈性分佈式數據集(resilient distributed dataset,簡稱RDD)的 API 定義。apache
Spark SQL:是 Spark 用來操做結構化數據的程序包。經過 Spark SQL,咱們可使用 SQL 或者 Apache Hive 版本的 SQL 方言(HQL)來查詢數據。Spark SQL 支持多種數據源,比 如 Hive 表、Parquet 以及 JSON 等。編程
Spark Streaming:是 Spark 提供的對實時數據進行流式計算的組件。提供了用來操做數據流的 API,而且與 Spark Core 中的 RDD API 高度對應。vim
Spark MLlib:提供常見的機器學習(ML)功能的程序庫。包括分類、迴歸、聚類、協同過濾等,還提供了模型評估、數據 導入等額外的支持功能。瀏覽器
集羣管理器:Spark 設計爲能夠高效地在一個計算節點到數千個計算節點之間伸縮計 算。爲了實現這樣的要求,同時得到最大靈活性,Spark 支持在各類集羣管理器(cluster manager)上運行,包括 Hadoop YARN、Apache Mesos,以及 Spark 自帶的一個簡易調度 器,叫做獨立調度器。框架
Spark獲得了衆多大數據公司的支持,這些公司包括Hortonworks、IBM、Intel、Cloudera、MapR、Pivotal、百度、阿里、騰訊、京東、攜程、優酷土豆。當前百度的Spark已應用於鳳巢、大搜索、直達號、百度大數據等業務;阿里利用GraphX構建了大規模的圖計算和圖挖掘系統,實現了不少生產系統的推薦算法;騰訊Spark集羣達到8000臺的規模,是當前已知的世界上最大的Spark集羣。
快:
與Hadoop的MapReduce相比,Spark基於內存的運算要快100倍以上,基於硬盤的運算也要快10倍以上。Spark實現了高效的DAG執行引擎,能夠經過基於內存來高效處理數據流。計算的中間結果是存在於內存中的。
易用:
Spark支持Java、Python和Scala的API,還支持超過80種高級算法,使用戶能夠快速構建不一樣的應用。並且Spark支持交互式的Python和Scala的shell,能夠很是方便地在這些shell中使用Spark集羣來驗證解決問題的方法。
通用:
Spark提供了統一的解決方案。Spark能夠用於批處理、交互式查詢(Spark SQL)、實時流處理(Spark Streaming)、機器學習(Spark MLlib)和圖計算(GraphX)。這些不一樣類型的處理均可以在同一個應用中無縫使用。Spark統一的解決方案很是具備吸引力,畢竟任何公司都想用統一的平臺去處理遇到的問題,減小開發和維護的人力成本和部署平臺的物力成本。
兼容性:
Spark能夠很是方便地與其餘的開源產品進行融合。好比,Spark可使用Hadoop的YARN和Apache Mesos做爲它的資源管理和調度器,器,而且能夠處理全部Hadoop支持的數據,包括HDFS、HBase和Cassandra等。這對於已經部署Hadoop集羣的用戶特別重要,由於不須要作任何數據遷移就可使用Spark的強大處理能力。Spark也能夠不依賴於第三方的資源管理和調度器,它實現了Standalone做爲其內置的資源管理和調度框架,這樣進一步下降了Spark的使用門檻,使得全部人均可以很是容易地部署和使用Spark。此外,Spark還提供了在EC2上部署Standalone的Spark集羣的工具。
咱們大體把Spark的用例分爲兩類:數據科學應用和數據處理應用。也就對應的有兩種人羣:數據科學家和工程師。
數據科學任務:
主要是數據分析領域,數據科學家要負責分析數據並建模,具有 SQL、統計、預測建模(機器學習)等方面的經驗,以及必定的使用 Python、 Matlab 或 R 語言進行編程的能力。
數據處理應用:
工程師定義爲使用 Spark 開發 生產環境中的數據處理應用的軟件開發者,經過對接Spark的API實現對處理的處理和轉換等任務。
兩種部署方式:
第一種:Standalone
1.解壓
$ tar -zxf ~/softwares/installtions/spark-2.1.1-bin-hadoop2.7.tgz -C ~/modules/
2.修改配置文件,將全部以template結尾的文件拓展名去掉
cd /home/admin/modules/spark-2.1.1-bin-hadoop2.7/conf
vim salves linux01 linux02 linux03
vim spark-defaults.conf 配置歷史服務 spark.eventLog.enabled true spark.eventLog.dir hdfs://linux01:8020/directory spark.eventLog.compress true
vim spark-env.sh SPARK_MASTER_HOST=linux01 SPARK_MASTER_PORT=7077 export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=4000 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://linux01:8020/directory"
3.到hdfs中建立directory目錄
$ cd ~/modules/hadoop-2.7.2/ $ bin/hdfs dfs -mkdir /directory
4.分發配置完成的Spark
$ scp -r ~/modules/spark-2.1.1-bin-hadoop2.7/ linux02:/home/admin/modules/ $ scp -r ~/modules/spark-2.1.1-bin-hadoop2.7/ linux03:/home/admin/modules/
1.修改配置
$ vim /home/admin/modules/hadoop-2.7.2/etc/hadoop/yarn-site.xml
添加下面配置
<!--是否啓動一個線程檢查每一個任務正使用的物理內存量,若是任務超出分配值,則直接將其殺掉,默認是true --> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <!--是否啓動一個線程檢查每一個任務正使用的虛擬內存量,若是任務超出分配值,則直接將其殺掉,默認是true --> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property>
2.分發配置
$ scp -r /home/admin/modules/hadoop-2.7.2/etc linux02:/home/admin/modules/hadoop-2.7.2/ $ scp -r /home/admin/modules/hadoop-2.7.2/etc linux03:/home/admin/modules/hadoop-2.7.2/
3.重啓整個集羣
$ sh /home/admin/tools/stop-cluster.sh $ sh /home/admin/tools/start-cluster.sh
4.修改spark-evn.sh
vim /home/admin/modules/spark-2.1.1-bin-hadoop2.7/conf/spark-env.sh HADOOP_CONF_DIR=/home/admin/modules/hadoop-2.7.2/etc/hadoop YARN_CONF_DIR=/home/admin/modules/hadoop-2.7.2/etc/hadoop
5.分發spark-evn.sh
$ scp -r ~/modules/spark-2.1.1-bin-hadoop2.7/ linux02:/home/admin/modules/ $ scp -r ~/modules/spark-2.1.1-bin-hadoop2.7/ linux03:/home/admin/modules/
6.重啓spark
$ sbin/stop-all.sh $ sbin/start-all.sh
7.啓動Spark歷史日誌服務
$ sbin/start-history-server.sh
8.所有完成後確認,訪問瀏覽器http://linux01:8080/
1.Spark-shell
$ bin/spark-shell \ --master spark://linux01:7077 \ --executor-memory 2g \ --total-executor-cores 2
2.Standalone提交jar包(任務:是一個使用蒙特卡洛算法,求圓周率)
$ /home/admin/modules/spark-2.1.1-bin-hadoop2.7/bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master spark://linux01:7077 \ --executor-memory 1G \ --total-executor-cores 2 \ /home/admin/modules/spark-2.1.1-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.1.1.jar \ 100
3.Local模式運行
$ /home/admin/modules/spark-2.1.1-bin-hadoop2.7/bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master local[*] \ --executor-memory 1G \ --total-executor-cores 2 \ /home/admin/modules/spark-2.1.1-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.1.1.jar \ 100
4.YARN模式運行
$ /home/admin/modules/spark-2.1.1-bin-hadoop2.7/bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode client \ /home/admin/modules/spark-2.1.1-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.1.1.jar \ 100