Hadoop文件放置策略及数据倾斜的balance方法

来源:互联网 发布:windows 10怎么调声音 编辑:程序博客网 时间:2024/05/16 00:44

转自:

http://www.cnblogs.com/zhanghuijunjava/archive/2013/04/22/Hadoop-block_hdfs.html?utm_source=tuicool

http://www.cnblogs.com/Richardzhu/p/3623323.html


hadoop文件放置

1:什么是HDFS?

HDFS适合做:

  1. 存储大文件。上G、T甚至P。
  2. 一次写入,多次读取。并且每次作业都要读取大部分的数据。
  3. 搭建在普通商业机群上就可以了。虽然会经常宕机,但HDFS有良好的容错机制。

HDFS不适合做:

  1. 实时数据获取。如果有这个需求可以用HBase。
  2. 很多小文件。因为namenode要存储HDFS的metadata(比如目录的树状结构,每个文件的文件名、ACL、长度、owner、文件内容存放的位置等等信息),所以HDFS上文件的数目受到namenode内存的限制。
  3. 并发环境下的写入和修改。

hadoop中存储文件以HDFS形式存储,HDFS拥有自己的设计原则:

1:文件大小以block块的形式存储
2:每个块至少分配到三台DataNode(看集群情况而定)
3:通过副本机制提高可靠度和吞吐量
4:hadoop1.0使用单一的master(NameNode)来协调存储元数据(metadata)
5:最有意思的是hadoop设计者没有设置客户端缓存机制,因为我们对处理数据有足够的信心。
下图为HDFS的系统结构
        
        NameNode:主要存储元数据:例如:文件名,拷贝几份,分别备份到哪里;
过程大概如下:
client要向集群中写入数据,首先询问Master(NameNode),Master告知客户端向哪些DataNode
写入数据,在往DataNode写入数据的同时,DataNode与NameNode保持心跳,如果DataNode在执行
任务失败,NameNode会通过心跳机制得知DataNode死掉,将重新分配新的任务到其他的DataNode。
2:Block之副本放置策略
第一副本:放置在上传文件DataNode,如果是集群外提交,由NameNode选择一台磁盘不太满,
  CPU不太忙的节点。
第二副本:放置在于第一副本不同的机架的节点上
第三副本:与第二个副本相同集群的节点
也许根据业务的需要我们需要更多地副本,其他副本随机分配
   
3:Block的存储形式
1:Block默认大小64M,如果上传文件小于64M,那么仍然占用一个命名空间(NameNode metadata),
   但是物理存储不会占用64M空间;(这也是hadoop为什么不太适合处理小数据的原因之一)
2:Block大小和副本数由Client端上传文件到HDFS时设置,其中副本数可以变更,Block是不可以再上传后变更的

数据倾斜的balance方法

一、hadoop balance工具的用法:

    启动balance:

      bin/start-balancer.sh -threshold 5

    停止balance:

      bin/stop-balancer.sh

二、影响hadoop balance工具的几个参数:

    -threshold默认设置:10,参数取值范围:0-100,参数含义:判断集群是否平衡的目标参数,每一个datanode存储使用率和集群总存储使用率的差值都应该小于这个阀值,理论上,该参数设置的越小,整个集群就越平衡,但是线上环境中,hadoop集群在进行balance时,还在并发的进行数据的吸入和删除,所以有可能无法到达设定的平衡参数值。

    dfs.balance.bandwidthPerSec默认设置:1048576(1M/S),参数含义:设置balance工具的运行中所能占用的带宽,设置的过大可能会造成mapred运行缓慢。

设置该参数需要修改hdfs-site.xml文件:

<property> <name>dfs.balance.bandwidthPerSec</name> <value>20971520</value> <description>  Specifies the maximum bandwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second. </description> </property>

上面是设置传输速率为20M/S。

三、hadoop balance工具其它特点:

    balance工具的运行过程中,迭代的将文件块从高使用率的datanode移动到低使用率的datanode上,每一个迭代过程中移动的数据量不超过下面两个值的较小者:10G或者指定阀值*容量,且每次迭代不超过20分钟。每次迭代结束后,balance工具将更新该datanode的文件块分布情况。

原创粉丝点击