Apache Spark源碼走讀之10 -- 在YARN上運行SparkPi

y歡迎轉載,轉載請註明出處,徽滬一郎。node

概要

「spark已經比較頭痛了,還要將其運行在yarn上,yarn是什麼,我一點概念都沒有哎,再怎麼辦啊。不要跟我講什麼原理了,能不能直接告訴我怎麼將spark在yarn上面跑起來,I'm a dummy, just told me how to do it.」 linux

若是你和我同樣是一個對形而上的東西不是太感興趣,而只糾結於怎麼去作的話,看這份guide保證不會讓你失望, :)。apache

前期準備

本文全部的操做基於arch linux,保證下述軟件已經安裝bash

  1. jdk
  2. scala
  3. maven

搭建hadoop

hadoop像它的Logo同樣,真得是一個體形無比巨大的大象,若是直接入手去搞這個東東的話,確定會昏上好長一段時間。我的取巧,從storm弄起,一路走來還算平滑。app

hadoop最主要的是hdfs和MapReduce Framework,針對第二代的hadoop即hadoop 2這個Framework變成了很是流行的YARN, 要是沒據說過YARN,都很差意思說本身玩過Hadoop了。maven

不開玩笑了,注意上面一段話中最主要的信息就是hdfs和mapreduce framework,咱們接下來的全部配置都是圍繞這兩個主題來的。ide

建立用戶

添加用戶組: hadoop,  添加用戶hduseroop

groupadd hadoop
useradd -b /home -m -g hadoop hduser

下載hadoop運行版

假設當前是以root用戶登陸,如今要切換成用戶hduserui

su - hduser
id ##檢驗一下切換是否成功,若是一切ok,將顯示下列內容
uid=1000(hduser) gid=1000(hadoop) groups=1000(hadoop)

下載hadoop 2.4並解壓spa

cd /home/hduser
wget http://mirror.esocc.com/apache/hadoop/common/hadoop-2.4.0/hadoop-2.4.0.tar.gz
tar zvxf hadoop-2.4.0.tar.gz

設置環境變量

export HADOOP_HOME=$HOME/hadoop-2.4.0
export HADOOP_MAPRED_HOME=$HOME/hadoop-2.4.0
export HADOOP_COMMON_HOME=$HOME/hadoop-2.4.0
export HADOOP_HDFS_HOME=$HOME/hadoop-2.4.0
export HADOOP_YARN_HOME=$HOME/hadoop-2.4.0
export HADOOP_CONF_DIR=$HOME/hadoop-2.4.0/etc/hadoop

爲了不每次都要重複設置這些變量,能夠將上述語句加入到.bashrc文件中。

建立目錄

接下來建立的目錄是爲hadoop中hdfs相關的namenode即datanode使用

mkdir -p $HOME/yarn_data/hdfs/namenode
mkdir -p $HOME/yarn_data/hdfs/datanode

修改Hadoop配置文件

下列文件須要相應的配置

  1. yarn-site.xml
  2. core-site.xml
  3. hdfs-site.xml
  4. mapred-site.xml

切換到hadoop安裝目錄

$cd $HADOOP_HOME

修改etc/hadoop/yarn-site.xml, 在<configuration>和</configuration>之間添加以下內容,其它文件添加位置與此一致

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

etc/hadoop/core-site.xml

<property>
   <name>fs.default.name</name>
 <value>hdfs://localhost:9000</value> <!--YarnClient會用到該配置項-->
</property>

etc/hadoop/hdfs-site.xml

 <property>
   <name>dfs.replication</name>
   <value>1</value>
 </property>
 <property>
   <name>dfs.namenode.name.dir</name>
   <value>file:/home/hduser/yarn_data/hdfs/namenode</value> <!--節點格式化中被用到-->
 </property>
 <property>
   <name>dfs.datanode.data.dir</name>
   <value>file:/home/hduser/yarn_data/hdfs/datanode</value>
 </property>

etc/hadoop/mapred-site.xml

<property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
</property>

格式化namenode

$ bin/hadoop namenode -format

啓動hdfs相關進程

啓動namenode

$ sbin/hadoop-daemon.sh start namenode

啓動datanode

$sbin/hadoop-daemon.sh start datanode

啓動mapreduce framework相關進程

啓動Resource Manager

sbin/yarn-daemon.sh start resourcemanager

啓動Node Manager

sbin/yarn-daemon.sh start nodemanager

啓動Job History Server

sbin/mr-jobhistory-daemon.sh start historyserver

驗證部署

$jps
18509 Jps
17107 NameNode
17170 DataNode
17252 ResourceManager
17309 NodeManager
17626 JobHistoryServer

運行wordCount

驗證一下hadoop搭建成功與否的最好辦法就是在上面跑個wordcount試試

$mkdir in
$cat > in/file
This is one line
This is another line

將文件複製到hdfs中

$bin/hdfs dfs -copyFromLocal in /in

運行wordcount

bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.0.jar wordcount /in /out

查看運行結果

bin/hdfs dfs -cat /out/*

先歇一會,配置到這裏,已經一頭汗了,接下來將spark在yarn上的運行,再堅持一小會

在yarn上運行SparkPi

下載spark

下載spark for hadoop2的版本

運行SparkPi

繼續以hduser身份運行,最主要的一點就是設置YARN_CONF_DIR或HADOOP_CONF_DIR環境變量

export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
SPARK_JAR=./assembly/target/scala-2.10/spark-assembly_2.10-0.9.1-hadoop2.2.0.jar \
./bin/spark-class org.apache.spark.deploy.yarn.Client \
--jar ./examples/target/scala-2.10/spark-examples_2.10-assembly-0.9.1.jar \
--class org.apache.spark.examples.JavaSparkPi \
--args yarn-standalone \
--num-workers 1 \
--master-memory 512m \
--worker-memory 512m \
--worker-cores 1

檢查運行結果

運行結果保存在相關application的stdout目錄,使用如下指令能夠找到

cd $HADOOP_HOME
find . -name "*stdout"

假設找到的文件爲./logs/userlogs/application_1400479924971_0002/container_1400479924971_0002_01_000001/stdout,使用cat能夠看到結果

cat ./logs/userlogs/application_1400479924971_0002/container_1400479924971_0002_01_000001/stdout
Pi is roughly 3.14028
相關文章
相關標籤/搜索