照例先上官网地址
https://hadoop.apache.org/docs/r3.2.2/hadoop-distcp/DistCp.htmlz
再上百度地址
hadoop之 distcp(分布式拷贝) - 张冲andy - 博客园
遇到的问题
hadoop集群传输(kerberos、非kerberos、kerberos与非kerbers)_大D饲养员的博客-CSDN博客_kerberos集群distcphadoop集群传输(kerberos、非kerberos、kerberos与非kerbers)_大D饲养员的博客-CSDN博客_kerberos集群distcp
上面都是学习的属于有没有都可以的
这篇属于干货。。
配置两个Hadoop集群Kerberos认证跨域互信 - XIAO的博客 - 博客园
正题:
目前CDH集群都kerberos认证,然后又搭建了一套CDP集群,同时也认证了kerberos。
那么需要我在cdh集群上能够访问cdp集群。运维根据上篇文章直接配好了。。
注意事项如果cdp集群开启了ha,hdfs dfs -ls / 只能访问活动点
如图上述在cdh的集群上已经能够访问cdp的了。
开始distcp之旅 复制cdh的hive数据到 cdp上。
先复制一个表。
cdh上已经有odsiadata.label_dict表了, 我先在cdp上建表
cdh上的hdfs目录
多次试验...执行命令
hadoop distcp /user/hive/warehouse/odsiadata.db/label_dict/ hdfs://cdp-node02:8020/user/hive/warehouse/odsiadata.db/
成功
进入cdp查看表
接着需要复制库
hadoop distcp /user/hive/warehouse/odsiadata.db/ hdfs://cdp-node02:8020/user/hive/warehouse/
覆盖和更新
hadoop distcp /user/devuser/distcp/cc.txt hdfs://cdp-node02:8020/user/hive/warehouse/distcp/
将cc.txt 从cdh复制到cdp后
然后修改cc.txt再上传到cdh。
hadoop distcp /user/devuser/distcp/cc.txt hdfs://cdp-node02:8020/user/hive/warehouse/distcp/
发现默认是不覆盖的 hadoop distcp --help
-append Reuse existing data in target files and append new data to them if possible
-delete Delete from target, files missing in source
-overwrite Choose to overwrite target files
-update Update target, copying only missing files or directories
主要是这几种再加一种啥参数不加的。
cdh上
cdp上
注意cdh的和cdp的10 20 内容不一样
cdp
hdfs dfs -put 1 /user/hive/warehouse/distcp/overwrite
hdfs dfs -put 10 /user/hive/warehouse/distcp/overwrite
hdfs dfs -put 20 /user/hive/warehouse/distcp/overwrite
hdfs dfs -put 1 /user/hive/warehouse/distcp/update
hdfs dfs -put 10 /user/hive/warehouse/distcp/update
hdfs dfs -put 20 /user/hive/warehouse/distcp/update
hdfs dfs -put 1 /user/hive/warehouse/distcp/append
hdfs dfs -put 10 /user/hive/warehouse/distcp/append
hdfs dfs -put 20 /user/hive/warehouse/distcp/append
hdfs dfs -put 1 /user/hive/warehouse/distcp/delete
hdfs dfs -put 10 /user/hive/warehouse/distcp/delete
hdfs dfs -put 20 /user/hive/warehouse/distcp/delete
hdfs dfs -put 1 /user/hive/warehouse/distcp/
hdfs dfs -put 10 /user/hive/warehouse/distcp/
hdfs dfs -put 20 /user/hive/warehouse/distcp/
cdh
hdfs dfs -put 1 /user/devuser/distcp/first
hdfs dfs -put 2 /user/devuser/distcp/first
hdfs dfs -put 10 /user/devuser/distcp/second
hdfs dfs -put 20 /user/devuser/distcp/second
这里我简直是日了狗,官网说明就不对
hadoop distcp /user/devuser/distcp/first /user/devuser/distcp/second hdfs://cdp-node02:8020/user/hive/warehouse/distcp
这个就是把first文件夹和second文件给复制过来放到 cdp的/user/hive/warehouse/distcp目录下。
实际上你只想移动文件 1 2 10 20 到cdp的文件夹 命令如下
hadoop distcp /user/devuser/distcp/first/* /user/devuser/distcp/second/* hdfs://cdp-node02:8020/user/hive/warehouse/distcp
复制了1个,忽略3个
hadoop distcp -overwrite /user/devuser/distcp/first/* /user/devuser/distcp/second/* hdfs://cdp-node02:8020/user/hive/warehouse/distcp
复制了4个。。。
hadoop distcp -update/user/devuser/distcp/first/* /user/devuser/distcp/second/* hdfs://cdp-node02:8020/user/hive/warehouse/distcp
复制了3个忽略了1个 忽略的那个是1因为两个(内容size)一模一样
4.-update -append
hadoop distcp -update -append /user/devuser/distcp/first/* /user/devuser/distcp/second/* hdfs://cdp-node02:8020/user/hive/warehouse/distcp/append
复制了3个 忽略了1个 和update一样,区别是 字节copy了15 而update字节copy了20,应该就是10文件cdh里的是1111 1111 而cdp里的是1111 ,update全量更新, -update -append 追加更新。
5 -update -delete
hadoop distcp -update -delete /user/devuser/distcp/first/* /user/devuser/distcp/second/* hdfs://cdp-node02:8020/user/hive/warehouse/distcp/delete
6.-overwrite -delete
有点懒了... 不研究了
其实我觉得用个overwrite 不管三七二十一 全部覆盖。
或者啥也不加的 只复制没有的就行。