日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Spark快速入门指南 – Spark安装与基础使用

發(fā)布時(shí)間:2023/11/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spark快速入门指南 – Spark安装与基础使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文轉(zhuǎn)載自Spark快速入門指南 – Spark安裝與基礎(chǔ)使用

Apache Spark 是一個(gè)新興的大數(shù)據(jù)處理通用引擎,提供了分布式的內(nèi)存抽象。Spark 正如其名,最大的特點(diǎn)就是快(Lightning-fast),可比 Hadoop MapReduce 的處理速度快 100 倍。此外,Spark 提供了簡(jiǎn)單易用的 API,幾行代碼就能實(shí)現(xiàn) WordCount。本教程主要參考官網(wǎng)快速入門教程,介紹了 Spark 的安裝,Spark shell 、RDD、Spark SQL、Spark Streaming 等的基本使用。

本教程的具體運(yùn)行環(huán)境如下:

  • CentOS 6.4
  • Spark 1.6
  • Hadoop 2.6.0
  • Java JDK 1.7
  • Scala 2.10.5

準(zhǔn)備工作

運(yùn)行 Spark 需要 Java JDK 1.7,CentOS 6.x 系統(tǒng)默認(rèn)只安裝了 Java JRE,還需要安裝 Java JDK,并配置好 JAVA_HOME 變量。此外,Spark 會(huì)用到 HDFS 與 YARN,因此請(qǐng)先安裝 Hadoop,具體請(qǐng)瀏覽Hadoop安裝教程,在此就不再?gòu)?fù)述。

安裝 Spark

待 Hadoop 安裝好之后,我們?cè)匍_(kāi)始安裝 Spark。

官網(wǎng)下載地址:http://spark.apache.org/downloads.html

本教程選擇的是 Spark 1.6.0 版本,選擇 package type 為 “Pre-build with user-provided Hadoop [can use with most Hadoop distributions]”,再點(diǎn)擊給出的下載連接?http://www.apache.org/dyn/closer.lua/spark/spark-1.6.0/spark-1.6.0-bin-without-hadoop.tgz?就可以下載了,如下圖所示:

從官網(wǎng)下載 Spark

Package type

  • Source code: Spark 源碼,需要編譯才能使用,另外 Scala 2.11 需要使用源碼編譯才可使用
  • Pre-build with user-provided Hadoop: “Hadoop free” 版,可應(yīng)用到任意 Hadoop 版本
  • Pre-build for Hadoop 2.6 and later: 基于 Hadoop 2.6 的預(yù)先編譯版,需要與本機(jī)安裝的 Hadoop 版本對(duì)應(yīng)。可選的還有 Hadoop 2.4 and later、Hadoop 2.3、Hadoop 1.x,以及 CDH 4。

為方便,本教程選擇的是 Pre-build with user-provided Hadoop,簡(jiǎn)單配置后可應(yīng)用到任意 Hadoop 版本。

下載后,執(zhí)行如下命令進(jìn)行安裝:

  • sudo tar -zxf ~/下載/spark-1.6.0-bin-without-hadoop.tgz -C /usr/local/
  • cd /usr/local
  • sudo mv ./spark-1.6.0-bin-without-hadoop/ ./spark
  • sudo chown -R hadoop:hadoop ./spark # 此處的 hadoop 為你的用戶名
  • Shell 命令

    安裝后,需要在 ./conf/spark-env.sh 中修改 Spark 的 Classpath,執(zhí)行如下命令拷貝一個(gè)配置文件:

  • cd /usr/local/spark
  • cp ./conf/spark-env.sh.template ./conf/spark-env.sh
  • Shell 命令

    編輯 ./conf/spark-env.sh(vim ./conf/spark-env.sh) ,在最后面加上如下一行:

    export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)

    保存后,Spark 就可以啟動(dòng)、運(yùn)行了。

    運(yùn)行 Spark 示例

    注意,必須安裝 Hadoop 才能使用 Spark,但如果使用 Spark 過(guò)程中沒(méi)用到 HDFS,不啟動(dòng) Hadoop 也是可以的。此外,接下來(lái)教程中出現(xiàn)的命令、目錄,若無(wú)說(shuō)明,則一般以 Spark 的安裝目錄(/usr/local/spark)為當(dāng)前路徑,請(qǐng)注意區(qū)分。

    在 ./examples/src/main 目錄下有一些 Spark 的示例程序,有 Scala、Java、Python、R 等語(yǔ)言的版本。我們可以先運(yùn)行一個(gè)示例程序 SparkPi(即計(jì)算 π 的近似值),執(zhí)行如下命令:

  • cd /usr/local/spark
  • ./bin/run-example SparkPi
  • Shell 命令

    執(zhí)行時(shí)會(huì)輸出非常多的運(yùn)行信息,輸出結(jié)果不容易找到,可以通過(guò)?grep?命令進(jìn)行過(guò)濾(命令中的?2>&1?可以將所有的信息都輸出到 stdout 中,否則由于輸出日志的性質(zhì),還是會(huì)輸出到屏幕中):

  • ./bin/run-example SparkPi 2>&1 | grep "Pi is roughly"
  • Shell 命令

    過(guò)濾后的運(yùn)行結(jié)果如下圖所示,可以得到 π 的 5 位小數(shù)近似值 :

    從官網(wǎng)下載 Spark

    Python 版本的 SparkPi 則需要通過(guò) spark-submit 運(yùn)行:

  • ./bin/spark-submit examples/src/main/python/pi.py
  • Shell 命令

    通過(guò) Spark Shell 進(jìn)行交互分析

    Spark shell 提供了簡(jiǎn)單的方式來(lái)學(xué)習(xí) API,也提供了交互的方式來(lái)分析數(shù)據(jù)。Spark Shell 支持 Scala 和 Python,本教程選擇使用 Scala 來(lái)進(jìn)行介紹。

    Scala

    Scala 是一門現(xiàn)代的多范式編程語(yǔ)言,志在以簡(jiǎn)練、優(yōu)雅及類型安全的方式來(lái)表達(dá)常用編程模式。它平滑地集成了面向?qū)ο蠛秃瘮?shù)語(yǔ)言的特性。Scala 運(yùn)行于 Java 平臺(tái)(JVM,Java 虛擬機(jī)),并兼容現(xiàn)有的 Java 程序。

    Scala 是 Spark 的主要編程語(yǔ)言,如果僅僅是寫 Spark 應(yīng)用,并非一定要用 Scala,用 Java、Python 都是可以的。使用 Scala 的優(yōu)勢(shì)是開(kāi)發(fā)效率更高,代碼更精簡(jiǎn),并且可以通過(guò) Spark Shell 進(jìn)行交互式實(shí)時(shí)查詢,方便排查問(wèn)題。

    執(zhí)行如下命令啟動(dòng) Spark Shell:

  • ./bin/spark-shell
  • Shell 命令

    啟動(dòng)成功后如圖所示,會(huì)有 “scala >” 的命令提示符。

    成功啟動(dòng)Spark Shell

    基礎(chǔ)操作

    Spark 的主要抽象是分布式的元素集合(distributed collection of items),稱為RDD(Resilient Distributed Dataset,彈性分布式數(shù)據(jù)集),它可被分發(fā)到集群各個(gè)節(jié)點(diǎn)上,進(jìn)行并行操作。RDDs 可以通過(guò) Hadoop InputFormats 創(chuàng)建(如 HDFS),或者從其他 RDDs 轉(zhuǎn)化而來(lái)。

    我們從 ./README 文件新建一個(gè) RDD,代碼如下(本文出現(xiàn)的 Spark 交互式命令代碼中,與位于同一行的注釋內(nèi)容為該命令的說(shuō)明,命令之后的注釋內(nèi)容表示交互式輸出結(jié)果):

  • val textFile = sc.textFile("file:///usr/local/spark/README.md")
  • // textFile: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[1] at textFile at <console>:27
  • scala

    代碼中通過(guò) “file://” 前綴指定讀取本地文件。Spark shell 默認(rèn)是讀取 HDFS 中的文件,需要先上傳文件到 HDFS 中,否則會(huì)有“org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://localhost:9000/user/hadoop/README.md”的錯(cuò)誤。

    上述命令的輸出結(jié)果如下圖所示:

    新建RDD

    RDDs 支持兩種類型的操作

    • actions: 在數(shù)據(jù)集上運(yùn)行計(jì)算后返回值
    • transformations: 轉(zhuǎn)換, 從現(xiàn)有數(shù)據(jù)集創(chuàng)建一個(gè)新的數(shù)據(jù)集

    下面我們就來(lái)演示 count() 和 first() 操作:

  • textFile.count() // RDD 中的 item 數(shù)量,對(duì)于文本文件,就是總行數(shù)
  • // res0: Long = 95
  • ?
  • textFile.first() // RDD 中的第一個(gè) item,對(duì)于文本文件,就是第一行內(nèi)容
  • // res1: String = # Apache Spark
  • scala

    接著演示 transformation,通過(guò) filter transformation 來(lái)返回一個(gè)新的 RDD,代碼如下:

  • val linesWithSpark = textFile.filter(line => line.contains("Spark")) // 篩選出包含 Spark 的行
  • ?
  • linesWithSpark.count() // 統(tǒng)計(jì)行數(shù)
  • // res4: Long = 17
  • scala

    可以看到一共有 17 行內(nèi)容包含 Spark,這與通過(guò) Linux 命令?cat ./README.md | grep "Spark" -c?得到的結(jié)果一致,說(shuō)明是正確的。action 和 transformation 可以用鏈?zhǔn)讲僮鞯姆绞浇Y(jié)合使用,使代碼更為簡(jiǎn)潔:

  • textFile.filter(line => line.contains("Spark")).count() // 統(tǒng)計(jì)包含 Spark 的行數(shù)
  • // res4: Long = 17
  • scala

    RDD的更多操作

    RDD 的 actions 和 transformations 可用在更復(fù)雜的計(jì)算中,例如通過(guò)如下代碼可以找到包含單詞最多的那一行內(nèi)容共有幾個(gè)單詞:

  • textFile.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b)
  • // res5: Int = 14
  • scala

    代碼首先將每一行內(nèi)容 map 為一個(gè)整數(shù),這將創(chuàng)建一個(gè)新的 RDD,并在這個(gè) RDD 中執(zhí)行 reduce 操作,找到最大的數(shù)。map()、reduce() 中的參數(shù)是 Scala 的函數(shù)字面量(function literals,也稱為閉包 closures),并且可以使用語(yǔ)言特征或 Scala/Java 的庫(kù)。例如,通過(guò)使用 Math.max() 函數(shù)(需要導(dǎo)入 Java 的 Math 庫(kù)),可以使上述代碼更容易理解:

  • import java.lang.Math
  • ?
  • textFile.map(line => line.split(" ").size).reduce((a, b) => Math.max(a, b))
  • // res6: Int = 14
  • scala

    Hadoop MapReduce 是常見(jiàn)的數(shù)據(jù)流模式,在 Spark 中同樣可以實(shí)現(xiàn)(下面這個(gè)例子也就是 WordCount):

  • val wordCounts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b) // 實(shí)現(xiàn)單詞統(tǒng)計(jì)
  • // wordCounts: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[4] at reduceByKey at <console>:29
  • ?
  • wordCounts.collect() // 輸出單詞統(tǒng)計(jì)結(jié)果
  • // res7: Array[(String, Int)] = Array((package,1), (For,2), (Programs,1), (processing.,1), (Because,1), (The,1)...)
  • scala

    緩存

    Spark 支持在集群范圍內(nèi)將數(shù)據(jù)集緩存至每一個(gè)節(jié)點(diǎn)的內(nèi)存中,可避免數(shù)據(jù)傳輸,當(dāng)數(shù)據(jù)需要重復(fù)訪問(wèn)時(shí)這個(gè)特征非常有用,例如查詢體積小的“熱”數(shù)據(jù)集,或是運(yùn)行如 PageRank 的迭代算法。調(diào)用 cache(),就可以將數(shù)據(jù)集進(jìn)行緩存:

  • linesWithSpark.cache()
  • scala

    Spark SQL 和 DataFrames

    Spark SQL 是 Spark 內(nèi)嵌的模塊,用于結(jié)構(gòu)化數(shù)據(jù)。在 Spark 程序中可以使用 SQL 查詢語(yǔ)句或?DataFrame API。DataFrames 和 SQL 提供了通用的方式來(lái)連接多種數(shù)據(jù)源,支持 Hive、Avro、Parquet、ORC、JSON、和 JDBC,并且可以在多種數(shù)據(jù)源之間執(zhí)行 join 操作。

    下面仍在 Spark shell 中演示一下 Spark SQL 的基本操作,該部分內(nèi)容主要參考了?Spark SQL、DataFrames 和 Datasets 指南。

    Spark SQL 的功能是通過(guò) SQLContext 類來(lái)使用的,而創(chuàng)建 SQLContext 是通過(guò) SparkContext 創(chuàng)建的。在 Spark shell 啟動(dòng)時(shí),輸出日志的最后有這么幾條信息

    16/01/16 13:25:41 INFO repl.SparkILoop: Created spark context.. Spark context available as sc. 16/01/16 13:25:41 INFO repl.SparkILoop: Created sql context.. SQL context available as sqlContext.

    這些信息表明 SparkContent 和 SQLContext 都已經(jīng)初始化好了,可通過(guò)對(duì)應(yīng)的 sc、sqlContext 變量直接進(jìn)行訪問(wèn)。

    使用 SQLContext 可以從現(xiàn)有的 RDD 或數(shù)據(jù)源創(chuàng)建 DataFrames。作為示例,我們通過(guò) Spark 提供的 JSON 格式的數(shù)據(jù)源文件 ./examples/src/main/resources/people.json 來(lái)進(jìn)行演示,該數(shù)據(jù)源內(nèi)容如下:

  • {"name":"Michael"}
  • {"name":"Andy", "age":30}
  • {"name":"Justin", "age":19}
  • json

    執(zhí)行如下命令導(dǎo)入數(shù)據(jù)源,并輸出內(nèi)容:

  • val df = sqlContext.read.json("file:///usr/local/spark/examples/src/main/resources/people.json")
  • // df: org.apache.spark.sql.DataFrame = [age: bigint, name: string]
  • ?
  • df.show() // 輸出數(shù)據(jù)源內(nèi)容
  • // +----+-------+
  • // | age| name|
  • // +----+-------+
  • // |null|Michael|
  • // | 30| Andy|
  • // | 19| Justin|
  • // +----+-------+
  • scala

    接著,我們來(lái)演示 DataFrames 處理結(jié)構(gòu)化數(shù)據(jù)的一些基本操作:

  • df.select("name").show() // 只顯示 "name" 列
  • // +-------+
  • // | name|
  • // +-------+
  • // |Michael|
  • // | Andy|
  • // | Justin|
  • // +-------+
  • ?
  • df.select(df("name"), df("age") + 1).show() // 將 "age" 加 1
  • // +-------+---------+
  • // | name|(age + 1)|
  • // +-------+---------+
  • // |Michael| null|
  • // | Andy| 31|
  • // | Justin| 20|
  • // +-------+---------+
  • ?
  • df.filter(df("age") > 21).show() # 條件語(yǔ)句
  • // +---+----+
  • // |age|name|
  • // +---+----+
  • // | 30|Andy|
  • // +---+----+
  • ?
  • df.groupBy("age").count().show() // groupBy 操作
  • // +----+-----+
  • // | age|count|
  • // +----+-----+
  • // |null| 1|
  • // | 19| 1|
  • // | 30| 1|
  • // +----+-----+
  • scala

    當(dāng)然,我們也可以使用 SQL 語(yǔ)句來(lái)進(jìn)行操作:

  • df.registerTempTable("people") // 將 DataFrame 注冊(cè)為臨時(shí)表 people
  • val result = sqlContext.sql("SELECT name, age FROM people WHERE age >= 13 AND age <= 19") // 執(zhí)行 SQL 查詢
  • result.show() // 輸出結(jié)果
  • // +------+---+
  • // | name|age|
  • // +------+---+
  • // |Justin| 19|
  • // +------+---+
  • scala

    更多的功能可以查看完整的?DataFrames API?,此外 DataFrames 也包含了豐富的?DataFrames Function?可用于字符串處理、日期計(jì)算、數(shù)學(xué)計(jì)算等。

    Spark Streaming

    流計(jì)算除了使用?Storm?框架,使用 Spark Streaming 也是一個(gè)很好的選擇。基于 Spark Streaming,可以方便地構(gòu)建可拓展、高容錯(cuò)的流計(jì)算應(yīng)用程序。Spark Streaming 使用 Spark API 進(jìn)行流計(jì)算,這意味著在 Spark 上進(jìn)行流處理與批處理的方式一樣。因此,你可以復(fù)用批處理的代碼,使用 Spark Streaming 構(gòu)建強(qiáng)大的交互式應(yīng)用程序,而不僅僅是用于分析數(shù)據(jù)。

    下面以一個(gè)簡(jiǎn)單的 Spark Streaming 示例(基于流的單詞統(tǒng)計(jì))來(lái)演示一下 Spark Streaming:本地服務(wù)器通過(guò) TCP 接收文本數(shù)據(jù),實(shí)時(shí)輸出單詞統(tǒng)計(jì)結(jié)果。該部分內(nèi)容主要參考了?Spark Streaming 編程指南。

    運(yùn)行該示例需要 Netcat(在網(wǎng)絡(luò)上通過(guò) TCP 或 UDP 讀寫數(shù)據(jù)),CentOS 6.x 系統(tǒng)中默認(rèn)沒(méi)有安裝,經(jīng)過(guò)測(cè)試,如果通過(guò) yum 直接安裝,運(yùn)行時(shí)會(huì)有 “nc: Protocol not available” 的錯(cuò)誤,需要下載較低版本的 nc?才能正常使用。我們選擇 Netcat 0.6.1 版本,在終端中運(yùn)行如下命令進(jìn)行安裝:

  • wget http://downloads.sourceforge.net/project/netcat/netcat/0.6.1/netcat-0.6.1-1.i386.rpm -O ~/netcat-0.6.1-1.i386.rpm # 下載
  • sudo rpm -iUv ~/netcat-0.6.1-1.i386.rpm # 安裝
  • Shell 命令

    安裝好 NetCat 之后,使用如下命令建立本地?cái)?shù)據(jù)服務(wù),監(jiān)聽(tīng) TCP 端口 9999:

  • # 記為終端 1
  • nc -l -p 9999
  • Shell 命令

    啟動(dòng)后,該端口就被占用了,需要開(kāi)啟另一個(gè)終端運(yùn)行示例程序,執(zhí)行如下命令:

  • # 需要另外開(kāi)啟一個(gè)終端,記為終端 2,然后運(yùn)行如下命令
  • /usr/local/spark/bin/run-example streaming.NetworkWordCount localhost 9999
  • Shell 命令

    接著在終端 1 中輸入文本,在終端 2 中就可以實(shí)時(shí)看到單詞統(tǒng)計(jì)結(jié)果了。

    Spark Streaming 的內(nèi)容較多,本教程就簡(jiǎn)單介紹到這,更詳細(xì)的內(nèi)容可查看官網(wǎng)教程。最后需要關(guān)掉終端 2,并按 ctrl+c 退出 終端 1 的Netcat。

    獨(dú)立應(yīng)用程序(Self-Contained Applications)

    接著我們通過(guò)一個(gè)簡(jiǎn)單的應(yīng)用程序 SimpleApp 來(lái)演示如何通過(guò) Spark API 編寫一個(gè)獨(dú)立應(yīng)用程序。使用 Scala 編寫的程序需要使用 sbt 進(jìn)行編譯打包,相應(yīng)的,Java 程序使用 Maven 編譯打包,而 Python 程序通過(guò) spark-submit 直接提交。

    應(yīng)用程序代碼

    在終端中執(zhí)行如下命令創(chuàng)建一個(gè)文件夾 sparkapp 作為應(yīng)用程序根目錄:

  • cd ~ # 進(jìn)入用戶主文件夾
  • mkdir ./sparkapp # 創(chuàng)建應(yīng)用程序根目錄
  • mkdir -p ./sparkapp/src/main/scala # 創(chuàng)建所需的文件夾結(jié)構(gòu)
  • Shell 命令

    在 ./sparkapp/src/main/scala 下建立一個(gè)名為 SimpleApp.scala 的文件(vim ./sparkapp/src/main/scala/SimpleApp.scala),添加代碼如下:

  • /* SimpleApp.scala */
  • import org.apache.spark.SparkContext
  • import org.apache.spark.SparkContext._
  • import org.apache.spark.SparkConf
  • ?
  • object SimpleApp {
  • def main(args: Array[String]) {
  • val logFile = "file:///usr/local/spark/README.md" // Should be some file on your system
  • val conf = new SparkConf().setAppName("Simple Application")
  • val sc = new SparkContext(conf)
  • val logData = sc.textFile(logFile, 2).cache()
  • val numAs = logData.filter(line => line.contains("a")).count()
  • val numBs = logData.filter(line => line.contains("b")).count()
  • println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
  • }
  • }
  • scala

    該程序計(jì)算 /usr/local/spark/README 文件中包含 “a” 的行數(shù) 和包含 “b” 的行數(shù)。代碼第8行的 /usr/local/spark 為 Spark 的安裝目錄,如果不是該目錄請(qǐng)自行修改。不同于 Spark shell,獨(dú)立應(yīng)用程序需要通過(guò)?val sc = new SparkContext(conf)?初始化 SparkContext,SparkContext 的參數(shù) SparkConf 包含了應(yīng)用程序的信息。

    該程序依賴 Spark API,因此我們需要通過(guò) sbt 進(jìn)行編譯打包。在 ./sparkapp 中新建文件 simple.sbt(vim ./sparkapp/simple.sbt),添加內(nèi)容如下,聲明該獨(dú)立應(yīng)用程序的信息以及與 Spark 的依賴關(guān)系:

    name := "Simple Project"version := "1.0"scalaVersion := "2.10.5"libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.0"

    文件 simple.sbt 需要指明 Spark 和 Scala 的版本。啟動(dòng) Spark shell 的過(guò)程中,當(dāng)輸出到 Spark 的符號(hào)圖形時(shí),可以看到相關(guān)的版本信息。

    查看 Spark 和 Scala 的版本信息

    安裝 sbt

    Spark 中沒(méi)有自帶 sbt,需要手動(dòng)安裝 sbt,我們選擇安裝在 /usr/local/sbt 中:

  • sudo mkdir /usr/local/sbt
  • sudo chown -R hadoop /usr/local/sbt # 此處的 hadoop 為你的用戶名
  • cd /usr/local/sbt
  • Shell 命令

    經(jīng)筆者測(cè)試,按官網(wǎng)教程安裝 sbt 0.13.9 后,使用時(shí)可能存在網(wǎng)絡(luò)問(wèn)題,無(wú)法下載依賴包,導(dǎo)致 sbt 無(wú)法正常使用,需要進(jìn)行一定的修改。為方便,請(qǐng)使用筆者修改后的版本,下載地址:http://pan.baidu.com/s/1eRyFddw。

    下載后,執(zhí)行如下命令拷貝至 /usr/local/sbt 中:

  • cp ~/下載/sbt-launch.jar .
  • Shell 命令

    接著在 /usr/local/sbt 中創(chuàng)建 sbt 腳本(vim ./sbt),添加如下內(nèi)容:

  • #!/bin/bash
  • SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
  • java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"
  • Shell 命令

    保存后,為 ./sbt 腳本增加可執(zhí)行權(quán)限:

  • chmod u+x ./sbt
  • Shell 命令

    最后檢驗(yàn) sbt 是否可用(首次運(yùn)行會(huì)處于 “Getting org.scala-sbt sbt 0.13.9 …” 的下載狀態(tài),請(qǐng)耐心等待。筆者等待了 7 分鐘才出現(xiàn)第一條下載提示):

  • ./sbt sbt-version
  • Shell 命令

    下載過(guò)程中可能會(huì)類似 “Server access Error: java.security.ProviderException: java.security.KeyException url=https://jcenter.bintray.com/org/scala-sbt/precompiled-2_9_3/0.13.9/precompiled-2_9_3-0.13.9.jar” 的錯(cuò)誤,可以忽略。可再執(zhí)行一次?./sbt sbt-version,只要能得到如下圖的版本信息就沒(méi)問(wèn)題:

    驗(yàn)證 sbt 是否可用

    如果由于網(wǎng)絡(luò)問(wèn)題無(wú)法下載依賴,導(dǎo)致 sbt 無(wú)法正確運(yùn)行的話,可以下載筆者提供的離線依賴包 sbt-0.13.9-repo.tar.gz 到本地中(依賴包的本地位置為 ~/.sbt 和 ~/.ivy2,檢查依賴關(guān)系時(shí),首先檢查本地,本地未找到,再?gòu)木W(wǎng)絡(luò)中下載),下載地址:http://pan.baidu.com/s/1sjTQ8yD。下載后,執(zhí)行如下命令解壓依賴包:

  • tar -zxf ~/下載/sbt-0.13.9-local-repo.tar.gz ~
  • Shell 命令

    通過(guò)這個(gè)方式,一般可以解決依賴包缺失的問(wèn)題(讀者提供的依賴包僅適合于 Spark 1.6 版本,不同版本依賴關(guān)系不一樣)。

    如果對(duì) sbt 存在的網(wǎng)絡(luò)問(wèn)題以及如何解決感興趣,請(qǐng)點(diǎn)擊下方查看。

    使用 sbt 打包 Scala 程序

    為保證 sbt 能正常運(yùn)行,先執(zhí)行如下命令檢查整個(gè)應(yīng)用程序的文件結(jié)構(gòu):

  • cd ~/sparkapp
  • find .
  • Shell 命令

    文件結(jié)構(gòu)應(yīng)如下圖所示:

    SimpleApp的文件結(jié)構(gòu)

    接著,我們就可以通過(guò)如下代碼將整個(gè)應(yīng)用程序打包成 JAR(首次運(yùn)行同樣需要下載依賴包,如果這邊遇到網(wǎng)絡(luò)問(wèn)題無(wú)法成功,也請(qǐng)下載上述安裝 sbt 提到的離線依賴包 sbt-0.13.9-repo.tar.gz ):

  • /usr/local/sbt/sbt package
  • Shell 命令

    打包成功的話,會(huì)輸出如下圖內(nèi)容:

    SimpleApp的文件結(jié)構(gòu)

    生成的 jar 包的位置為 ~/sparkapp/target/scala-2.10/simple-project_2.10-1.0.jar。

    通過(guò) spark-submit 運(yùn)行程序

    最后,我們就可以將生成的 jar 包通過(guò) spark-submit 提交到 Spark 中運(yùn)行了,命令如下:

  • /usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp/target/scala-2.10/simple-project_2.10-1.0.jar
  • # 輸出信息太多,可以通過(guò)如下命令過(guò)濾直接查看結(jié)果
  • /usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp/target/scala-2.10/simple-project_2.10-1.0.jar 2>&1 | grep "Lines with a:"
  • Shell 命令

    最終得到的結(jié)果如下:

    Lines with a: 58, Lines with b: 26

    自此,你就完成了你的第一個(gè) Spark 應(yīng)用程序了。

    總結(jié)

    以上是生活随笔為你收集整理的Spark快速入门指南 – Spark安装与基础使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。