Spark認識&環境搭建&運行第一個Spark程序

摘要:Spark做爲新一代大數據計算引擎,由於內存計算的特性,具備比hadoop更快的計算速度。這裏總結下對Spark的認識、虛擬機Spark安裝、Spark開發環境搭建及編寫第一個scala程序、運行第一個Spark程序。

1.Spark是什麼

Spark是一個快速且通用的集羣計算平臺html

2.Spark的特色

1)Spark是快速的linux

   Spark擴充了流行的Mapreduce計算模型web

   Spark是基於內存的計算算法

2)Spark是通用的sql

    Spark的設計容納了其它分佈式系統擁有的功能shell

    批處理,迭代式計算,交互查詢和流處理等apache

3)Spark是高度開放的瀏覽器

    Spark提供了Python,Java,Scala,SQL的API和豐富的內置庫。網絡

    Spark和其它的大數據工具整合的很好,包括hadoop,kafka等ssh

3.Spark的組件

Spark包括多個緊密集成的組件

 Spark Core:

  包含Spark的基本功能,包含任務調度,內存管理,容錯機制等

  內部定義了RDDs(彈性分佈式數據集)

  提供了不少APIs來建立和操做這些RDDs

  應用場景,爲其餘組件提供底層的服務

Spark SQL:

   是Spark處理結構化數據的庫,就像Hive SQL,Mysql同樣

  應用場景,企業中用來作報表統計

Spark Streaming:

  是實時數據流處理組件,相似Storm

  Spark Streaming提供了API來操做實時流數據

  應用場景,企業中用來從Kafka接收數據作實時統計

MLlib:

       一個包含通用機器學習功能的包,Machine learning lib

       包含分類,聚類,迴歸等,還包括模型評估和數據導入。

  MLlib提供的上面這些方法,都支持集羣上的橫向擴展。

  應用場景,機器學習。

Graphx:

  是處理圖的庫(例如,社交網絡圖),並進行圖的並行計算。

  像Spark Streaming,Spark SQL同樣,它也繼承了RDD API。

  它提供了各類圖的操做,和經常使用的圖算法,例如PangeRank算法。

  應用場景,圖計算。

Cluster Managers:

  就是集羣管理,Spark自帶一個集羣管理是單獨調度器。

  常見集羣管理包括Hadoop YARN,Apache Mesos

4.緊密集成的優勢

  Spark底層優化了,基於Spark底層的組件也獲得了相應的優化。

  緊密集成,節省了各個組件組合使用時的部署、測試等時間。

  向Spark增長新的組件時,其它組件,可馬上享用新組件的功能。

5.Spark與Hadoop的比較

  Hadoop應用場景:離線處理、對時效性要求不高

  Spark應用場景:時效性要求高的場景、機器學習等領域

  Doug Cutting的觀點:這是生態系統,每一個組件都有其做用,各善其職便可。Spark不具備HDFS的存儲能力,要藉助HDFS等持久化數據。大數據將會孕育出更多的新技術。

6.Spark運行環境

  Spark是Scala寫的,運行在JVM上,因此運行環境Java7+

  若是使用Python API,須要安裝Python2.6+或者Python3.4+

  版本對應:Spark1.6.2 -  Scala2.10    Spark2.0.0 -  Scala2.11

7.Spark安裝

  Spark下載地址:http://spark.apache.org/downloads.html     注:搭Spark不須要Hadoop,若有hadoop集羣,可下載相應的版本。

  

  這裏安裝在CentOS6.5虛擬機上,將下載好的文件上傳虛擬機,並執行解壓:tar -zxvf spark-2.0.1-bin-hadoop2.6.tgz

  Spark目錄:

    bin包含用來和Spark交互的可執行文件,如Spark shell。

    examples包含一些單機Spark job,能夠研究和運行這些例子。

  Spark的Shell:

    Spark的shell可以處理分佈在集羣上的數據。

    Spark把數據加載到節點的內存中,所以分佈式處理可在秒級完成。

    快速使用迭代式計算,實時查詢、分析通常可以在shells中完成。

    Spark提供了Python shells和Scala shells。

  這裏以Scala shell爲例,演示讀取本地文件並進行操做:

    進入Scala shell:./spark-shell

    

    建立測試文件helloSpark並輸入內容:

    

    輸入val lines=sc.textFile("/home/lucy/hellospark") 加載文件內容,輸入lines.count()進行統計行數:    ( 注:sc爲spark content)

     

  ssh的配置:(ssh localhost須要輸入密碼,這在運行spark程序時是不能夠的)

    ssh-keygen (生成祕鑰)

    .ssh目錄下cat xxx_rsa.pub> authorized_keys

    chmod 600 authorized_keys

8.Spark開發環境搭建

  Scala 下載地址: http://www.scala-lang.org/download/2.11.6.html   注:默認安裝選項會自動配置環境變量,安裝路徑不能有空格。

  IntelliJ IDEA 下載地址:https://www.jetbrains.com/idea/

  註冊碼地址:http://idea.lanyus.com

  因爲這裏下載的ideaIU-15.0.2.exe,已經包含有Scala插件,若是不包含須要下載。查看是否已有scala插件能夠新建項目,打開Files->settings選擇Plugins,輸入scala查看:

  

9.編寫第一個Scala程序

  依次點擊File->New->Project,選擇Scala->SBT,下一步,打開以下窗口:

  

  這裏Scala選擇爲2.11.6,建立完成後會進行初始化操做,自動下載jar包等。下載時常看具體網絡狀況。待全部進度條完成後,項目目錄已經出來了,以下:

  

  編輯build.sbt:

  name := "LearnSpark"

  version := "1.0"

  scalaVersion := "2.11.1"

  libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.0.2"

  編輯完成後,點擊刷新,後臺自動下載對應的依賴:

  

  src->scala右擊新建scala類WordCount

  

複製代碼
import org.apache.spark.{SparkContext, SparkConf} /** * Created by Lucy on 2017/7/4. */ object WordCount { def main(args: Array[String]) { val conf=new SparkConf().setAppName("wordcount") val sc=new SparkContext(conf) val input=sc.textFile("/home/lucy/helloSpark") val lines=input.flatMap(line=>line.split(" ")) val count=lines.map(word=>(word,1)).reduceByKey{case (x,y)=>x+y} val output=count.saveAsTextFile("/home/lucy/hellosparkRes") } }
複製代碼

  代碼編寫完成後,進行打包(配置jar包,build):

  配置jar包:File->Project Structure,選擇Artifacts,點擊+號:

  

    

  這裏不打包依賴。配置jar包完成後,Build->Build Artifacts,等待build完成。

10.運行第一個Spark程序

  這裏須要先啓動集羣:

  啓動master:  ./sbin/start-master.sh

  啓動worker:  ./bin/spark-class org.apache.spark.deploy.worker.Worker spark://localhost:7077  

        這裏的地址爲:啓動master後,在瀏覽器輸入localhost:8080,查看到的master地址

        

  啓動成功後,jps查看進程:

  

  接下來執行提交命令,將打好的jar包上傳到linux目錄,jar包在項目目錄下的out\artifacts下。

  提交做業: ./bin/spark-submit --master spark://localhost:7077 --class WordCount /home/lucy/learnspark.jar

  能夠在4040端口查看job進度:

  

  查看結果:

  

  因爲按照空格分割字符串,因此這裏將Spark! 視爲一個單詞。至此,任務運行結束!

 

轉自 https://www.cnblogs.com/wonglu/p/5901356.html

相關文章
相關標籤/搜索