1 环境搭建
mapreduce作为分布式计算模块,yarn作为作业调度和资源管理模块,区别在于:
- mapreduce是一种编程模型,可以理解为一个jar包
- yarn相当于启动运行mapreduce作业容器的进程
- 老版本中的mapreduce和yarn是整合在一起的
- mapreduce配置可以在提交作业时指定,而yarn配置必须要在配置文件修改生效。
1.1 配置yarn-env.sh
[centos@hadoop01 ~]$ tail -1 /soft/hadoop-2.7.3/etc/hadoop/yarn-env.sh export JAVA_HOME=/soft/jdk1.8.0_131
1.2 新建mapred-site.xml
清空文件内容并粘贴以下内容 <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定资源调度框架,可选项为local(本地模式)、classic(mr一代)、yarn(mr二代) --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 指定作业历史管理器的rpc地址和端口 --> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop02:10020</value> </property> <!-- 指定作业历史管理器的web地址和端口 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop02:19888</value> </property> </configuration>
1.3 配置yarn-site.xml
清空文件内容并粘贴以下内容 <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop02</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>hadoop02:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>hadoop02:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>hadoop02:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>hadoop02:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>hadoop02:8088</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> </configuration>
1.4 启动hdfs(hadoop01)
[centos@hadoop01 ~]$ start-dfs.sh
1.5 配置节点的ssh免密登陆(hadoop02)
[centos@hadoop02 ~]$ ssh-keygen -t rsa [centos@hadoop02 ~]$ ssh-copy-id hadoop01 [centos@hadoop02 ~]$ ssh-copy-id hadoop02 [centos@hadoop02 ~]$ ssh-copy-id hadoop03
1.6启动jobhistory(hadoop02)
#此进程记录了mapreduce的运行历史信息 [centos@hadoop02 ~]$ mr-jobhistory-daemon.sh start historyserver
1.7 启动yarn(hadoop02)
[centos@hadoop02 ~]$ start-yarn.sh
2 mapreduce原理
2.1 wordcount运行
将/soft/hadoop-2.7.3/share/hadoop/mapreduce/目录下的hadoop-mapreduce-examples-2.7.3.jar拷贝到当前目录 创建英文文档1.txt 将1.txt传到hdfs根目录 运行jar命令hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /1.txt /out
注意:前面三个参数是指定运行的jar,第四个参数是输入路径,第五个是输出路径且输出路径不能存在,若存在则报错 在web界面上输入ip:8088端口,则可以看到mapreduce的执行状态
小游戏:
1、将userdraw文件夹put到hdfs hdfs dfs -put userdraw / 将userdraw整个目录上传至hdfs的根下 2、进入userdraw目录 hadoop jar myhadoop.jar com.oldboy.hadoop.userdraw.UserDrawApp /userdraw/data /userdraw/out /userdraw/out2
能够通过用户的请求代码比如10005分析出男女的占比,从而分析用这个软件的大概是男性还是女性。
总结:
JobHistoryServer
=====================================
在hadoop中,有一个进程是需要单独启动的,但是这个进程对于mapreduce有非常大的辅助作用
mr-jobhistory-daemon.sh start historyserver
可以在job运行之后,查看作业运行情况,方便作业错误排查
=====================================
在hadoop中,有一个进程是需要单独启动的,但是这个进程对于mapreduce有非常大的辅助作用
mr-jobhistory-daemon.sh start historyserver
可以在job运行之后,查看作业运行情况,方便作业错误排查
认清Mapreudce和Yarn的区别
====================================
map ===> reduce //构成第一个job ===> 运行在容器中
map ===> reduce //构成第二个job ===>
Mapreduce中分为mapTask和reduceTask
这两种Task是在YarnChild容器中运行的
YarnChild是由Yarn框架中的nodemanager生成的
mapreduce是一种编程模型,可以理解为一个jar包
yarn相当于启动运行mapreduce作业容器的进程
====================================
map ===> reduce //构成第一个job ===> 运行在容器中
map ===> reduce //构成第二个job ===>
Mapreduce中分为mapTask和reduceTask
这两种Task是在YarnChild容器中运行的
YarnChild是由Yarn框架中的nodemanager生成的
mapreduce是一种编程模型,可以理解为一个jar包
yarn相当于启动运行mapreduce作业容器的进程
MRAppMaster //是容器,负责?
YarnChild //是容器,负责?
<property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>1024</value> <description> resourcemanager启动的container所能分配的最小内存,低于此值会抛出异常 </description> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>4096</value> <description> resourcemanager启动的container所能分配的最大内存,高于此值会抛出异常 </description> </property> <property> <name>yarn.scheduler.minimum-allocation-vcores</name> <value>1</value> <description> resourcemanager启动的container所能分配的最小cpu内核,低于此值会抛出异常 </description> </property> <property> <name>yarn.scheduler.maximum-allocation-vcores</name> <value>4</value> <description> resourcemanager启动的container所能分配的最大cpu内核,高于此值会抛出异常 </description> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>4096</value> <description> container能分配的最大物理内存 </description> </property>