大数据之Hadoop2.0入门2
一.YARN组件讲解
ResourceManager
全局的资源管理器,整个集群上只有一个,负责集群资源的统一调度分配,负责对各个NodeManager上的资源进行统一的管理和调度。
ApplicationMaster
它负责向ResourceManager申请资源,并要求NodeManager启动可以占用一定资源任务,客户提交的每个应用程序都包含一个ApplicationMaster。主要功能:与ResourceManager调度协商获取资源(用Container),与NodeManager进行通信启动和停止任务,监控所有任务运行状态,并在任务运行失败时重新申请资源用于重启任务。
NodeManager
NM是每个节点上的资源和任务管理器,一方面,它会定时向ResourceManager汇报本节点上资源的使用情况和各个节点上Container的运行状态;另一方面,他会接收并处理来自ApplicationMaster的Container启动和停止请求。
Container
Container是YARN中的抽象概念,它分装了CPU,内存,多个节点上的多维度资源,当ApplicationMaster向ResourceManager申请资源时,ResourceManager返回给ApplicationMaster的资源便是Container,YARN会给每个任务分配一个Container,且任务只能使用该Container中描述的资源。
二.HDFS文件系统架构及原理讲解
数据块(block):每个块的默认大小:128Mb,大小可以用户自定义,如果一个文件的大小小于块的大小,是不会占据整个块的空间的。
128Mb的文件块,namenode会为他创建一个元数据信息,这个信息也是要占据空间,存在namenode的内存当中
vi hdfs-site.xml
<property>
<!--块大小单位默认为byte-->
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
存储模式:
首先,HDFS会默认分块,大小是128Mb(可修改),HDFS上面的块的大小可以大于128Mb,设定的方法有:
1.通过HDFS的API的create方法,可以指定创建的文件块的大小(大小任意);
2.hive当中也可以在hive-site当中设定,hive输出块的大小(可任意大于128Mb);
522Mb的文件,分成几个Map来处理呢?
首先,前3个128Mb各对应一个Map,最后一个138Mb小于128*1.1Mb,所以这里就不会再开启一个map来处理那10Mb,直接在最后一个map当中把所有138Mb的数据输入,切记。
MapReduce有这样的机制,最后一个文件的输入如果小于128*1.1(其实就是可以多10%),那么只会启动一个Map来执行这个job。
HDFS不适合存储大量的小文件,可以考虑合并大文件,效果不明显。阿里巴巴开源了TFS淘宝文件系统,参考了HDFS.
主节点(NameNode):
元数据是存储在namenode内存中的
元数据在本地也有备份,fsimage镜像文件
edits称作编辑日志文件,用于记录用户对HDFS的所有的行为操作
namenode在启动的时候还会去读取加载edits编辑日志文件
edits越来越大,考虑将fsimage和edits合并
secondarynamenode(不会对外提供服务)进行合并功能:
合并文件,减少下一次namenode启动时间,namenode在重新启动之后会读取新的合并的文件,生成新的fsimage镜像文件和edits编辑日志文件,原来初始化的两个文件就没有用了。
二.MapReduce历史服务器history及常见错误分析
1.历史服务器:查看已经运行完成的应用记录。
配置:
修改mapred-site.xml:指定historyserver的地址,内部和外部通信端口,如果不指定默认是本机,historyserver是一个轻量级的服务,可以部署在任意一台节点上。
vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--以下端口号不要随意改动-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop01:19888</value>
</property>
</configuration>
2.日志聚合功能
指定开启日志聚合功能,指定日志存放在HDFS上的时间期限,一般建议3-7天左右,存放在HDFS的/tmp/用户之下
vi yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
</configuration>
3.重启节点,重启yarn进程
#启动节点
hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode
hadoop-daemon.sh start secondarynamenode
#启动yarn
yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager
#启动历史服务器
mr-jobhistory-daemon.sh start historyserver
#关闭历史服务器
mr-jobhistory-daemon.sh stop historyserver
4.配置用户权限
关闭用户权限检测
vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop01:50090</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<!--配置静态用户-->
<property>
<name>hadoop.http.staticuser.user</name>
<value>nike</value>
</pro