spark standalone+kafka 集群搭建

準備工作:

三臺機器:

? ? ?192.168.222.129

? ? ?192.168.222.130

? ? ?192.168.222.131

操作系統:CentOS release 6.7 (Final)

軟件版本:

? ? ? ? ? kafka:kafka_2.10-0.10.0.0.tar.gz

? ? ? ? ? java:jdk1.8.0_91

? ? ? ? ? scala:scala-2.10.6

? ? ? ? ? spark:spark-1.6.1-bin-cdh4.tar.gz

1.三臺機器上,都添加hosts

192.168.222.129 spark129

192.168.222.130 spark130

192.168.222.131 spark131

2.安裝kafka

? 1) 安裝包解壓到/usr/local/kafka_2.10-0.10.0.0

? 2) 進入config目錄下,修改zookeeper.properties文件

tickTime=2000

dataDir=/data/zookeeper/

clientPort=2181

initLimit=5

syncLimit=2

server.1=spark129:2888:3888

server.2=spark130:2888:3888

server.3=spark131:2888:3888

? 3).在dataDir目錄/data/zookeeper/下寫一個myid文件,命令如下:

echo1>myid

? ?這個id是zookeeper的主機標識,每個機器都不一致,依次為1,2,3

4).依次啟動3臺機器的zookeeper,構成一個集群

sh zookeeper-server-start.sh --daemon ../config/zookeeper.properties

5).修改kafka配置,進入到/usr/local/kafka_2.10-0.10.0.0/config 下修改

server.properties

broker.id=1

port=9092

host.name=spark129

zookeeper.connect=spark129:2181,spark130:2181,spark131:2181

log.dirs=/data/kafka/log/

5).依次啟動三臺機器的kafka?

./kafka-server-start.sh -daemon ../config/server.properties

3.安裝spark

? 1) 三個節點上創建spark用戶

? ? ? ? useradd spark

? ? ? ? passwd ?spark

? 2) 安裝java和scala 并配置環境變量

? 3)每臺機器配置ssh無密碼登錄

yum install -y openssh-server

ssh-keygen -t rsa -P ''

ssh-copy-id spark129

ssh-copy-id spark130

ssh-copy-id spark131

? 4)解壓spark到/usr/local/spark-1.6.1-bin-cdh4

? 5)配置spark的環境變量?

cd /home/spark ?

vim ~/.bash_profile

export SPARK_HOME=/home/spark/spark-1.6.1-bin-cdh4

export PATH=.:$SPARK_HOME/bin:$PATH

source ~/.bash_profile

6)配置spark

首先新建好spark用到的目錄(使用root用戶,只有這里使用root用戶,每臺機):

$ mkdir /data?????????????????? //存儲數據的總目錄

$ mkdir /data/spark????????????????? //spark數據存儲主目錄

$ mkdir /data/spark/local?????? //spark存儲本地數據的目錄

$ mkdir /data/spark/log????????? //spark存儲日志的目錄

$ mkdir /data/spark/work????? //spark存儲worker日志等信息的目錄

$ chmod -R 777 /data/??????????? //將/data目錄權限設置為最大

6) 配置spark-env.sh

Spark-env.sh文件中配置了spark運行時的一些環境、依賴項以及master和slaver的資源配置。

$ cd spark????????????? //進入spark目錄

$ cp conf/spark-env.sh.template conf/spark-env.sh????????????? //將spark-env.sh.template復制一份為spark-env.sh

因為我們是部署standalone模式,可以參考配置文件中注釋項的提示:

添加以下內容:

配置項

說明

SPARK_LOCAL_IP= spark129?本機ip或hostname(不同主機配置不同)

SPARK_LOCAL_DIRS=/data/spark/local?配置spark的local目錄

SPARK_MASTER_IP= spark129?master節點ip或hostname

SPARK_MASTER_WEBUI_PORT=8080?web頁面端口

SPARK_WORKER_CORES=2?Worker的cpu核數

SPARK_WORKER_MEMORY=8g?worker內存大小

SPARK_WORKER_DIR=/data/spark/work?worker目錄

export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=4"?spark-shell啟動使用核數

export SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.appDataTtl=604800"?worker自動清理及清理時間間隔

export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://systex/user/spark/applicationHistory"?history server頁面端口、備份數、log日志在HDFS的位置(注意,需要在HDFS上新建對應的路徑)

SPARK_LOG_DIR=/data/spark/log?配置Spark的log日志目錄

export JAVA_HOME=/usr/local/jdk/?配置java路徑

export SCALA_HOME=/usr/local/scala/?配置scala路徑

export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop?配置hadoop的lib路徑

export HADOOP_CONF_DIR=/etc/hadoop/conf?配置hadoop的配置路徑


7) ?配置spark-defaults.conf

Spark-default.conf文件中主要配置的是與在spark上運行任務有關的一些參數,以及對executor等的配置。

添加以下內容:

配置項

說明

spark.eventLog.enabled? true?eventLog是否生效(建議開啟,可以對已完成的任務記錄其詳細日志)

spark.eventLog.compress? true?eventLog是否啟用壓縮(cpu性能好的情況下建議開啟,以減少內存等的占用)

spark.eventLog.dir???? hdfs://systex/user/spark/applicationHistory?eventLog的文件存放位置,與spark-env.sh中的history server配置位置一致

spark.broadcast.blockSize?????? 8m?廣播塊大小

spark.executor.cores??? 1?Executor的cpu核數

spark.executor.memory?? 512m?Executor的內存大小

spark.executor.heartbeatInterval??????? 20s?Executor心跳交換時間間隔

spark.files.fetchTimeout??????? 120s?文件抓取的timeout

spark.task.maxFailures? 6?作業最大失敗次數(達到此次數后,該作業不再繼續執行,運行失敗)

spark.serializer??????? org.apache.spark.serializer.KryoSerializer?設置序列化機制(默認使用java的序列化,但是速度很慢,建議使用Kryo)

spark.kryoserializer.buffer.max???????? 256m?序列化緩沖大小

spark.akka.frameSize??? 128?Akka調度幀大小

spark.default.parallelism??? 20?默認并行數

spark.network.timeout?? 300s?最大網絡延時

spark.speculation?????? true?Spark推測機制(建議開啟)

8) ?配置slaves

在conf目錄下有slaves文件,在其中配置slaves的hostname

$ cp conf/slaves.template conf/slaves

$ vim conf/slaves

添加各個slave節點的hostname:

至此,我們就將spark需要配置的東西全部配置完成,將spark整個目錄復制到其他主機:

在相應的主機創建對應的spark軟鏈接,并將spark-env.sh中SPARK_LOCAL_IP改為對應的ip即可。

9)啟動spark并測試(spark用戶)

現在我們啟動spark,在master節點執行以下命令:

$ cd /home/spark/spark

$ ./sbin/start-all.sh??????????????????? //啟動master和slaves

$ ./sbin/start-history-server.sh??????? //啟動history server

使用jps命令查看是否成功啟動:

檢查進程是否啟動【在master節點上出現“Master”,在slave節點上出現“Worker”】

## 監控頁面URL http:// 192.168.222.129:8080/

運行spark-pi:

spark-submit? --master spark://10.47.110.38:7077 --classorg.apache.spark.examples.SparkPi --name Spark-Pi?/home/spark/spark/lib/spark-examples-1.6.0-hadoop2.6.0.jar

能看到如下結果:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容