深入hadoop1-1 hadoop-hdfs-2

1.文件目录分析

通过50070端口,我们发现一个文件的块大小128M:

那么,这个文件具体位置在哪呢?找到dfs的配置datanode目录。

[hadoop@hadoop2 current]$ pwd
/home/hadoop/hadoop-current/tmp/dfs/dn/current
[hadoop@hadoop2 current]$ ls
BP-864899108-10.179.25.59-1553789556161  VERSION
  • VERSION显示了当前使用了哪个集群,namenodedatanodeVERSION是一样的,不一样表示不是同一个集群:
[hadoop@hadoop2 current]$ cat VERSION
#Fri May 03 23:11:50 CST 2019
storageID=DS-47ee88ba-ea07-4585-b5e8-c7bc336dc929
clusterID=CID-c508fc32-0eea-481e-9f34-c97e018f21bb
cTime=0
datanodeUuid=966ba8b9-dcde-434b-aade-484616d90cb7
storageType=DATA_NODE
layoutVersion=-56
  • BP-864899108-10.179.25.59-1553789556161,其中的ip显示的namenodeip

参考:https://blog.csdn.net/qq_26442553/article/details/79117897

虽然HDFS以block块存储,对于大文件会被切分成很多以块大小的分块进行存储,但是如果文件小于HDFS的块大小,那么该文件的存储不会占用整个块的空间。比如一个10MB的文件,存储虽然在一个128MB的块上,但是该文件实际只用了10MB的空间,而不是128MB的空间。

128M的文件快,namenode会为他创建一个元数据信息,这个信息也是要占空间的,存在namenode内存当中(元数据信息不占用块)。在内存中是否有风险呢?使用SecondNameNodeHA 来解决的。
以前是时候用SecondNameNode,现在是使用HAfederation来解决的。

TFS参考小文件处理方式。

【HDFS节点】

  1. 【namenode】
管理元数据
   	文件属性
   			名称
   			位置
   			权限
   			数据块
元数据存储在namenode内存中,在本地也有备份,fsimage镜像文件
namenode在启动的时候会去读取加载fsimage的镜像文件

edits为编辑日志文件,用于记录用户对hdfs的所有行为操作
namenode在启动的时候还会去读取加载edits文件

edits越来越大,考虑将fsimage和edits合并
SecondNameNode进行合并,功能:
   	合并文件
   	减少下一次namenode启动时间

namenode在重新启动之后会读取新的合并的文件。生成新的fsimage镜像文件和edits文件,
原来的初始化的两个文件就没有用了。

【常见问题】

  1. 【clusterID】
    [hadoop@cluster-host1 dfs]$ cat nn/current/VERSION
    clusterID=CID-ca06691a-2bf4-46a9-93aa-1fc2bf0f9ec3
    
    [hadoop@cluster-host2 dfs]$ cat dn/current/VERSION
    clusterID=CID-ca06691a-2bf4-46a9-93aa-1fc2bf0f9ec3
    
    集群id不一致,修改VERSION即可,以namenode为准;(或重新格式化)

2.历史服务

1.MapReduce historyService

按以下两个步骤执行

【MapReduce historyService】历史服务器

  1. 查看已经运行完成的应用记录
    修改mapred-site.xml
    指定historyService的地址,内部和WEB的通信端口号,如果不指定默认是本机。
    history是一个轻量级的服务,可以部署在任意一台节点上。

用于查询每个job运行完以后的历史日志信息,是作为一台单独的服务器运行的。可以在namenode或者datanode上的任意一台启动即可。(端口最好默认)
mapred-site.xml中配置mapreduce.jobhistory.addressmapreduce.jobhistory.webapp.address即可。

vim mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

    <!-- 历史服务 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop1:10020</value>
   </property>
   <property>
       <name>mapreduce.jobhistory.webapp.address</name>
       <value>hadoop1:19888</value>
   </property>

</configuration>
2. 日志聚合

在yarn集群上运行作业的时候,日志聚合是没有运行的。只有当整个作业完成的时候,才能将各个node上的日志上传到hadoop上。而且默认会删除本节点的日志删除,所以你无法从yarn的web查找日志了。
没有配历史日志,从application点进history时,就会报错。

要实现日志聚集,只需要在yarn-site.xml中配置如下参数:

参考:https://blog.csdn.net/walykyy/article/details/81460698

vim yarn-site.xml

    <!-- 日志聚合 -->
    <property>
         <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>
         <name>yarn.log-aggregation.retain-seconds</name>
        <value>600000</value>
    </property>

将其分发其他机器。
scp {mapred-site.xml,yarn-site.xml} hadoop2:/home/hadoop/hadoop-current/etc/hadoop/
启动历史日志功能:

[hadoop@hadoop1 sbin]$ ./mr-jobhistory-daemon.sh start historyserver

jps查看已经启动。(不配历史服务时,重启yarn,8088页面的application会被清空)

日志文件存储目录默认在哪呢?/tmp/log

测试环境修改/tmp目录权限

hadoop fs -chmod -R 777 /tmp

目录:

/tmp/logs/hadoop/logs
/tmp/hadoop-yarn/staging/history/done/2019/05/23

注:关于目录权限,也可以配置HDFS用户权限来设置。如默认用户dr.who

<property> <name>dfs.permissions.enabled</name> <value>false</value>
</property>
<property> <name>hadoop.http.staticuser.user</name> <value>yuorname</value>
</property>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值