提高hadoop可靠性已经有很多方法了,我尝试着收集整理了5种,通过修改Hadoop默认配置就可以极大的提升Hadoop的可靠性,本文先列举了前3种:
(1)文件的删除和恢复
为了避免误删文件,hadoop提供了回收站功能,配置文件如下
core-site.xml
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
和windows的回收站一样,HDFS会在用户目录下创建一个.Trash目录,删除的文件会自动放入/user/用户名/.Trash下。fs.trash.interval参数的单位是分钟,回收站中的文件保留1天后,会被回收线程(Emptier)删除。当然,用户也可以手动删除。如果需要恢复数据的话,可以使用mv命令将文件移动回原有目录即可。
(2)复制份数的更改
hdfs默认保存的份数为3份,可以通过以下配置文件更改
hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
当前的复制份数可以通过以下命令查看到:
hadoop fsck -locations
也可以通过hdfs基本操作命令查看。
如:
[hadoop@test1 hadoop]$ hadoop dfs -ls /tmp
-rw-r--r-- 5 hadoop supergroup 1281 2016-01-05 18:24 /tmp/file3
-rw-r--r-- 1 hadoop supergroup 1281 2016-01-05 18:26 /tmp/file4
在/tmp下的file3 存储了5份,其他文件存储1份。注意: 这里的份数超过了datanode的个数会失败,通过日志可以体现
在生产环境修改了全局份数的配置文件后需要重启hadoop生效,也可以使用命令修改复制份数,如修改file4 为3份:
hadoop fs -setrep -R 3 /tmp/file4
也可以对指定目录修改,目录下所有文件的份数都会变化。这样可以实时修改复制份数
在上传时也可以指定复制份数,如上传file3时指定复制的份数为1份:
hadoop dfs -D dfs.replication=1 -copyFromLocal /etc/passwd /tmp/file3
(3)在线添加和移除datanode节点
由于各种原因经常需要调整datanode或yarn的数量,那就需要在线更改。首先看下在线增加datanode
首先为新增加的datanode建立ssh信任关系,然后修改配置文件slaves以便下次重启hadoop集群时能加载此datanode,并同步到新添加的datanode上。
启动独立的datanode方式如下:
hadoop-daemon.sh start datanode
yarn-daemon.sh start nodemanager
通过在新增节点执行jps 命令或者执行以下都可以查看。
yarn node -list
hadoop dfsadmin -report
还需要注意新添加节点之后不包含任何数据,hadoop需要进行数据平衡。默认每个节点的使用比例占相差10%,可以通过脚本设置平衡的比例
start-balancer.sh -threshold 80
也可以限制同步的带宽,这里以100M为例
hdfs dfsadmin -setBalancerBandwidth 104857600
另外值得一提的是hadoop能支持机架感知功能,可以利用预先设置好的机架位置确定多份数据的存储节点,提高可靠性
在线删除datanode操作其实利用了hadoop的Decommission状态。修改mapred-site.xml配置文件,增加
<property>
<name>dfs.hosts.exclude</name>
<value>/home/hadoop/hadoop/etc/hadoop/deny.list</value>
</property>
然后在deny.list写入要删除的datanode,每行一个。执行
hadoop dfsadmin -refreshNodes
刷新之后观察datanode状态,如果为Decommissioned即可停止datanode节点了。
本文分享自 智能工场AIWorkshop 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!