zoukankan      html  css  js  c++  java
  • Hadoop副本数配置

    一个文件,上传到hdfs上时指定的是几个副本就是几个。修改了副本数(dfs.replications),对已经上传了的文件也不会起作用。
    当然可以在上传文件的同时指定创建的副本数
    hadoop dfs -D dfs.replication=2 -put abc.txt /tmp
    可以通过命令来更改已经上传的文件的副本数:
    hadoop fs -setrep -R 2 /

    查看当前hdfs的副本数
    hadoop fsck -locations
    某个文件的副本数,可以通过ls中的文件描述符看到
    hadoop dfs -ls

    如果你只有3个datanode,但是你却指定副本数为4,是不会生效的,因为每个datanode上只能存放一个副本

    当一个文件上传时,client并不立刻联系namenode,而是先在本地缓存数据,当 HDFS block size时, 联系namenode, namenode将文件名插入到文件系统结构中,并为期分配一个数据块。
    namenode以datanode主机名和数据块的位置来相应client的请求。客户端从本地临时文件中将数据刷新到指定的datanode。
    当file关闭时,未刷新的临时文件将传输到datanode,client通知namenode 文件关闭。 此时,namenode将文件创建操作提交到永久存储。
    如果namenode在file closes之前die,则文件丢失。

    创建副本
    当client写文件到hdfs时,像前面提到的,先写文件到本地临时文件,假设设定hdfs的副本系数为3.当缓存的文件达到hdfs block size时,client从namenode检索一个datanode的列表。该列表包含将host该副本的datanode列表。
    client刷新数据到列表中的第一个datanode。
    第一个datanode以4kb为单位接收数据,将数据写到本地并传输到列表中的第二个datanode,第二个datanode也做同样操作。
    一个datanode可以从上一个数据管道获取数据,并同时将数据发送到下一个数据管道。

    配置参数可以不止一次被指定
    最高优先级值优先
    优先顺序(从低到高):
    - *-site.xml on the slave node
    - *-site.xml on the client machine
    - Values set explicitly in the JobConf object for a MapReduce job

    如果在配置文件中的值标记为final,它覆盖所有其他
    <property>
    <name>some.property.name</name>
    <value>somevalue</value>
    <final>ture</final>
    </property>

    对于类似副本数、data.dir,fs相关的参数建议在datanode节点配成final=true的

    问:预处理主机的dfs.replication设置的是几?
    答:预处理设置dfs.replication参数的hdfs-site.xml配置文件,修改后重新重启预处理服务,副本数问题搞定。

    block的备份数是由写入数据的client端配置决定的,所以该类问题一般是由client的配置引起。

    【参考】http://blog.sina.com.cn/s/blog_edd9ac0e0101it34.html

  • 相关阅读:
    今日头条、Face++开发岗面经
    美团offer面经
    成都百度测试开发一二面面经
    美团四面面经
    久邦数码(3G门户)面试
    58 面试
    好未来提前批
    百度提前批
    新浪面经
    Java Programs
  • 原文地址:https://www.cnblogs.com/zhzhang/p/5141595.html
Copyright © 2011-2022 走看看