準(zhǔn)備工作:
三臺機(jī)器:
? ? ?192.168.222.129
? ? ?192.168.222.130
? ? ?192.168.222.131
操作系統(tǒng):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.三臺機(jī)器上,都添加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) 進(jìn)入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/下寫一個(gè)myid文件聂薪,命令如下:
echo1>myid
? ?這個(gè)id是zookeeper的主機(jī)標(biāo)識呼股,每個(gè)機(jī)器都不一致,依次為1,2,3
4).依次啟動3臺機(jī)器的zookeeper败京,構(gòu)成一個(gè)集群
sh zookeeper-server-start.sh --daemon ../config/zookeeper.properties
5).修改kafka配置,進(jìn)入到/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).依次啟動三臺機(jī)器的kafka?
./kafka-server-start.sh -daemon ../config/server.properties
3.安裝spark
? 1) 三個(gè)節(jié)點(diǎn)上創(chuàng)建spark用戶
? ? ? ? useradd spark
? ? ? ? passwd ?spark
? 2) 安裝java和scala 并配置環(huán)境變量
? 3)每臺機(jī)器配置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的環(huán)境變量?
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用戶赡麦,每臺機(jī)):
$ mkdir /data?????????????????? //存儲數(shù)據(jù)的總目錄
$ mkdir /data/spark????????????????? //spark數(shù)據(jù)存儲主目錄
$ mkdir /data/spark/local?????? //spark存儲本地?cái)?shù)據(jù)的目錄
$ mkdir /data/spark/log????????? //spark存儲日志的目錄
$ mkdir /data/spark/work????? //spark存儲worker日志等信息的目錄
$ chmod -R 777 /data/??????????? //將/data目錄權(quán)限設(shè)置為最大
6) 配置spark-env.sh
Spark-env.sh文件中配置了spark運(yùn)行時(shí)的一些環(huán)境、依賴項(xiàng)以及master和slaver的資源配置帕识。
$ cd spark????????????? //進(jìn)入spark目錄
$ cp conf/spark-env.sh.template conf/spark-env.sh????????????? //將spark-env.sh.template復(fù)制一份為spark-env.sh
因?yàn)槲覀兪遣渴餾tandalone模式泛粹,可以參考配置文件中注釋項(xiàng)的提示:
添加以下內(nèi)容:
配置項(xiàng)
說明
SPARK_LOCAL_IP= spark129?本機(jī)ip或hostname(不同主機(jī)配置不同)
SPARK_LOCAL_DIRS=/data/spark/local?配置spark的local目錄
SPARK_MASTER_IP= spark129?master節(jié)點(diǎn)ip或hostname
SPARK_MASTER_WEBUI_PORT=8080?web頁面端口
SPARK_WORKER_CORES=2?Worker的cpu核數(shù)
SPARK_WORKER_MEMORY=8g?worker內(nèi)存大小
SPARK_WORKER_DIR=/data/spark/work?worker目錄
export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=4"?spark-shell啟動使用核數(shù)
export SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.appDataTtl=604800"?worker自動清理及清理時(shí)間間隔
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://systex/user/spark/applicationHistory"?history server頁面端口、備份數(shù)肮疗、log日志在HDFS的位置(注意晶姊,需要在HDFS上新建對應(yīng)的路徑)
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上運(yùn)行任務(wù)有關(guān)的一些參數(shù),以及對executor等的配置伪货。
添加以下內(nèi)容:
配置項(xiàng)
說明
spark.eventLog.enabled? true?eventLog是否生效(建議開啟们衙,可以對已完成的任務(wù)記錄其詳細(xì)日志)
spark.eventLog.compress? true?eventLog是否啟用壓縮(cpu性能好的情況下建議開啟,以減少內(nèi)存等的占用)
spark.eventLog.dir???? hdfs://systex/user/spark/applicationHistory?eventLog的文件存放位置碱呼,與spark-env.sh中的history server配置位置一致
spark.broadcast.blockSize?????? 8m?廣播塊大小
spark.executor.cores??? 1?Executor的cpu核數(shù)
spark.executor.memory?? 512m?Executor的內(nèi)存大小
spark.executor.heartbeatInterval??????? 20s?Executor心跳交換時(shí)間間隔
spark.files.fetchTimeout??????? 120s?文件抓取的timeout
spark.task.maxFailures? 6?作業(yè)最大失敗次數(shù)(達(dá)到此次數(shù)后蒙挑,該作業(yè)不再繼續(xù)執(zhí)行,運(yùn)行失斢尥巍)
spark.serializer??????? org.apache.spark.serializer.KryoSerializer?設(shè)置序列化機(jī)制(默認(rèn)使用java的序列化忆蚀,但是速度很慢,建議使用Kryo)
spark.kryoserializer.buffer.max???????? 256m?序列化緩沖大小
spark.akka.frameSize??? 128?Akka調(diào)度幀大小
spark.default.parallelism??? 20?默認(rèn)并行數(shù)
spark.network.timeout?? 300s?最大網(wǎng)絡(luò)延時(shí)
spark.speculation?????? true?Spark推測機(jī)制(建議開啟)
8) ?配置slaves
在conf目錄下有slaves文件姑裂,在其中配置slaves的hostname
$ cp conf/slaves.template conf/slaves
$ vim conf/slaves
添加各個(gè)slave節(jié)點(diǎn)的hostname:
至此馋袜,我們就將spark需要配置的東西全部配置完成,將spark整個(gè)目錄復(fù)制到其他主機(jī):
在相應(yīng)的主機(jī)創(chuàng)建對應(yīng)的spark軟鏈接舶斧,并將spark-env.sh中SPARK_LOCAL_IP改為對應(yīng)的ip即可欣鳖。
9)啟動spark并測試(spark用戶)
現(xiàn)在我們啟動spark,在master節(jié)點(diǎn)執(zhí)行以下命令:
$ cd /home/spark/spark
$ ./sbin/start-all.sh??????????????????? //啟動master和slaves
$ ./sbin/start-history-server.sh??????? //啟動history server
使用jps命令查看是否成功啟動:
檢查進(jìn)程是否啟動【在master節(jié)點(diǎn)上出現(xiàn)“Master”捧毛,在slave節(jié)點(diǎn)上出現(xiàn)“Worker”】
## 監(jiān)控頁面URL http:// 192.168.222.129:8080/
運(yùn)行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
能看到如下結(jié)果: