适用模块

    经常有音乐用户需要读hz8的数据,由于跨集群元数据是不共享的,所以除非授权后加入hz8的项目。不然只能跨集群拷贝数据塞入hive表使用。

    具体说明

    大体流程是在目的端项目建表结构相同的表,从从离线开发执行distcp的脚本。把数据拷到目标集群项目的表的location。然后msck修复分区。查询数据。

    使用示例

    1.首先要在目的端建相同格式的表。注意这里表结构和存储格式一定要相同(结构包括分区),否则无法查询文件数据。

    2.然后要加入项目,例如要从hz8-hz11.需要加入源端hz8的项目,拥有离线开发运行任务权限。然后才能建script节点的任务(实在没有源端项目权限不方便,目的端执行也可。注意路径不要搞错)

    3.参考如下demo,更新脚本里的信息,注意这里用猛犸节点不用认证。直接copy脚本内容,替换目标集群NN信息和源端hdfs文件地址,和目的端表location地址即可。在猛犸开发模式运行该脚本。

    demo: https://study.sf.163.com/documents/read/service_support/dsc-p-a-0135

    注:音乐NN hadoop3897.jd.163.org 和hadoop3898.jd.163.org

    由于音乐router的原因,如果往音乐copy数据,也可以采用如下简单的脚本和传参 INFO-如何跨集群获取hive数据 - 图1 INFO-如何跨集群获取hive数据 - 图2

    path=$1
    echo "${path}"
    hadoop distcp -D ipc.client.fallback-to-simple-auth-allowed=true -D mapred.job.queue.name=root.lovemusic.default hdfs://hz-cluster8/user/lovemusic/hive_db/lovemusic.db/"${path}"/* hdfs://hadoop3897.jd.163.org:8020/user/most/hive_db/music_most.db/"${path}"

    4.当确认文件移动到目的集群后。检查hdfs文件是否copy成功了。一般都为分区表。尤其要核对目的端hdfs目录的格式符不符合分区格式。符合的话,此时目的端的表+文件都ok。此时执行sql

    msck repair table 库.表

    这里表就同步了分区元数据,然后就可以嗨皮的使用数据了。

    作者:刘思伟