說白了
Spark on YARN模式的安裝,它是非常的簡單,只需要下載編譯好Spark安裝包,在一台帶有Hadoop YARN客戶端的的機器上運行即可。
Spark on YARN簡介與運行wordcount(master、slave1和slave2)(博主推薦)
Spark on YARN分為兩種: YARN cluster(YARN standalone,0.9版本以前)和 YARN client。
如果需要返回數據到client就用YARN client模式。
如果數據存儲到hdfs就用YARN cluster模式。(我一般是用這個)
開篇要明白
(1)spark-env.sh 是環境變量配置文件
(2)spark-defaults.conf
(3)slaves 是從節點機器配置文件
(4)metrics.properties 是 監控
(5)log4j.properties 是配置日志
(5)fairscheduler.xml是公平調度
(6)docker.properties 是 docker
(7)我這里的Spark on YARN模式的安裝,是master、slave1和slave2。
(8)Spark on YARN模式的安裝,其實,是必須要安裝hadoop的。
(9)為了管理,安裝zookeeper,(即管理master、slave1和slave2)
首先,說下我這篇博客的Spark on YARN模式的安裝情況
我的安裝分區如下,3台都一樣。
關於如何關閉防火牆
我這里不多說,請移步
hadoop 50070 無法訪問問題解決匯總
關於如何配置靜態ip和聯網
我這里不多說,我的是如下,請移步
CentOS 6.5靜態IP的設置(NAT和橋接聯網方式都適用)
DEVICE=eth0 HWADDR=00:0C:29:A9:45:18 TYPE=Ethernet UUID=50fc177a-f282-4c83-bfbc-cb0f00b92507 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" IPADDR=192.168.80.10 BCAST=192.168.80.255 GATEWAY=192.168.80.2 NETMASK=255.255.255.0 DNS1=192.168.80.2 DNS2=8.8.8.8
DEVICE=eth0 HWADDR=00:0C:29:18:ED:4A TYPE=Ethernet UUID=b5d059e4-3b92-41ef-889b-68f2f5684fac ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" IPADDR=192.168.80.11 BCAST=192.168.80.255 GATEWAY=192.168.80.2 NETMASK=255.255.255.0 DNS1=192.168.80.2 DNS2=8.8.8.8
DEVICE=eth0 HWADDR=00:0C:29:8B:DE:B0 TYPE=Ethernet UUID=1ba7be29-2c80-4875-8c11-1ed2a47c0a67 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" IPADDR=192.168.80.12 BCAST=192.168.80.255 GATEWAY=192.168.80.2 NETMASK=255.255.255.0 DNS1=192.168.80.2 DNS1=8.8.8.8
關於新建用戶組和用戶
我這里不多說,我是spark,請移步
新建用戶組、用戶、用戶密碼、刪除用戶組、用戶(適合CentOS、Ubuntu)
關於安裝ssh、機器本身、機器之間進行免密碼通信和時間同步
我這里不多說,具體,請移步。在這一步,本人深有感受,有經驗。最好建議拍快照。否則很容易出錯!
機器本身,即master與master、slave1與slave1、slave2與slave2。
機器之間,即master與slave1、master與slave2。
slave1與slave2。
hadoop-2.6.0.tar.gz + spark-1.5.2-bin-hadoop2.6.tgz 的集群搭建(3節點和5節點皆適用)
關於如何先卸載自帶的openjdk,再安裝
我這里不多說,我是jdk-8u60-linux-x64.tar.gz,請移步
我的jdk是安裝在/usr/local/jdk下,記得賦予權限組,chown -R spark:spark jdk
Centos 6.5下的OPENJDK卸載和SUN的JDK安裝、環境變量配置
#java export JAVA_HOME=/usr/local/jdk/jdk1.8.0_60 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$PATH:$JAVA_HOME/bin
關於如何安裝scala
不多說,我這里是scala-2.10.5.tgz,請移步
我的scala安裝在/usr/local/scala,記得賦予用戶組,chown -R spark:spark scala
hadoop-2.6.0.tar.gz + spark-1.6.1-bin-hadoop2.6.tgz的集群搭建(單節點)(CentOS系統)
#scala export SCALA_HOME=/usr/local/scala/scala-2.10.5 export PATH=$PATH:$SCALA_HOME/bin
關於如何安裝hadoop
我這里不多說,請移步見
我的spark安裝目錄是在/usr/local/hadoop/,記得賦予用戶組,chown -R spark:spark hadoop
去看如何安裝就好,至於hadoop的怎么配置。請見下面的hadoop on yarn模式的配置文件講解。
#hadoop export HADOOP_HOME=/usr/local/hadoop/hadoop-2.6.0 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
關於如何安裝spark
我這里不多說,請移步見
我的spark安裝目錄是在/usr/local/spark/,記得賦予用戶組,chown -R spark:spark spark
只需去下面的博客,去看如何安裝就好,至於spark的怎么配置。請見下面的spark standalone模式的配置文件講解。
hadoop-2.6.0.tar.gz + spark-1.6.1-bin-hadoop2.6.tgz的集群搭建(單節點)(CentOS系統)
#spark export SPARK_HOME=/usr/local/spark/spark-1.6.1-bin-hadoop2.6 export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
關於zookeeper的安裝
我這里不多說,請移步
hadoop-2.6.0-cdh5.4.5.tar.gz(CDH)的3節點集群搭建(含zookeeper集群安裝)
以及,之后,在spark 里怎么配置zookeeper。
這里,我帶大家來看官網
http://spark.apache.org/docs/latest
http://spark.apache.org/docs/latest/running-on-yarn.html
這里,不多說,很簡單,自行去看官網。多看官網!
Hadoop on YARN配置與部署
這里,不多說,請移步
hadoop-2.6.0.tar.gz的集群搭建(3節點)(不含zookeeper集群安裝)
hadoop-2.6.0-cdh5.4.5.tar.gz(CDH)的3節點集群搭建(含zookeeper集群安裝)
hadoop-2.6.0.tar.gz + spark-1.5.2-bin-hadoop2.6.tgz 的集群搭建(3節點和5節點皆適用)
我這里,只貼出我最后的配置文件和啟動界面
注意:3台都是一樣的配置,master、slave1和slave2,我這里不多贅述。
hadoop-env.sh
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_60
core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/hadoop-2.6.0/tmp</value> </property> <property> <name>hadoop.proxyuser.hadoop.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hadoop.groups</name> <value>*</value> </property> </configuration>
hdfs-site.xml
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:9001</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/usr/local/hadoop/hadoop-2.6.0/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/usr/local/hadoop/hadoop-2.6.0/dfs/data</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> </configuration>
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>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
slaves
slave1
slave2
masters
master
然后,新建目錄
mkdir -p /usr/local/hadoop/hadoop-2.6.0/dfs/name mkdir -p /usr/local/hadoop/hadoop-2.6.0/dfs/data
mkdir -p /usr/local/hadoop/hadoop-2.6.0/tmp
在master節點上,格式化
$HADOOP_HOME/bin/hadoop namenode -format
啟動hadoop進程
$HADOOP_HOME/sbin/start-all.sh
輸入
http://master:50070
http://master:8088
Spark on YARN配置與部署(這里,作為補充)
編譯時包含YARN
mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=2.7.1 -Phive -Phive-thriftserver -Psparkr -DskipTests clean package /make-distribution.sh --name hadoop2.7.1 --tgz -Psparkr -Phadoop-2.6 -Dhadoop.version=2.7.1 -Phive -Phive-thriftserver –Pyarn
注意:
hadoop的版本跟你使用的hadoop要對應,建議使用CDH或者HDP的hadoop發行版,對應關系已經處理好了。
export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"
Spark on YARN的配置(這里,本博文的重點)
Spark On YARN安裝非常簡單,只需要下載編譯好的Spark安裝包,在一台帶有Hadoop Yarn客戶端的機器上解壓即可。
Spark on YARN分為兩種: YARN cluster(YARN standalone,0.9版本以前)和 YARN client。
YARN cluster是...我是用這種。
YARN client是將Client和Driver運行在一起(運行在本地),AM只用來管理資源。
如果需要返回數據到client就用YARN client模式。
如果數據存儲到hdfs就用YARN cluster模式。
注意:3台都是一樣的配置,master、slave1和slave2,我這里不多贅述。
Spark on YARN基本配置
配置HADOOP_CONF_DIR或者YARN_CONF_DIR環境變量。讓Spark知道YARN的配置信息。
這句話是從哪里來的,其實,你若沒有在spark-env.sh配置任何東西的話,直接去執行$SPARK_HOME/bin/spark-shell --master yarn就可以看到,它提示你去做。
有三種方式
(1)配置在spark-env.sh中 (我一般是用這種)(本博文也是這種)
(2)在提交spark應用之前export
(3) 配在到操作系統的環境變量中
注意:在yarn-site.xml,配上hostname
如果使用的是HDP,請在spark-defaults.conf中加入:(這里,作為補充)
spark.driver.extraJavaOptions -Dhdp.version=current
spark.yarn.am.extraJavaOptions -Dhdp.version=current
修改如下配置:
● slaves--指定在哪些節點上運行worker。
# # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # A Spark Worker will be started on each of the machines listed below. slave1 slave2
● spark-defaults.conf---spark提交job時的默認配置
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Default system properties included when running spark-submit. # This is useful for setting default environmental settings. # Example: # spark.master spark://master:7077 # spark.eventLog.enabled true # spark.eventLog.dir hdfs://namenode:8021/directory # spark.serializer org.apache.spark.serializer.KryoSerializer # spark.driver.memory 5g # spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"
大家,可以在這個配置文件里指定好,以后每次不需在命令行下指定了。當然咯,也可以不配置啦!(我一般是這里不配置,即這個文件不動它)
spark-defaults.conf (這個作為可選可不選)(是因為或者是在spark-submit里也是可以加入的)(一般不選,不然固定死了)(我一般是這里不配置,即這個文件不動它)
spark.master spark://master:7077 spark.eventLog.enabled true spark.eventLog.dir hdfs://master:9000/sparkHistoryLogs spark.eventLog.compress true spark.history.fs.update.interval 5 spark.history.ui.port 7777 spark.history.fs.logDirectory hdfs://master:9000/sparkHistoryLogs
● spark-env.sh—spark的環境變量
spark-shell運行在YARN上(這是Spark on YARN模式)
(包含YARN client和YARN cluster)(作為補充)
登陸安裝Spark那台機器
bin/spark-shell --master yarn-client
或者
bin/spark-shell --master yarn-cluster
包括可以加上其他的,比如控制內存啊等。這很簡單,不多贅述。
我這里就以YARN Client演示了。
[spark@master spark-1.6.1-bin-hadoop2.6]$ bin/spark-shell --master yarn-client 17/03/29 22:40:04 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 17/03/29 22:40:04 INFO spark.SecurityManager: Changing view acls to: spark 17/03/29 22:40:04 INFO spark.SecurityManager: Changing modify acls to: spark 17/03/29 22:40:04 INFO spark.SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(spark); users with modify permissions: Set(spark) 17/03/29 22:40:05 INFO spark.HttpServer: Starting HTTP Server 17/03/29 22:40:06 INFO server.Server: jetty-8.y.z-SNAPSHOT 17/03/29 22:40:06 INFO server.AbstractConnector: Started SocketConnector@0.0.0.0:35692 17/03/29 22:40:06 INFO util.Utils: Successfully started service 'HTTP class server' on port 35692. Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /___/ .__/\_,_/_/ /_/\_\ version 1.6.1 /_/ Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_60)
注意,這里的--master是固定參數,不是說主機名是master。
Spark Shell啟動時遇到<console>:14: error: not found: value spark import spark.implicits._ <console>:14: error: not found: value spark import spark.sql錯誤的解決辦法(圖文詳解)
提交spark作業
為了出現問題,還是先看我寫的這篇博客吧!
spark跑YARN模式或Client模式提交任務不成功(application state: ACCEPTED)
1、用yarn-client
模式提交spark作業
在/usr/local/spark
目錄下創建文件夾
vi spark_pi.sh
$SPARK_HOME/bin/spark-submit \ --class org.apache.spark.examples.JavaSparkPi \ --master yarn-client \ --num-executors 1 \ --driver-memory 1g \ --executor-memory 1g \ --executor-cores 1 \
$SPARK_HOME/lib/spark-examples-1.6.1-hadoop2.6.0.jar \
driver-memory不指定也可以,默認使用512M
executor-memory不指定的化, 默認是1G
chmod 777 spark_pi.sh ./spark_pi.sh
或者
[spark@master ~]$ $SPARK_HOME/bin/spark-submit \ > --class org.apache.spark.examples.JavaSparkPi \ > --master yarn-cluster \ > --num-executors 1 \ > --driver-memory 1g \ > --executor-memory 1g \ > --executor-cores 1 \ > $SPARK_HOME/lib/spark-examples-1.6.1-hadoop2.6.0.jar
driver-memory不指定也可以,默認使用512M
executor-memory不指定的化, 默認是1G
2、用yarn-cluster
模式提交spark作業
在/usr/local/spark
目錄下創建文件夾
vi spark_pi.sh
$SPARK_HOME/bin/spark-submit \ --class org.apache.spark.examples.JavaSparkPi \ --master yarn-cluster \ --num-executors 1 \ --driver-memory 1g \ --executor-memory 1g \ --executor-cores 1 \
$SPARK_HOME/lib/spark-examples-1.6.1-hadoop2.6.0.jar \
driver-memory不指定也可以,默認使用512M
executor-memory不指定的化, 默認是1G
chmod 777 spark_pi.sh
./spark_pi.sh
或者
[spark@master ~]$ $SPARK_HOME/bin/spark-submit \ > --class org.apache.spark.examples.JavaSparkPi \ > --master yarn-cluster \ > --num-executors 1 \ > --driver-memory 1g \ > --executor-memory 1g \ > --executor-cores 1 \ > $SPARK_HOME/lib/spark-examples-1.6.1-hadoop2.6.0.jar
driver-memory不指定也可以,默認使用512M
executor-memory不指定的化, 默認是1G
注意,這里的--master是固定參數