因为有时候需要定时进行跨集群的数据迁移,所以需要进行跨集群传数据。这里采用distcp 指令进行传数据。但是这个指令只能指定已经活跃的NAMENODE。当出现主节点切换后会出现错误。所以采用先进行判断,后续进行传数据的操作。
#旧集群
active_node=''
NameNode1_new='192.168.0.1'
NameNode2_new='192.168.0.2'
if hadoop fs -test -e hdfs://${NameNode1_new}:8020/ ; then
active_node=$NameNode1_new
elif hadoop fs -test -e hdfs://${NameNode2_new}:8020/ ; then
active_node=$NameNode2_new
fi
#输出hadoop现有执行任务的节点
echo "Active Dev Name node : $active_node"
#新集群
active_node=''
NameNode1_new='192.168.0.3'
NameNode2_new='192.168.0.4'
if hadoop fs -test -e hdfs://${NameNode1_new}:8020/ ; then
active_node=$NameNode1_new
elif hadoop fs -test -e hdfs://${NameNode2_new}:8020/ ; then
active_node=$NameNode2_new
fi
#输出hadoop现有执行任务的节点
echo "Active Dev Name node : $active_node"
hadoop distcp -overwrite hdfs://192.168.0.1:8020/tmp/T_PUBLIC_OPINIONS_INFO hdfs://192.168.0.4/tmp/T_PUBLIC_OPINIONS_INFO
hadoop distcp -overwrite hdfs://192.168.0.2:8020/tmp/T_PT_INFO_TEST hdfs://192.168.0.4/tmp/T_PT_INFO_TEST