大数据迁移:
所谓的大数据迁移就是把某个节点上的数据(或者几个节点上的数据)分别拷贝到不同数据节点上的过程.
就像我在的公司就是这样做的,在CDHhadoop的版本中,一个命令就能完成上面的大数据迁移的所有事情.
例如:
现有的机器:
hadoop1(n1:namenode)
hadoop2(d1:datanode)
hadoop3(d2:datanode)
hadoop4(d3:datanode)
新增的机器:
hadoop5(d4:datanode)
hadoop6(d5:datanode)
hadoop7(d6:datanode)
这里我们要把现有的机器某台机器(这里机器名:hadoop2,因为这几台机器的数据是一样的)上的数据分别拷贝到新增的机器中(hadoop5,hadoop6,hadoop7)中.
举例:
现有的机器hadoop1中的数据文件(单位:byte):
199884219068 /hive/warehouse/data1
135503186196 /hive/warehouse/data2
146310003399 /hive/warehouse/data3
456891836274 /hive/warehouse/data4
123959449467 /hive/warehouse/data5
数据迁移:
hadoop distcp hdfs://hadoop1:8020$dir hdfs://hadoop5:8020/hive/warehouse/
注意:这里为什么我只拷贝到hadoop5中呐?是因为distcp这个命令会自动把数据拷贝到新增的不同机器上.
自己总结:(在拷贝过程中,如果数据文件名称已经存在,则distcp命令不会覆盖原有文件,就会跳过该文件的拷贝.)
在这里我写了一个简单的脚本(distcp.sh),来进行数据迁移,脚本内容如下:
#!/bin/bash
load_src=('/hive/warehouse/data1' '/hive/warehouse/data2' '/hive/warehouse/data3' '/hive/warehouse/data4' '/hive/warehouse/data5')
for src in "${load_src[@]}"
do
hadoop distcp hdfs://hadoop1:8020$src hdfs://hadoop5:8020/hive/warehouse/ >>/hadoop_tmp/log/distcp.log 2>>&1
done
注意:在运行脚本中的时候,要关注一下hadoop集群状况,以免数据量太大,导致集群宕机.还有日志(/hadoop_tmp/log/distcp.log)
可以用一下命令查看集群状况:
查看集群使用状况或其他信息:
hadoop dfsadmin -report
查看各个节点的状态(status):
查看JobTracker(status)
hadoop mrhaadmin -getServiceState jt1
查看NameNode(status)
hdfs haadmin -getServiceState nn1
注意:在写脚本的时候,注意拷贝机器的目录,例如:hdfs://hadoop5:8020/hive/warehouse/这个目录,
因为在源目录中,比如想拷贝某个文件夹下的名称,就要想对应的在目标目录上填上这个目录,不然就只会拷贝在/hive/warehouse/中.
举例:
hadoop2下的/hive/warehouse/data1是一个文件夹,我想拷贝下面的文件file1.
distcp1.sh脚本内容:
#!/bin/bash
load_src=('/hive/warehouse/data1/file1' '/hive/warehouse/data1/file2')
for src in "${load_src[@]}"
do
####截取不同文件夹的名称
tmp_src=${src:16:5}
####截取结果:data1
hadoop distcp hdfs://hadoop1:8020$src hdfs://hadoop5:8020/hive/warehouse/$tmp_src/ >>/hadoop_tmp/log/distcp.log 2>>&1
done
注意:还是注意查看集群状态,还有日志(/hadoop_tmp/log/distcp.log).
Name:Xr
Date:2014-05-11 21:01