集群间 Hive 数据 迁移 问题

本文介绍如何使用Hive从一个集群导出数据到本地,并上传到另一个集群的HDFS上,最后导入到新的Hive表中。具体步骤包括:1) 使用特定语法从Hive表导出数据到本地目录;2) 将本地文件上传到目标HDFS路径;3) 调整字段分隔符并导入数据到Hive表。
       1、 从hive中导出数据至本地目录
              insert overwrite local directory '/export/tmp' select * from test1 where create_time = '2013-11-25'; 
             列数据之间默认以^A隔开。
        2、将本地数据上传另一个集群的hdfs
             /usr/local/hadoop-2.2.0/bin/hdfs  dfs -put  /export/tmp   hdfs://host:port/tmp    
        3、将hdfs中的数据文件导入hive表中
             hive -e "load data inpath '/tmp' into table test1;"
             但某些表创建时,设置的以 '\t' 分割数据,在读取不到 '\t' 时,会将整行数据都导入第一列。
           
         如果是hive-0.11.0版本,可以这样导出:
                hive> insert overwrite local directory '/export/tmp'
                hive> row format delimited
                hive> fields terminated by '\t'
                hive> select * from test1 where create_time = '2013-11-25';

         如果是低版本的hive,只好将导出的数据文件中的^A,替换为'\t':
               sed -i 's/^A/\t/g' filename
         同时需要将隐藏的.filename.crc校验文件删除掉,不然在上传的过程中,Hadoop将通过FSInputChecker判断需要上传的文件是否存在进行校验的crc文件,即.filename.crc,如果存在crc文件,将会对其内容一致性进行校验,如果校验 失败,会报fs.FSInputChecker: Found checksum error,停止上传该文件,最终导致整个MR任务无法执行。
### Hive 数据和作业迁移从 MRS 到 CDP 集群的步骤 Hive 是 Hadoop 生态系统中用于数据仓库的重要工具,支持类 SQL 查询。将 Hive 数据和作业从华为云 MRS(MapReduce Service)集群迁移到 CDP(Cloudera Data Platform)集群,需要完成元数据、表结构、实际数据以及相关作业的迁移。以下是详细的迁移流程: #### 1. Hive数据迁移 Hive 的元数据存储在外部数据库中(如 MySQL 或 PostgreSQL)。MRS 和 CDP 都支持自定义配置该数据库。 - **导出 MRS 中的 Hive数据库** 使用 `mysqldump` 命令将 MRS 集群中的 Hive数据导出: ```bash mysqldump -u <username> -p hive_metastore > hive_metastore.sql ``` - **导入到 CDP 集群Hive数据库** 将导出的 SQL 文件导入目标 CDP 集群使用的元数据库实例: ```bash mysql -u <username> -p hive_metastore < hive_metastore.sql ``` - **验证元数据一致性** 检查 Hive 表结构、分区信息是否完整无误,并确保 CDP 集群Hive Metastore 配置正确[^4]。 #### 2. Hive 数据迁移 Hive 表的数据通常存储在 HDFS 或对象存储(如 S3、OBS)上。MRS 使用 OBS 作为底层存储,CDP 支持多种存储后端。 - **使用 DistCp 迁移数据** 如果 MRS 和 CDP 集群处于同一网络环境且可以互通,可以使用 Hadoop 的 `distcp` 工具进行高效数据复制: ```bash hadoop distcp hdfs://mrs-cluster/path/to/hive/tables hdfs://cdp-cluster/path/to/hive/tables ``` - **使用对象存储跨区域复制** 若 MRS 使用的是 OBS,CDP 可以通过兼容的 S3 接口访问 OBS 数据,或者先将数据拷贝至本地 HDFS/S3 存储后再处理。 - **更新 Hive 表路径** 确保 Hive 表指向新的存储位置。可使用 `ALTER TABLE` 修改表路径: ```sql ALTER TABLE table_name SET LOCATION 'hdfs://cdp-cluster/path/to/table'; ``` #### 3. Hive 作业迁移 HiveQL 脚本或 Beeline 脚本可以在 CDP 上直接运行,但需注意版本差异。 - **检查 HiveQL 兼容性** MRS 通常基于 Apache Hive 或 CDH Hive,而 CDP 使用 Hive on Tez 或 Hive LLAP。建议测试关键查询语句是否兼容。 - **调整执行引擎** CDP 支持 Tez、Spark 等执行引擎,默认为 Tez。可通过以下方式切换执行引擎: ```sql SET hive.execution.engine=tez; ``` - **优化参数设置** 根据 CDP 集群资源配置适当调整内存、并发等参数,例如: ```sql SET mapreduce.map.memory.mb=4096; SET mapreduce.reduce.memory.mb=8192; ``` #### 4. 权限与安全迁移 如果 MRS 使用 Ranger 进行权限管理,则 CDP 也支持 Ranger,可同步策略至 CDP 的 Ranger 服务。 - **导出 Ranger 策略** 在 MRS 的 Ranger 管理界面中导出 Hive 相关策略。 - **导入至 CDP 的 Ranger** 登录 CDP 的 Ranger UI,创建对应的服务并导入策略文件。 - **验证权限** 测试用户能否正常访问 Hive 表,确保 ACL 控制符合预期[^1]。 #### 5. 自动化与调度任务迁移 若 MRS 中使用 Oozie 或 Airflow 调度 Hive 作业,需将这些调度器配置迁移至 CDP。 - **Oozie 作业迁移** 将工作流 XML 文件上传至 CDP 的 HDFS 并注册新 Coordinator。 - **Airflow DAGs** 将 DAG 文件部署至 CDP 环境下的 Airflow 实例,并测试连接性和执行状态。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值