《Spark Streaming實時流式大數據處理實戰》 ——2.3 搭建開發環境
2.3? 搭建開發環境
在2.2節中對Spark的幾種運行模式做了介紹,本書在進行實戰的過程中重點以Spark Standalone模式進行,該模式也可以在生產環境中直接部署,不依賴于其他框架模式。當然,對于需要用到Hadoop的讀者,也可以嘗試Spark On Yarn的部署模式,對資源進行統一的管理。下面就來一步一步地搭建Spark Standalone運行模式及Scala-Eclipse的開發環境。
2.3.1? 修改配置
2.1節下載和解壓Spark之后,在Spark的安裝目錄下進入conf目錄,可以看到以下幾個配置文件:
$ ll conf/
drwxr-xr-x@ 12 xiaolitao? staff?? 384? 8? 2 21:29 ./
drwxr-xr-x@ 18 xiaolitao? staff?? 576 11? 5? 2017 ../
-rw-r--r--@? 1 xiaolitao? staff?? 996? 7? 1? 2017 docker.properties.template
-rw-r--r--@? 1 xiaolitao? staff? 1105? 7? 1? 2017 fairscheduler.xml.template
-rw-r--r--@? 1 xiaolitao? staff? 2025? 7? 1? 2017 log4j.properties.template
-rw-r--r--@? 1 xiaolitao? staff? 7313? 7? 1? 2017 metrics.properties.template
-rw-r--r--@? 1 xiaolitao? staff?? 865? 7? 1? 2017 slaves.template
-rw-r--r--@? 1 xiaolitao? staff? 1292? 7? 1? 2017 spark-defaults.conf.
template
-rwxr-xr-x@? 1 xiaolitao? staff? 3699? 7? 1? 2017 spark-env.sh.template*
conf目錄中給出了很多模板文件,這里對幾個常用的文件進行簡單說明(默認目錄中給出了后綴帶有template的示例文件,在正式使用時我們需要將這個后綴去掉)。
* docker.properties:當使用Docker容器時,需要就該文件進行相關修改和配置。
* log4j.properties:Spark作為源生于Java和Scala的開源系統,其使用的日志服務也依賴于經典的log4j,所以當需要修改日志的顯示級別,以及日志的保存文件等相關內容時,就需要在這里做相應配置。
* slaves:該文件用來配置slave節點,一般將每個slave節點的IP配置在該文件中。
* spark-defaults.conf:在提交Spark應用時,可以在程序內部指定相關配置,如使用的核的數量、最大占用內存數量等,另外也可以在提交命令中指定。如果兩處都沒有指定,就會按照該文件進行Spark應用的默認配置。
* spark-env.sh:是整個Spark集群環境變量的配置文件,我們需要在該文件中配置Java和Scala的安裝路徑,如果需要,還要配置Hadoop的安裝路徑。其他配置選項,讀者可以參考官方文檔http://spark.apache.org/docs/latest/spark-standalone.html。
下面就來修改配置文件,搭建我們自己的集群,用于本書的所有實例。為了方便操作,我們以單一機器來搭建集群,即概念上的Master和Worker節點進行同機部署,而在實際生產環境中,只需要做相應的擴展,添加到集群中即可。集群的架構如圖2.5所示。
我們以單一機器進行同機部署,以本地機器作為Master節點,同時該節點也是我們的Slave節點,并在此節點上啟動兩個Worker進程,圖2.5中所示的兩個Worker進程是Spark虛擬分配的兩個IP。為了完成整個集群的搭建,我們需要簡單配置以log4j.properties、slaves和spark-env.sh三個相關文件。
圖2.5? Spark集群部署
首先將前面介紹的模板文件的*.template的后綴template去掉,如下:
$ ll conf/
drwxr-xr-x@ 12 xiaolitao? staff?? 384? 8? 2 21:29 ./
drwxr-xr-x@ 18 xiaolitao? staff?? 576 11? 5? 2017 ../
-rw-r--r--@? 1 xiaolitao? staff?? 996? 7? 1? 2017 docker.properties.template
-rw-r--r--@? 1 xiaolitao? staff? 1105? 7? 1? 2017 fairscheduler.xml.template
-rw-r--r--@? 1 xiaolitao? staff? 2025 11? 5? 2017 log4j.properties
-rw-r--r--@? 1 xiaolitao? staff? 2025? 7? 1? 2017 log4j.properties.template
-rw-r--r--@? 1 xiaolitao? staff? 7313? 7? 1? 2017 metrics.properties.template
-rw-r--r--@? 1 xiaolitao? staff?? 865 11? 5? 2017 slaves
-rw-r--r--@? 1 xiaolitao? staff?? 865? 7? 1? 2017 slaves.template
-rw-r--r--@? 1 xiaolitao? staff? 1292? 7? 1? 2017 spark-defaults.conf.
template
-rwxr-xr-x@? 1 xiaolitao? staff? 3997 12 13? 2017 spark-env.sh*
-rwxr-xr-x@? 1 xiaolitao? staff? 3699? 7? 1? 2017 spark-env.sh.template*
然后將這三個文件從模板文件中復制出來并進行簡單的配置。首先對spark-env.sh也是最重要的文件進行如下配置:
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home
SCALA_HOME=/usr/local/Cellar/scala/2.11.7/
SPARK_HOME=/Users/xiaolitao/Tools/spark-2.2.0-bin-hadoop2.7/
SPARK_MASTER_HOST=127.0.0.1
SPARK_WORKER_CORES=2
SPARK_WORKER_MEMORY=7g
SPARK_WORKER_INSTANCES=2
SPARK_DAEMON_MEMORY=1g
首先需要配置本地Java、Scala及Spark的安裝目錄,以上分別配置了其相應的安裝路徑(大家實際配置時,需要根據自己的實際環境來配置)。其次配置Master節點的IP,由于我們使用單一機器進行部署,所以這里指定的IP為127.0.0.1。之后的配置是針對每一個Worker實例,包含2核和7GB內存,我們這里共配置了兩個Worker實例(特別說明的是,根據機器的實際情況進行配置,由于本書用于試驗的機器是4核16GB內存,因此這里進行了如上配置)。
最后配置守護進程的內存總量,包括Master和Worker等。我們進行了一些關鍵配置,Spark關于Standalone模式還提供了很多其他的配置,大家可以直接看模板文件或者參考官網(http://spark.apache.org/docs/latest/spark-standalone.html)。
對于slaves文件,由于我們目前的集群只有一臺機器,所以這里僅僅配置了localhost,Spark會在slaves列出的所有機器節點中啟動Worker進程,用來進行計算。
關于log4j.properties,當我們打開從模板文件復制過來的配置文件時,其中已經進行了很詳細的日志輸出配置,因此這里基本沒有改動,主要將log4j.rootCategory的日志輸出級別改為了WARN,否則會產生大量的系統日志信息,當程序發生錯誤的時候將很難進行定位,具體修改如下:
# 設置日志信息在控制臺輸出
log4j.rootCategory=WARN, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p
%c{1}: %m%n
# 將日志級別設置為WARN
# 會覆蓋默認日志級別的設置
# 針對不同的Spark應用可以設置不同的日志級別
log4j.logger.org.apache.spark.repl.Main=WARN
# 將第三方庫的日志級別設置高些
log4j.logger.org.spark_project.jetty=WARN
log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=
ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
log4j.logger.org.apache.parquet=ERROR
log4j.logger.parquet=ERROR
# 避免SparkSQL支持Hive中不存在的UDFs的各種噪音信息
log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR
Spark spark 大數據 大數據
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。