y欢迎转载,转载请注明出处,徽沪一郎。node
“spark已经比较头痛了,还要将其运行在yarn上,yarn是什么,我一点概念都没有哎,再怎么办啊。不要跟我讲什么原理了,能不能直接告诉我怎么将spark在yarn上面跑起来,I'm a dummy, just told me how to do it.” linux
若是你和我同样是一个对形而上的东西不是太感兴趣,而只纠结于怎么去作的话,看这份guide保证不会让你失望, :)。apache
本文全部的操做基于arch linux,保证下述软件已经安装bash
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
假设当前是以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安装目录
$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>
$ bin/hadoop namenode -format
$ sbin/hadoop-daemon.sh start namenode
$sbin/hadoop-daemon.sh start datanode
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
sbin/mr-jobhistory-daemon.sh start historyserver
$jps 18509 Jps 17107 NameNode 17170 DataNode 17252 ResourceManager 17309 NodeManager 17626 JobHistoryServer
验证一下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上的运行,再坚持一小会
下载spark for hadoop2的版本
继续以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