您的位置:首页 > 运维架构

hadoop的集群copy

2014-08-18 10:30 302 查看
hadoop不同版本之间的集群复制。

1.基础

使用hadoop distcp 来进行集群间的数据复制。

2.实战

如果两个集群之间版本不一样,应该这样来复制。

hadoop distcp hftp://source/source hdfs://dest:9000/source

为啥是hftp呢,因为不同版本rpc不太一样。

如果一个集群闲置,尽量使用它的MR能力。有一个要注意,在这个集群里

目标nn尽量采用ip地址。为啥,你试试就知道,用hostname多麻烦了。

还遇到这个错,引以为鉴。

ERROR org.apache.hadoop.mapred.JobHistory: Failed creating job history log file for job job_201308261457_000
5
java.net.UnknownHostException: unknown host: namenode2
at org.apache.hadoop.ipc.Client$Connection.<init>(Client.java:216)
at org.apache.hadoop.ipc.Client.getConnection(Client.java:1154)
at org.apache.hadoop.ipc.Client.call(Client.java:1010)
at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:224)
at $Proxy5.getProtocolVersion(Unknown Source)
at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:364)
at org.apache.hadoop.hdfs.DFSClient.createRPCNamenode(DFSClient.java:106)
at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:208)
at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:175)
at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:89)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1310)


如果文件过大,过多,不建议直接复制,建议采用脚本文件遍历目录,导出单个复制小目录的批命令。

python脚本如下(临时脚本,未优化,请保函)

#!/usr/bin/env python

import sys, os, time, atexit, string
from signal import SIGTERM
def list_dir(exec_cmd,s_dir):
tmp=[]
tmps = os.popen(exec_cmd +s_dir).read().strip().split("\n")
for tmp_sline in tmps  :
if "-" in tmp_sline:
sitem=tmp_sline.split(" ")
tmp.append(sitem)
return tmp

dir="/data/dw/"
cmd="/opt/modules/hadoop/hadoop-0.20.203.0/bin/hadoop fs -ls hdfs://192.168.1.99:9000"#目标集群
cmd2="/opt/modules/hadoop/hadoop-0.20.203.0/bin/hadoop fs -ls hdfs://source:9000"#源集群
lines = list_dir(cmd2,dir)#sort
for line in lines  :
if "-" in line:
slines= list_dir(cmd2,line[-1])#year
print "/opt/modules/hadoop/hadoop-0.20.203.0/bin/hadoop fs -mkdir hdfs://192.168.1.99:9000%s"%line[-1].replace("data/","data/
sbak/") #复制前建上级目录
for sline in slines  :
if "-" in sline:
print "/opt/modules/hadoop/hadoop-0.20.203.0/bin/hadoop  distcp   hftp://source:50070%s hdfs://192.168.1.
99:9000%s"%(sline[-1],line[-1].replace("data/","data/sbak/"))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: