1. 程式人生 > >spark快速大資料分析(2)

spark快速大資料分析(2)

spark下載與入門

spark shell

其他shell工具只能使用單機的硬碟和記憶體來操作資料,而spark shell可以用來與分散式儲存在許多機器的記憶體或者硬碟上的資料進行互動,並且處理過程的分發由spark自動控制完成。

spark支援許多語言版本,此處互動式shell部分只考慮Python版本(PySpark Shell)和Scala版本(Spark-sehll)

  • 進入PySpark Shell:

進入spark目錄後,輸入bin/pyspark

  • 進入spark-shell:

進入spark目錄後,輸入bin/spark-sehll

兩種方式對比如下圖(上圖Scala下圖Python):


這裡可以看到對比,即使沒有賦予管理員許可權,pyspark依舊可以獲取SparkContext,而Scala則不行。

在執行命令列sudo -s後,即以管理員身份執行bin/spark-shell,則Scala可以正常使用SparkContext,如下圖示:


————————————

減少shell中輸出的日誌資訊,使之只顯示警告及更嚴重的資訊:

在conf目錄下建立名為log4j.properties的檔案,拷貝spark開發者在spark中加入的日誌設定檔案模板:log4j.properties.template。找到下面這行:

log4j.rootCategory=INFO, console

改成:

log4j.rootCategory=WARN, console

——————————————

spark中的分散式資料整合為彈性分散式資料集(resilient distributed dataset,RDD)。

lines = sc.textFile("README.md")即為建立一個名為lines的RDD,是從電腦上的一個本地文字檔案創建出來的。

——————————————

每個spark應用都由一個驅動器程式(driver program)來發起叢集上的各種並行操作。前面的例子裡,驅動器程式就是spark shell本身,只需要輸入執行的操作即可。

驅動器程式通過一個SparkContext物件來訪問Spark,這個物件代表對計算叢集的一個連線。shell啟動時已經自動建立了一個SparkContext物件,是一個叫做sc的變數。一旦有了SparkContext,可以用它來建立RDD。比如用lines=sc.textFile()來建立一個代表檔案中各行文字的RDD,可以在可以在行上進行各種操作,比如lines.count()。

要執行這些操作,驅動器程式一般要管理多個執行器(executor)節點。比如要在叢集上執行count()操作,那麼不同的節點會統計檔案的不同部分的行數。

有很多用來傳遞函式的API(application program interface應用程式程式設計介面),可以將對應操作執行在叢集上。比如說lines.filter()等等。

————————————————

除了Spark shell這種互動式執行方式外,還可以在獨立程式中使用Spark。與shell的區別是需要自己初始化SparkContext,接下來,使用的API是一樣的。

連線Spark:

Java和Scala中,只需要給應用新增一個對於spark-core工件的Maven(流行的包管理工具,可以用於任何基於Java的語言,讓你可以連線公共倉庫中的程式庫)依賴。可以使用Maven來構建工程,也可以使用其他能夠訪問Maven倉庫的工具來進行構建,包括Scala的sbt工具或者Gradle工具。一些常用的整合開發環境(比如eclipse)也可以讓你直接把Maven依賴新增到工程中。

python中,可以把應用寫成python指令碼,但是需要另一個自帶指令碼來執行,來引入python程式中的spark依賴,它為spark的pythonAPI配置好了執行環境。

bin/spark-submit my_script.py

初始化spark:

連線spark後,需要在程式中匯入spark包並且建立SparkContext。可以先建立SparkConf物件來配置應用,然後基於它建立SparkContext物件。引數local表示Spark執行在單機單執行緒上。引數my app可以幫你在叢集管理器的使用者介面中找到你的應用。