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


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

1.Spark是什么

Spark是一個快速且通用的集群計算平台

2.Spark的特點

1)Spark是快速的

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

   Spark是基於內存的計算

2)Spark是通用的

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

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

3)Spark是高度開放的

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM