1. 程式人生 > >Spark 叢集搭建詳細步驟

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

[[email protected]

 ~]# passwd 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]

 ~]$ cd .ssh

[[email protected] .ssh]$ cat id_rsa.pub > authorized_keys

如果直接用ssh連線不用輸密碼就能登入,表示祕鑰配置成功

 

要注意檔案的許可權:

 

3配置JDKScala,環境變數

A.需要的檔案列表如下:

 

下載方法:分別到對應的官網,再到下載連結,使用wget下載,具體步驟省略

B.分別解壓每個檔案,注意:本人將所有的檔案放到spark使用者的主目錄下,即:/home/spark

解壓後的目錄結構如下:

 

建立相應的軟連結(也可以不建軟連結,只是為了看著舒服和操作方便)

[[email protected]

 ~]$ ln -s hadoop-2.6.0 hadoop

[[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


如圖中的status0,說明初始化成功,若為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

 

SparkHadoop相關的所有程序如下圖:

 

至此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/