準備工作:
三臺機器:
? ? ?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
能看到如下結果: