耗时一个月,整理出这份Hadoop吐血宝典 (8)

node01编辑slaves文件,并添加新增节点的主机,更改完后,slaves文件不需要分发到其他机器上面去

node01执行以下命令编辑slaves文件 : cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop vim slaves 添加一下内容: node01 node02 node03 node04

单独启动新增节点

node04服务器执行以下命令,启动datanode和nodemanager : cd /export/servers/hadoop-2.6.0-cdh5.14.0/ sbin/hadoop-daemon.sh start datanode sbin/yarn-daemon.sh start nodemanager

使用负载均衡命令,让数据均匀负载所有机器

node01执行以下命令 : cd /export/servers/hadoop-2.6.0-cdh5.14.0/ sbin/start-balancer.sh 10.2 退役旧数据

创建dfs.hosts.exclude配置文件

在namenod所在服务器的/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop目录下创建dfs.hosts.exclude文件,并添加需要退役的主机名称

node01执行以下命令 : cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop touch dfs.hosts.exclude vim dfs.hosts.exclude 添加以下内容: node04.hadoop.com 特别注意:该文件当中一定要写真正的主机名或者ip地址都行,不能写node04

编辑namenode所在机器的hdfs-site.xml

编辑namenode所在的机器的hdfs-site.xml配置文件,添加以下配置

cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop vim hdfs-site.xml #添加一下内容: <property> <name>dfs.hosts.exclude</name> <value>/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/dfs.hosts.exclude</value> </property>

刷新namenode,刷新resourceManager

在namenode所在的机器执行以下命令,刷新namenode,刷新resourceManager : hdfs dfsadmin -refreshNodes yarn rmadmin -refreshNodes

节点退役完成,停止该节点进程

等待退役节点状态为decommissioned(所有块已经复制完成),停止该节点及节点资源管理器。注意:如果副本数是3,服役的节点小于等于3,是不能退役成功的,需要修改副本数后才能退役。

node04执行以下命令,停止该节点进程 : cd /export/servers/hadoop-2.6.0-cdh5.14.0 sbin/hadoop-daemon.sh stop datanode sbin/yarn-daemon.sh stop nodemanager

从include文件中删除退役节点

namenode所在节点也就是node01执行以下命令删除退役节点 : cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop vim dfs.hosts 删除后的内容: 删除了node04 node01 node02 node03

node01执行一下命令刷新namenode,刷新resourceManager

hdfs dfsadmin -refreshNodes yarn rmadmin -refreshNodes

从namenode的slave文件中删除退役节点

namenode所在机器也就是node01执行以下命令从slaves文件中删除退役节点 : cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop vim slaves 删除后的内容: 删除了 node04 node01 node02 node03

如果数据负载不均衡,执行以下命令进行均衡负载

node01执行以下命令进行均衡负载 cd /export/servers/hadoop-2.6.0-cdh5.14.0/ sbin/start-balancer.sh 11. block块手动拼接成为完整数据

所有的数据都是以一个个的block块存储的,只要我们能够将文件的所有block块全部找出来,拼接到一起,又会成为一个完整的文件,接下来我们就来通过命令将文件进行拼接:

上传一个大于128M的文件到hdfs上面去

我们选择一个大于128M的文件上传到hdfs上面去,只有一个大于128M的文件才会有多个block块。

这里我们选择将我们的jdk安装包上传到hdfs上面去。

node01执行以下命令上传jdk安装包

cd /export/softwares/ hdfs dfs -put jdk-8u141-linux-x64.tar.gz /

web浏览器界面查看jdk的两个block块id

这里我们看到两个block块id分别为

1073742699和1073742700

那么我们就可以通过blockid将我们两个block块进行手动拼接了。

根据我们的配置文件找到block块所在的路径

根据我们hdfs-site.xml的配置,找到datanode所在的路径 <!-- 定义dataNode数据存储的节点位置,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用,进行分割 --> <property> <name>dfs.datanode.data.dir</name> <value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/datanodeDatas</value> </property> 进入到以下路径 : 此基础路径为 上述配置中value的路径 cd /export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/datanodeDatas/current/BP-557466926-192.168.52.100-1549868683602/current/finalized/subdir0/subdir3

执行block块的拼接

将不同的各个block块按照顺序进行拼接起来,成为一个完整的文件 cat blk_1073742699 >> jdk8u141.tar.gz cat blk_1073742700 >> jdk8u141.tar.gz 移动我们的jdk到/export路径,然后进行解压 mv jdk8u141.tar.gz /export/ cd /export/ tar -zxf jdk8u141.tar.gz 正常解压,没有问题,说明我们的程序按照block块存储没有问题 12. HDFS其他重要功能 1. 多个集群之间的数据拷贝

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgfxgp.html