Spark 叢集搭建詳細步驟
1修改主機名和hosts
[[email protected] ~] hostname master
[[email protected] ~] vi /etc/hostname
#將裡面內容改為: master
[[email protected] ~] vi /etc/hostname
#將下面內容加入
192.168.8.12 master
#注意:如果要搭建叢集,需要將其它的主機名和IP也加進來,並且在每臺主機上都要加
2配置祕鑰登入
A新增使用者
[[email protected] ~] useradd spark
B配置祕鑰登入
[[email protected] ~]# vi /etc/ssh/sshd_config
#將54,55行的註釋取消,改為:
RSAAuthentication yes
PubkeyAuthentication yes
[[email protected] ~]# systemctl restart sshd.service
[[email protected] ~]# su - spark
[[email protected] ~]$ ssh-keygen -t rsa
#一路回車
[[email protected] .ssh]$ cat id_rsa.pub > authorized_keys
如果直接用ssh連線不用輸密碼就能登入,表示祕鑰配置成功
要注意檔案的許可權:
3配置JDK,Scala,環境變數
A.需要的檔案列表如下:
下載方法:分別到對應的官網,再到下載連結,使用wget下載,具體步驟省略
B.分別解壓每個檔案,注意:本人將所有的檔案放到spark使用者的主目錄下,即:/home/spark
解壓後的目錄結構如下:
建立相應的軟連結(也可以不建軟連結,只是為了看著舒服和操作方便):
[[email protected] ~]$ ln -s jdk1.7.0_67 jdk
[[email protected] ~]$ ln -s scala-2.10.5 scala
[[email protected] ~]$ ln -s spark-1.4.0-bin-hadoop2.6 spark
C.配置環境變數(root使用者)
[[email protected] ~]# vi /etc/profile
#在檔案最後加入
export JAVA_HOME=/home/spark/jdk
export SCALA_HOME=/home/spark/scala
export HADOOP_HOME=/home/spark/hadoop
export SPARK_HOME=/home/spark/spark
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SPARK_HOME/bin
注意:上面的路徑需要根據自己的實際路徑做出修改
載入環境變數(spark):
[[email protected] ~]$ source /etc/profile
4配置Hadoop
[[email protected] ~]$ cd $HADOOP_HOME/etc/hadoop
[[email protected] hadoop]$ vi slaves
[[email protected] hadoop]$ vi slaves
#將slave的主機名加入,每行一個主機名
[[email protected] hadoop]$ vi core-site.xml
#將裡面的內容改為(簡單的配置,具體配置請查閱官方文件):
<configuration>
<!-- file system properties -->
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
<description>The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation. The uri's scheme determines the config property (fs.SCHEME.impl) naming the FileSystem implementation class. The uri's authority is used to determine the host, port, etc. for a filesystem.
</description>
</property>
<property>
<name>fs.trash.interval</name>
<value>360</value>
<description>Number of minutes between trash checkpoints.If zero, the trash feature is disabled.
</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/spark/hadoop/tmp/${user.name}</value>
<description>A base for other temporary directories.</description>
</property>
</configuration>
[[email protected] hadoop]$ vi hdfs-site.xml
#改為
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>Default block replication.The actual number of replications can be specified when the file iscreated.The default is used if replication is not specified in create time.
</description>
</property>
<property>
<name>dfs.name.dir</name>
<value>/home/spark/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/spark/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
[[email protected] hadoop]$ vi yarn-site.xml
#改為
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
建立對應的目錄:
[[email protected] hadoop]$ mkdir -p /home/spark/hadoop/hdfs/{data,name}
[[email protected] hadoop]$ mkdir /home/spark/hadoop/tmp
初始化Namenode:
[[email protected] hadoop]$ hadoop namenode -format
如圖中的status為0,說明初始化成功,若為1,則失敗,需要檢查日誌,找到錯誤原因。
啟動Hadoop叢集:
[[email protected] hadoop]$ $HADOOP_HOME/sbin/start-all.sh
若報如下錯誤:
則需要如下操作:
[[email protected] hadoop]$ vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh
#將 export JAVA_HOME=${JAVA_HOME}
#改為 export JAVA_HOME=/home/spark/jdk (jdk的具體路徑)
再次啟動叢集:
[[email protected] hadoop]$ $HADOOP_HOME/sbin/start-all.sh
得到:
使用jps -l檢視是否有如上圖所示相應的程序。
至此,Hadoop叢集已經好了。
5配置Spark
[[email protected] hadoop]$ cd $SPARK_HOME/conf
[[email protected] conf]$ vi slaves
#將Worker主機名加入
master
[[email protected] conf]$ cp spark-env.sh.template spark-env.sh
#spark-env.sh 為Spark程序啟動時需要載入的配置
#改模板配置中有選項的具體說明
#此處本人稍微加入了一些配置:
export JAVA_HOME=/home/spark/jdk
export HADOOP_HOME=/home/spark/hadoop
export SPARK_MASTER_IP=master
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_MERMORY=2G
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_DAEMON_JAVA_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/spark/spark/logs -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:+DisableExplicitGC -Xms1024m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=256m"
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=7777 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://master:9000/sparkHistoryLogs -Dspark.yarn.historyServer.address=master:7788 -Dspark.history.fs.updateInterval=10"
建立相應目錄:
[[email protected] conf]$ mkdir /home/spark/spark/{logs,worker}
[[email protected] conf]$ hadoop fs -mkdir hdfs://master:9000/sparkHistoryLogs
配置spark-defaults.conf,該檔案為spark提交任務時預設讀取的配置檔案
[[email protected] conf]$ cp spark-defaults.conf.template spark-defaults.conf
[[email protected] conf]$ vi spark-defaults.conf
spark.master spark://master:7077
spark.eventLog.enabled true
spark.eventLog.dir hdfs://master:9000/sparkHistoryLogs
spark.eventLog.compress true
spark.history.updateInterval 5
spark.history.ui.port 7777
spark.history.fs.logDirectory hdfs://master:9000/sparkHistoryLogs
啟動Spark程序:
[[email protected] conf]$ $SPARK_HOME/sbin/start-all.sh
啟動Spark歷史任務記錄:
[[email protected] conf]$ $SPARK_HOME/sbin/start-history-server.sh
Spark和Hadoop相關的所有程序如下圖:
至此Spark叢集也已經執行起來了。
Spark-shell測試Spark叢集:
[[email protected] conf]$ $SPARK_HOME/bin/spark-shell --master spark://master:7077
scala> val data=Array(1,2,3,4,5,6,7,8,9,10)
data: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> val pdata = sc.parallelize(data)
pdata: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:23
scala> pdata.reduce(_+_)
上圖展示了執行過程的一些資訊,能正確得到結果,說明Spark叢集已經OK了。
一些web瀏覽介面:
叢集節點資訊:http://master:8080
歷史任務:http://master:7777
在Spark-Shell中執行測試後,就能看到歷史任務了:
Hadoop 叢集資訊: http://192.168.8.12:50070/