HDFS跨集群(Insecure To Secure)数据迁移实战

Posted DigNew

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDFS跨集群(Insecure To Secure)数据迁移实战相关的知识,希望对你有一定的参考价值。

背景

最近新搭建了一套CDH集群B(启用了Kerberos),需要将原集群A中的数据迁移到集群B中。

尝试

首先想到的是通过distcp命令在两个集群中进行数据传输,二话不说,执行命令:

hadoop distcp  hdfs://hadoop1:8020/user/hive/warehouse/*  /user/hive/warehouse/

NO,出现异常:

...
Caused by: java.io.IOException: Server asks us to fall back to SIMPLE auth, but this client is configured to only allow secure connections.
   at org.apache.hadoop.ipc.Client$Connection.setupiostreams(Client.java:786)
   at org.apache.hadoop.ipc.Client$Connection.access$3000(Client.java:396)
   at org.apache.hadoop.ipc.Client.getConnection(Client.java:1557)
   at org.apache.hadoop.ipc.Client.call(Client.java:1480)
   ... 31 more

看来如果两个集群都没有做安全认证的话,可以直接通过distcp进行数据迁移。
但是现在其中一个集群(集群B)启用了Kerberos,,直接用distcp命令进行数据迁移出现问题。那该怎么办呢?

漫长的查资料过程。。。

解决

终于,在Cloudera的官网找到相关信息,( ̄▽ ̄)/

原来可以通过设置参数实现
在集群B(启用Kerberos)的HDFS的core-site.xml配置文件中进行如下配置:

<property> 
 <name>ipc.client.fallback-to-simple-auth-allowed</name>
 <value>true</value>
</property>

额,需要配置文件,可不可以不修改配置文件呢?

答案当然是可以的,可以在distcp命令中加入上述配置即可。操作如下:

配置host

在集群B中所有节点上配置集群A所有机器的host

vim /etc/hosts

192.168.26.20 hadoop1
192.168.26.21 hadoop2
192.168.26.22 hadoop3
192.168.26.23 hadoop4
192.168.26.24 hadoop5
192.168.26.25 hadoop6

执行数据迁移

在集群B(启用Kerberos)其中一个节点上执行:

hadoop distcp -D ipc.client.fallback-to-simple-auth-allowed=true -m 30  webhdfs://hadoop1:50070/user/hive/warehouse/*  /user/hive/warehouse/

执行成功( ̄▽ ̄)~*

再说说distcp常用参数:

  • -i:忽略失败。这个选项会比默认情况提供关于拷贝的更精确的统计, 同时它还将保留失败拷贝操作的日志,这些日志信息可以用于调试。最后,如果一个map失败了,但并没完成所有分块任务的尝试,这不会导致整个作业的失败。

  • -log:记录日志到logdir。

  • -m:同时拷贝的最大数据,指定拷贝数据时的map的数目。并不是map数越多越吞吐量越大。

  • -overwrite:覆盖目标。如果一个map失败并且没有使用-i选项,不仅仅那些拷贝失败的文件,这个分块任务中的所有文件都会被重新拷贝。 所以这就是为什么要使用-i参数。

  • -update:如果源和目标的大小不一样则进行覆盖。

  • *-delete:删除已经存在的目标文件,不会删除源文件。这个删除是通过FS Shell实现的。所以如果垃圾回收机制启动的话,删除的目标文件会进入trash。

  • -f:使用<urllist_uri>作为文源文件列表。




以上是关于HDFS跨集群(Insecure To Secure)数据迁移实战的主要内容,如果未能解决你的问题,请参考以下文章

HDFS跨集群数据合并方案之ViewFileSystem

USDP使用笔记打通双集群HDFS实现跨nameservice访问

USDP使用笔记打通双集群HDFS实现跨nameservice访问

kylin跨集群配置实现读写分离

一篇文章彻底掌握 HDFS 跨集群跨版本数据同步工具 hadoop disctp

hdfs 机架感知