y欢迎转载,转载请注明出处,徽沪一郎。

概要

“spark已经比较头痛了,还要将其运行在yarn上,yarn是什么,我一点概念都没有哎,再怎么办啊。不要跟我讲什么原理了,能不能直接告诉我怎么将spark在yarn上面跑起来,I'm a dummy, just told me how to do it.”

如果你和我一样是一个对形而上的东西不是太感兴趣,而只纠结于怎么去做的话,看这份guide保证不会让你失望, :)。

前期准备

本文所有的操作基于arch linux,保证下述软件已经安装

  1. jdk
  2. scala
  3. maven

搭建hadoop

hadoop像它的Logo一样,真得是一个体形无比巨大的大象,如果直接入手去搞这个东东的话,肯定会昏上好长一段时间。个人取巧,从storm弄起,一路走来还算平滑。

hadoop最主要的是hdfs和MapReduce Framework,针对第二代的hadoop即hadoop 2这个Framework变成了非常流行的YARN, 要是没听说过YARN,都不好意思说自己玩过Hadoop了。

不开玩笑了,注意上面一段话中最主要的信息就是hdfs和mapreduce framework,我们接下来的所有配置都是围绕这两个主题来的。

创建用户

添加用户组: hadoop,  添加用户hduser

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

下载hadoop运行版

假设当前是以root用户登录,现在要切换成用户hduser

su - hduser
id ##检验一下切换是否成功,如果一切ok,将显示下列内容
uid=1000(hduser) gid=1000(hadoop) groups=1000(hadoop)

下载hadoop 2.4并解压

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

Apache Spark源码走读之10 -- 在YARN上运行SparkPi的更多相关文章

  1. Apache Spark源码走读之7 -- Standalone部署方式分析

    欢迎转载,转载请注明出处,徽沪一郎. 楔子 在Spark源码走读系列之2中曾经提到Spark能以Standalone的方式来运行cluster,但没有对Application的提交与具体运行流程做详细 ...

  2. Apache Spark源码走读之16 -- spark repl实现详解

    欢迎转载,转载请注明出处,徽沪一郎. 概要 之所以对spark shell的内部实现产生兴趣全部缘于好奇代码的编译加载过程,scala是需要编译才能执行的语言,但提供的scala repl可以实现代码 ...

  3. Apache Spark源码走读之23 -- Spark MLLib中拟牛顿法L-BFGS的源码实现

    欢迎转载,转载请注明出处,徽沪一郎. 概要 本文就拟牛顿法L-BFGS的由来做一个简要的回顾,然后就其在spark mllib中的实现进行源码走读. 拟牛顿法 数学原理 代码实现 L-BFGS算法中使 ...

  4. Apache Spark源码走读之13 -- hiveql on spark实现详解

    欢迎转载,转载请注明出处,徽沪一郎 概要 在新近发布的spark 1.0中新加了sql的模块,更为引人注意的是对hive中的hiveql也提供了良好的支持,作为一个源码分析控,了解一下spark是如何 ...

  5. Apache Spark源码走读之18 -- 使用Intellij idea调试Spark源码

    欢迎转载,转载请注明出处,徽沪一郎. 概要 上篇博文讲述了如何通过修改源码来查看调用堆栈,尽管也很实用,但每修改一次都需要编译,花费的时间不少,效率不高,而且属于侵入性的修改,不优雅.本篇讲述如何使用 ...

  6. Apache Spark源码走读之6 -- 存储子系统分析

    欢迎转载,转载请注明出处,徽沪一郎. 楔子 Spark计算速度远胜于Hadoop的原因之一就在于中间结果是缓存在内存而不是直接写入到disk,本文尝试分析Spark中存储子系统的构成,并以数据写入和数 ...

  7. Apache Spark源码走读之5 -- DStream处理的容错性分析

    欢迎转载,转载请注明出处,徽沪一郎,谢谢. 在流数据的处理过程中,为了保证处理结果的可信度(不能多算,也不能漏算),需要做到对所有的输入数据有且仅有一次处理.在Spark Streaming的处理机制 ...

  8. Apache Spark源码走读之9 -- Spark源码编译

    欢迎转载,转载请注明出处,徽沪一郎. 概要 本来源码编译没有什么可说的,对于java项目来说,只要会点maven或ant的简单命令,依葫芦画瓢,一下子就ok了.但到了Spark上面,事情似乎不这么简单 ...

  9. Apache Spark源码走读之22 -- 浅谈mllib中线性回归的算法实现

    欢迎转载,转载请注明出处,徽沪一郎. 概要 本文简要描述线性回归算法在Spark MLLib中的具体实现,涉及线性回归算法本身及线性回归并行处理的理论基础,然后对代码实现部分进行走读. 线性回归模型 ...

随机推荐

  1. 配置SecureCRT连接本地虚拟机中的Linux系统

    转自:http://www.pythoner.com/196.html 由于平时公司开发时都是使用SecureCRT连接的Linux服务器,所以也想使用SecureCRT在自己电脑上连接本地虚拟机中的 ...

  2. swift复合类型

     1.元组类型 (tuple) 元组就是多个元素的组合,是一个用圆括号括起来分号分隔的多个数据的一个集合体. 例如:定义一个学生变量,要求姓名 jim,年龄 19,性别 male 的元组变量为  // ...

  3. 10.组合模式(Composite Pattern)

    using System; using System.Collections.Generic; namespace ConsoleApplication8 { class Program { stat ...

  4. CodeIgniter报错: You must use the "set" method to update an entry

    I'm using codeigniter/datamapper to develop an inviocing application and I'm getting an error that i ...

  5. poj 1113:Wall(计算几何,求凸包周长)

    Wall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28462   Accepted: 9498 Description ...

  6. Java Hour 24 JDBC

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 虽然现在都不会直接写JDBC 了,但是了解毕竟是需要的.当然这个和ADO.Ne ...

  7. A session had already been started - ignoring session_start() 解决方法

    A session had already been started - ignoring session_start() --已经存在一个session 打开了 -- 忽略sessioon_star ...

  8. GPS基础

    public class MainActivity extends Activity { private LocationManager manager; private List<String ...

  9. 向hive上传数据时,中文乱码

    sudo -u hive hive -e "use dataplat;load data local inpath '/home/dlht/data/test/2_times.csv' ov ...

  10. PDA移动POS开单扫描打票收银系统-带来零售批发 新的技术 新的手段!!

    手持POS终端高清彩屏,清晰.美观.大方,适用于仓库.超市.服装.食品.批发零售.手机电脑等企业管理.可与管理软件灵活对接.1:员工记不住价格,产品名称,只要有PDA扫描,价格,库存,直接开销售单,打 ...