y欢迎转载,转载请注明出处,徽沪一郎。 概要“spark已经比较头痛了,还要将其运行在yarn上,yarn是什么,我一点概念都没有哎,再怎么办啊。不要跟我讲什么原理了,能不能直接告诉我怎么将spark在yarn上面跑起来,I'm a dummy, just told me how to do it.” 如果你和我一样是一个对形而上的东西不是太感兴趣,而只纠结于怎么去做的话,看这份guide保证不会让你失望, :)。 前期准备本文所有的操作基于arch linux,保证下述软件已经安装
搭建hadoophadoop像它的Logo一样,真得是一个体形无比巨大的大象,如果直接入手去搞这个东东的话,肯定会昏上好长一段时间。个人取巧,从storm弄起,一路走来还算平滑。 hadoop最主要的是hdfs和MapReduce Framework,针对第二代的hadoop即hadoop 2这个Framework变成了非常流行的YARN, 要是没听说过YARN,都不好意思说自己玩过Hadoop了。 不开玩笑了,注意上面一段话中最主要的信息就是hdfs和mapreduce framework,我们接下来的所有配置都是围绕这两个主题来的。 创建用户添加用户组: hadoop, 添加用户hduser
下载hadoop运行版假设当前是以root用户登录,现在要切换成用户hduser
下载hadoop 2.4并解压
设置环境变量
为了避免每次都要重复设置这些变量,可以将上述语句加入到.bashrc文件中。 创建目录接下来创建的目录是为hadoop中hdfs相关的namenode即datanode使用
修改Hadoop配置文件下列文件需要相应的配置
切换到hadoop安装目录
修改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
启动hdfs相关进程启动namenode
启动datanode
启动mapreduce framework相关进程启动Resource Manager
启动Node Manager
启动Job History Server
验证部署
运行wordCount验证一下hadoop搭建成功与否的最好办法就是在上面跑个wordcount试试
将文件复制到hdfs中
运行wordcount
查看运行结果
先歇一会,配置到这里,已经一头汗了,接下来将spark在yarn上的运行,再坚持一小会 在yarn上运行SparkPi下载spark下载spark for hadoop2的版本 运行SparkPi继续以hduser身份运行,最主要的一点就是设置YARN_CONF_DIR或HADOOP_CONF_DIR环境变量
检查运行结果运行结果保存在相关application的stdout目录,使用以下指令可以找到
假设找到的文件为./logs/userlogs/application_1400479924971_0002/container_1400479924971_0002_01_000001/stdout,使用cat可以看到结果
|
|