Spark入門之REPL/CLI/spark shell 快速學習

原文鏈接:https://blog.csdn.net/minge_se/article/details/79130463

一、前言

本章的目的是提供指導,以便讀者熟悉獨立模式下安裝Apache Spark的過程及其依賴關係。 然後,我們將開始與Apache Spark的第一次交互,通過使用Spark CLI(稱爲REPL,REPL是Read-Evaluate-Print Loop(讀取-求值-打印 循環)的首字母縮寫。)進行一些練習。

/** The Scala interactive shell.  It provides a read-eval-print loop
 *  around the Interpreter class.
 *  After instantiation, clients should call the main() method.
 *
 *  If no in0 is specified, then input will come from the console, and
 *  the class will attempt to provide input editing feature such as
 *  input history.
 *
 *  @author Moez A. Abdel-Gawad
 *  @author  Lex Spoon
 *  @version 1.2
 */
class ILoop(in0: Option[BufferedReader], protected val out: JPrintWriter)
                extends AnyRef
                   with LoopCommands

我們將繼續討論Spark組件以及與Spark相關的常用術語,然後討論集羣環境中Spark工作的生命週期。 我們還將從圖形意義上探索Spark作業的執行,從創建DAG到執行Spark Web UI中提供的實用程序的最小任務單元。

最後,我們將通過使用Spark-Submit工具和Rest API討論Spark Job配置和提交的不同方法來結束本章。

 

快速安裝單機模式spark:

1.下載scala:http://www.scala-lang.org/download/

2.安裝scala:rpm -ivh scala-2.12.4.rpm

3.設置scala環境變量:vim /etc/profile

export SCALA_HOME=/usr/share/scalaexport PATH=$SCALA_HOME/bin:$PATH

4.下載spark:http://spark.apache.org/downloads.html

5.解壓spark:tar -xvf /opt/spark-2.2.1-bin-hadoop2.7.tgz

6.配置spark環境變量:vim /etc/profile

export SPARK_HOME=/opt/spark/export PATH=$PATH:$SPARK_HOME/bin

大功告成!

通過下述命令啓動spark單機模式:

$SPARK_HOME/bin/spark-shell

如果Spark二進制文件已經被加入到環境變量PATH中,我們可以簡單地執行spark-shell命令即可。

可以在http://localhost:4040中獲取spark驅動器用戶界面。稍後會細講


二、開始Spark REPL

Spark REPL或Spark shell(也稱爲Spark CLI)是探索Spark編程的非常有用的工具。 REPL是Read-Evaluate-Print Loop(讀取-求值-打印 循環)的首字母縮寫。 它是程序員用來與框架進行交互的交互式shell。 Apache Spark也帶有REPL,初學者可以使用它來理解Spark編程模型。

 

2.1使用Spark shell進行一些基本練習

請注意,Spark shell僅在Scala語言中可用。 但是,我們已經讓Java開發人員很容易理解這些例子。

2.1.1確認Spark版本

使用spark shell,通過下面的命令來確認spark腳本:

2.1.2創建和過濾RDD

讓我們從創建一個string組成的RDD開始:

現在,我們來過濾這個RDD,使得其只留下以“j”開頭的字符串

filter將一個rdd轉化爲另一個rdd,因此filter是transformation操作。

現在,我們對filteredrdd執行一個action操作來看看它的元素。讓我們對filteredrdd執行collect操作:

collect操作返回了一個string類型的數組。因此,它是一個action操作。

2.1.3RDD中的word count

讓我們對前面的stringRdd運行word count問題。word count就是大數據領域的HelloWorld。word count意味着我們將計算RDD中每個元素出現的次數。

我們如下來創建pairRDD變量:

(map():map是對RDD中的每個元素都執行一個指定的函數來產生一個新的RDD。任何原RDD中的元素在新RDD中都有且只有一個元素與之對應。)

pairRDD由單詞和1(整型)構成的pair組成,其中單詞代表的就是stringRDD中的字符串。

現在,我們對這個RDD執行reduceByKey操作來計算每個單詞出現的次數。

(*注:reduceByKey就是對元素爲KV對的RDD中Key相同的元素的Value進行binary_function的reduce操作,因此,Key相同的多個元素的值被reduce爲一個值,然後與原RDD中的Key組成一個新的KV對。)

現在,我們對其進行collect操作來看看結果:

2.1.4查找整數RDD中所有偶數的和

讓我們創建一個整數RDD:

我們對這個RDD執行filter操作過濾出所有的偶數:

現在,我們把evenNumbersRDD中的所有元素加起來

 

2.1.5 計算文件中的單詞數量

我們來讀取位於$SPARK_HOME/examples/src/main/resources中的people.txt文件:

在REPL中,用textfile()讀取文件:

下一步是扁平化文件的內容,也就是說,我們將通過分割每一行來創建一個RDD,並將列表中的所有單詞拼合起來,如下所示:

(flatMap可以理解爲先map後flat(扁平化),如此例中可將元素用逗號分隔成兩個。而map一個元素只能映射到一個元素。)

flattenFile RDD的內容如下:

現在,我們可以計算這個RDD的所有單詞數量。

無論何時調用諸如count的action,Spark都會創建一個有向無環圖(DAG)來描述每個RDD的沿襲依賴關係。 Spark提供了調試方法toDebugString()來顯示RDD的這種沿襲依賴關係:

 


參考文獻:

Apache Spark 2.x for Java developers

S Gulati,S Kumar - 2017 - 被引量: 0

Gulati, Sourav; Kumar, Sumit

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章