`

hadoop distcp

阅读更多
hadoop distcp

使用:distcp  src dst
1.要求两个集群有相同的用户名,且此用户的密码也相同
2.配置/etc/hosts,使两个集群的每个结点都包含所有其它机器的主机名到ip的对应信息
3.如果两个集群用户不一样,则可以在一个集群上新建用户,与创建第一个hadoop用户一样:
(1)创建用户
举例:groupadd hadoop
useradd -g hdoop hadoop
passwd   hadoop
(2)配置ssh无密码登陆
ssh-keygen -t rsa,然后一直回车
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
chmod 644 authorized_keys

(3)安装配置与第一个hadoop用户相同的hadoop包
4. 拷贝
例子:
1.两个集群是相同的版本(也可以用第二种方式)
hadoop distcp  hdfs://nn1:9000/path1 hdfs://nn2:54310/path2
2.两个集群是不同hadoop版本
hadoop distcp  hftp://nn1:50070/path1 hdfs://nn2:54310/path2


其中9000为源集群的hdfs端口,50070为源集群的web监控端口,54310为目标集群的hdfs端口。

5. 注意
源src需要用户有读权限,而dst要求用户有写权限
nn1:9000这个地址必须和fs.default.name的配置一样,如果一个是主机名一个是IP地址,这样也可能不行

通过distcp可以实现在两个hadoop集群中同步数据,当两个hadoop集群的版本相同的时候比较简单,直接执行就可以了,比如:
hadoop distcp hdfs://192.168.0.138:9000/sunwg hdfs://192.168.0.139:9000/sunwg
执行时,会在启动mapreduce进行文件的拷贝,最后138上的sunwg下的文件全部会拷贝到139下面的sunwg下。
如果两个hadoop集群的hadoop版本不一致,就稍微会麻烦些。因为不同版本的hadoop是没有办法通过hdfs的协议直接访问的,此时需要采用hftp的方式。hftp是hadoop的一种只读的文件访问协议,没有办法进行更新。所以此时,如果想把0.19上的数据同步到0.20上,那么此时distcp要在对0.20有写权限的机器上发起;反之,要在0.19的机器上启动。比如:
hadoop distcp hftp://192.168.0.159:50070/sunwg hdfs://192.168.0.128:9000/sunwg/test01
这样就可以跨hadoop的版本来拷贝数据。

另,我测试是在虚拟机上进行的,所有的虚拟机都是一台虚拟机复制得到的,所有的虚拟机的hostname都是一样的,所以昨天测试的时候一直有问题,通过hftp访问具体文件的时候有下面的错误:
[hadoop@hadoop01 ~]$ hadoop fs -cat hftp://192.168.0.159:50070/sunwg/1.dat
Invalid input[hadoop@hadoop01 ~]$
一直报的Invalid input。这样的话使用distcp同步数据也是有问题的。后来修改了hostname,两台机器的名字不一样,错误就消失了。
0
0
分享到:
评论

相关推荐

    Flink实现 Hadoop distcp

    Flink实现 Hadoop distcp

    hadoop使用distcp问题解决

    hadoop使用distcp问题解决 然后用distcp从1.0.3的集群拷数据到2.0.1的集群中。 遇到问题处理

    hadoop-distcp-2.6.0-sources.jar

    java运行依赖jar包

    hadoop-distcp-2.6.0.jar

    distcp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具。 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。 它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中部分文件的拷贝...

    hadoop中文乱码问题

    【Hadoop中文乱码问题详解】 在大数据处理领域,Hadoop是一个不可或缺的开源框架,它提供了分布式存储(HDFS)和分布式计算(MapReduce)的能力。然而,在处理包含中文字符的数据时,用户可能会遇到中文乱码的问题...

Global site tag (gtag.js) - Google Analytics