【hadoop2.2(yarn)】基于yarn成功执行分布式map-reduce,记录问题解决过程。
hadoop2.x改进了hadoop1.x的架构, 具体yarn如何工作以及改进了什么可以在网上学, 这里仅记录我个人搭建的问题和理解,希望能帮助遇到困难的朋友。
在开始前,必须了解yarn版本的mapreduce框架基础组件包括1个resourcemanager和每个slave上各1个nodemanager,其他进程均由mapreduce任务动态创建。
1,怎么简单高效的部署分布式集群?
答:先在1台机器上准备好hadoop和java环境,将java和hadoop的jar包环境变量写到.bashrc里去,填写hadoop配置文件。最后,配置这台服务器到其他所有slave节点的信任关系,将整个hadoop目录scp到slave节点上即可完成部署。
2,hadoop配置有哪些是至关重要的?
a) core-site.xml:指定hdfs的客户端访问地址,指定hadoop的临时文件目录:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/liangdong/hadoop/hadoop/tmp/hadoop-${user.name}</value>
<description>A base for other temporarydirectories.</description>
</property> <property>
<name>fs.default.name</name>
<value>hdfs://10.42.41.51:8010</value>
<description>The name of the default file system. A URI whose
scheme and authority determine the FileSystem implementation. The
uri's scheme determines the config property (fs.SCHEME.impl) naming
the FileSystem implementation class. The uri's authority is used to
determine the host, port, etc. for a filesystem.
</description>
</property>
</configuration>
b) hdfs-site.xml:指定hdfs副本个数,按照我的理解,上述fs.default.name是namenode的RPC通讯地址,而这里配置的是namenode和secondarynodenode的管理员HTTP地址,并且secondarynamenode会启动到对应的Host节点上,直到namenode挂了,那么secondarynamenode就会bound到fs.default.name里的端口(8010)提供服务。
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>Default block replication.
Theactual number of replications can be specified when the file is created.
Thedefault is used if replication is not specified in create time.
</description>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>m1-reader-q1preonline07.m1.baidu.com:50070</value>
<description>Secondary get fsimage and edits via dfs.http.address</description>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>m1-reader-q1preonline08.m1.baidu.com:50070</value>
<description>NameNode get the newest fsimage via dfs.secondary.http.address</description>
</property>
</configuration>
c) mapred-site.xml:关于mapreduce框架的配置,指定框架为yarn,指定map和reduce默认的个数:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description></description>
</property> <property>
<name>mapred.map.tasks</name>
<value>10</value>
<description>
As a rule of thumb, use 10x the number of slaves(i.e., number of tasktrackers).
</description>
</property> <property>
<name>mapred.reduce.tasks</name>
<value>2</value>
<description>
As a rule of thumb, use 2x the number of slaveprocessors (i.e., number of tasktrackers).
</description>
</property>
</configuration>
d)yarn-site.xml:指定resourcemanager的监听客户端提交地址,监听applicationMaster来申请资源的地址,监听nodemanager来上报状态的地址,还有2个给管理员访问的HTTP地址,还有一个至关重要的配置是必须写的,这个配置是2.2版本一个bug导致不会加载默认参数,所以这里要给它写上,就是aux-services。
<configuration> <!-- Site specific YARN configuration properties --> <property>
<name>yarn.resourcemanager.address</name>
<value>m1-reader-q1preonline07.m1.baidu.com:8032</value>
<description></description>
</property> <property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>m1-reader-q1preonline07.m1.baidu.com:8030</value>
<description></description>
</property> <property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>m1-reader-q1preonline07.m1.baidu.com:8031</value>
<description></description>
</property> <property>
<name>yarn.resourcemanager.admin.address</name>
<value>m1-reader-q1preonline07.m1.baidu.com:8033</value>
<description></description>
</property> <property>
<name>yarn.resourcemanager.webapp.address</name>
<value>m1-reader-q1preonline07.m1.baidu.com:8088</value>
<description></description>
</property> <property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property> </configuration>
最后,把所有datanode的机器ip/host填到slaves文件里(自己创建一个):
m1-reader-q1preonline07.m1.baidu.com
m1-reader-q1preonline08.m1.baidu.com
m1-reader-q1preonline09.m1.baidu.com
m1-reader-q1preonline10.m1.baidu.com
slaves文件是给启动集群脚本看的,它会ssh到每台slave机器上启动datanode和nodemanager。而上述其他配置文件,一方面用于指导hadoop集群的进程启动,一方面也被hadoop客户端读取从而获取集群的一些监听地址,这样才能连接上去访问集群或者提交mapreduce任务,这是很容易理解的。
3,怎么启动集群和停止集群?
答:sbin/start-all.sh sbin/stop-all.sh
4,怎么动态加个slave节点?
答:把hadoop环境拷贝一份过去,配好控制机到slave的信任,然后再控制机上修改一下slaves文件把机器IP加进去,然后再sbin/start-all.sh一次,脚本检测到这个slave上进程没启动就给拉起来了,一旦拉起来slave上的进程会根据各种配置文件主动连到namenode和resourecemanager上,就进去集群了。
5,在yarn上怎么跑mapreduce?
答:和hadoop v1一样,就hadoop streaming去提交就可以了,这里hadoop客户端会从配置文件里读yarn resourcemangager提交任务地址并向其提交任务,和v1版本向jobtracker提交不同。
6,怎么看mapreduce任务状态?
答:上面配置里有yarn-site.xml的配置,里面不是有2个管理员地址吗,就去那里看就可以了,如果一切配置得当,你应该可以看到所有集群节点以及当前在上面跑了多少个map等等信息。
7,当mapreduce跑起来之后是什么样子?
答:你理应能够在所有slaves节点上看到大量java进程,使用jps命令可以看到applicationMaster进程还有若干jar包或者你的map/reduce程序在跑,最好通过resoucemanager的http页面观察一下是不是所有slave都进入了cluster,并且是不是都有container启动。
8,有任何问题可以留言,我个人发现的新问题也会继续追加,谢谢。
【hadoop2.2(yarn)】基于yarn成功执行分布式map-reduce,记录问题解决过程。的更多相关文章
- Hadoop2.0构成之YARN
YARN产生背景 Hadoop1.x中的MapReduce构成图如下: 在Hadoop1.x中MapReduce是Master/Slave结构,在集群中的表现形式为:1个JobTracker带多个Ta ...
- Spark运行模式_基于YARN的Resource Manager的Custer模式(集群)
使用如下命令执行应用程序: 和"基于YARN的Resource Manager的Client模式(集群)"运行模式,区别如下: 在Resource Manager端提交应用程序,会 ...
- spark基于yarn的两种提交模式
一.spark的三种提交模式 1.第一种,Spark内核架构,即standalone模式,基于Spark自己的Master-Worker集群. 2.第二种,基于YARN的yarn-cluster模式. ...
- 12、基于yarn的提交模式
一.三种提交模式 1.Spark内核架构,其实就是第一种模式,standalone模式,基于Spark自己的Master-Worker集群. 2.第二种,是基于YARN的yarn-cluster模式. ...
- Spark剖析-宽依赖与窄依赖、基于yarn的两种提交模式、sparkcontext原理剖析
Spark剖析-宽依赖与窄依赖.基于yarn的两种提交模式.sparkcontext原理剖析 一.宽依赖与窄依赖 二.基于yarn的两种提交模式深度剖析 2.1 Standalne-client 2. ...
- centos6.6安装hadoop-2.5.0(三、完全分布式安装)
操作系统:centos6.6(三台服务器) 环境:selinux disabled:iptables off:java 1.8.0_131 安装包:hadoop-2.5.0.tar.gz hadoop ...
- Hadoop-2.4.0安装和wordcount执行验证
Hadoop-2.4.0安装和wordcount执行验证 下面描写叙述了64位centos6.5机器下,安装32位hadoop-2.4.0,并通过执行 系统自带的WordCount样例来验证服务正确性 ...
- HBase -- 基于HDFS的开源分布式NoSQL数据库
HBase(Hadoop Database)是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,我们可以利用HBase技术在廉价的PC上搭建起大规模结构化存储集群.同Google的Bigtable ...
- Hadoop2.7.5+Hbase1.4.0完全分布式
Hadoop2.7.5+Hbase1.4.0完全分布式一.在介绍完全分布式之前先给初学者推荐两本书:<Hbase权威指南>偏理论<Hbase实战>实战多一些 二.在安装完全分布 ...
随机推荐
- 从零点壹开始学JAVA(DAY 1 笔记)<补充记录>
一个同事的先生(下面称呼其为耿大神)是做开发的,比较资深的那种,在他们公司的核心技术部门. 幸运的是,耿大神很乐意帮助我这株小白菜,在业余时间指导我,这里深表感谢. 耿大神隔段时间会给我提一些问题,让 ...
- 【BZOJ】4002: [JLOI2015]有意义的字符串
题意 求$\left \lfloor \left( \frac{b+\sqrt{d}}{2} \right)^n \right \rfloor \pmod {7528443412579576937} ...
- 忽略this的后果
昨天在做一个简单的遮罩功能,说简单不如说是繁琐的好,主要是因为一个页面中有将近十几个,只不过是功能是一样的,要将一段文字遮盖住,文字的内容是不确定的,也就是跟着内容的高度变化而改变遮罩层的高度.了解了 ...
- Hibernate Session中的save(),update(),delete(),saveOrUpdate() 细粒度分析
Hibernate在对资料库进行操作之前,必须先取得Session实例,相当于JDBC在对资料库操作之前,必须先取得Connection实例, Session是Hibernate操作的基础,它不是设计 ...
- Artifact Project3:war exploded: Error during artifact deployment. See server log for details.
第一次建Struts2 idea遇到了这个问题,很莫名其妙,搞了几天没解决,几乎要放弃idea了.最后解决的时候也很突然.回想解决的过程,大致如下. 第一种情况:File->Project St ...
- js获取浏览器高度
常用: JS 获取浏览器窗口大小 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 // 获取窗口宽度 if (window.innerWidth) winWidth = ...
- Mongodb常用命令介绍
查看命令的方式: 1.在shell中运行db.listCommands() 2.在浏览器中访问管理员接口:http://ipaddress:28017/_commands 下面介绍在Mongodb中最 ...
- SQL执行效率1
第一种方法:使用insert into 插入,代码如下: ? 1 2 3 4 5 6 7 $params = array('value'=>'50′); set_time_limit(0); e ...
- while(cin.eof)出错 poj
zoj遇到c++如何判定输入流结尾的问题,一不小心就超时了 楼下的代码可以通过zoj #include<iostream> using namespace std; int main(){ ...
- java之数据结构之链表及包装类、包
链表是java中的一种常见的基础数据结构,是一种线性表,但是不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针.与线性对应的一种算法是递归算法:递归算法是一种直接或间接的调用自身算法的过 ...