hadoop 2.2.0的datanode中存储block的多个文件

系统 2598 0

    hadoop的分布式文件系统HDFS的存储方式是,将数据分成block,分布式存储在整个hadoop集群的datanode中,每个block默认的大小是64M,这些block文件的具体存储位置是在hadoop的配置文件中定义的,进入/home/hadoop2/hadoop2/etc/hadoop的配置文件目录(hadoop版本为社区版2.2.0):

      
        vi
      
       /home/hadoop2/hadoop2/etc/hadoop/hdfs-
      
        site.xml




      
      <configuration>

<property>

<name>dfs.namenode.secondary.http-address</name>

<value>master:
      
        9001
      
      </value>

</property>



<property>

<name>dfs.namenode.name.
      
        dir
      
      </name>

<value>
      
        file
      
      :/home/hadoop2/dfs/name</value>

</property>




      
        <property>

<name>dfs.datanode.data.
        
          dir
        
        </name>

<value>
        
          file
        
        :/home/hadoop2/dfs/data</value>

</property>
      
      



<property>

<name>dfs.replication</name>

<value>
      
        2
      
      </value>

</property>



<property>

<name>dfs.webhdfs.enabled</name>

<value>
      
        true
      
      </value>

</property>



</configuration>
    

其中,标黄色的属性dfs.datanode.data.dir为block存储路径的设置选项。

    正常情况下,我们如上图中的设置自己设定的路径就可以了;但是,随着hdfs中的数据量越来越大,会出现datanode上block存储路径所在的挂载点空间不足的情况,本文中的情况就是 /home 挂载点的剩余空间即将不足了,但是在该datanode主机上,/ 挂载点还有非常多的剩余空间,我们希望将数据存储到 / 挂载点的目录下,防止 /home 挂载点被塞满。

   这样我们首先需要切换到root管理员用户下,因为 / 挂载点的拥有者是root,我们的hadoop2用户对该目录没有足够的权限。接着我们在该目录下创建一个存储block的文件目录:

      
        su
      
       -
      
        mkdir
      
       /hdfs/data
    

这样还不能直接设置路径,由于我们是用root用户创建的目录,该目录的拥有者和组群都是root,hadoop2用户没有足够权限,如果设置为datanode的block存储路径,将会抛出异常,导致datanode进程关闭,hadoop集群无法正常启动。我们需要更改/hdfs目录及其子目录的拥有者和组群为hadoop2,如下:

      cd /




      
        chown
      
       hadoop2:hadoop2 -R /hdfs
    

 chown命令用于修改所有者,其中,hadoop2:hadoop2为拥有者和组群,-R为迭代修改所有子目录和文件。

这样我们就可以修改hdfs-site.xml文件的datanode的属性为多个路径:

      <property>

<name>dfs.datanode.data.
      
        dir
      
      </name>


      
        <value>
        
          file
        
        :
        
          ///
        
        
          home/hadoop2/dfs/data,/hdfs/data
        
        
          </value>
        
      
      

</property>
    

路径之间只需用逗号 “ , ”分隔就可以了。

这样设置后,重新启动集群的dfs,bin/start-dfs.sh,通过jps命令查看集群的相关进程是否都正常启动:

      
        jps




      
      
        6935
      
      
         HQuorumPeer


      
      
        
          6115
        
        
           SecondaryNameNode 
        
      
      
        6423
      
      
         NodeManager


      
      
        
          6317
        
        
           ResourceManager 
        
      
      
        18005
      
      
         Bootstrap


      
      
        
          5837
        
        
           NameNode 
        
        
          5956
        
        
           DataNode 
        
      
      
        7143
      
      
         HRegionServer


      
      
        7005
      
      
         HMaster


      
      
        2351
      
       Jps
    

标黄色的为启动dfs后必须存在的进程,其他的进程为Hbase相关进程。这样设置启动以后,再往HDFS中写入数据时,产生的block数据块就会分别写入两个不同的目录中,均匀分布,不会出现一个路径的挂载空间不足的情况,如果再次占满,可以再次挂载新的磁盘,继续添加路径。

另外,不同的datanode中,block的路径属性可以设置为不相同,不影响集群的正常运行。

 

转载请注明出处: http://www.cnblogs.com/bxljoy/p/3863539.html  

hadoop 2.2.0的datanode中存储block的多个文件夹的负载均衡问题


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论