zoukankan      html  css  js  c++  java
  • Hive全库数据迁移方案

    Hive的迁移涉及两个技术点:

    1. 仅迁移元数据(参考网易云提出的思路,https://sq.163yun.com/blog/article/173577620075286528);
    2. 元数据及Hive数据全量迁移。

    考虑到多数场景是迁移整个Hive数据库,该篇文章只介绍迁移的第二种,即元数据及Hive数据全量迁移。

    这里使用的export/import这两个指令
    主要的流程:

    1. 将旧集群的hive数据导出至其hdfs中
    2. 将旧集群hdfs中的导出数据下载到本地中
    3. 将本地的导出数据上传至新的集群hdfs中
    4. 将新集群hdfs中的数据导入至新集群中的hive中

    ● 将旧集群的hive数据导出至其hdfs中

    数据导出

    设置hive启动默认数据库

    在家目录中新建.hiverc文件,配置默认的数据库(即你需要导出的数据库)

    vim ~/.hiverc
    use export_db;

    在hdfs上创建导出目录

    hdfs dfs -mkdir -p /tmp/export_db_export

    导出旧集群的hive数据

    生成导出脚本

    hive -e "show tables;" | awk  '{printf "export table %s to |/tmp/export_db_export/%s|;\n",$1,$1}' | sed "s/|/'/g" | grep -v tab_name > ~/export.hql
    

    导出数据

    hive -f ~/export.hql

    ● 将导出的数据下载到本地

    数据中转

    下载数据

    hdfs dfs -get /tmp/export_db_export ~/export_db

    ● 将本地的导出数据上传至新的集群hdfs中

    数据迁移

    前提:已将导出的数据目录迁移至新集群

    上传数据

    hdfs dfs -put ~/export_db /tmp/export_db_export
    注:这里的/tmp/export_db_export需要提前创建

    ● 将新集群hdfs中的数据导入至新集群中的hive中

    数据导入

    生成导入脚本

    我们将之前的export.hql脚本修改下就可以当做我们的import.hql脚本

    cp ~/export.sql ~/import.sql
    sed -i 's/export /import /g' ~/import.sql
    sed -i 's/ to / from /g' ~/import.sql

    导入数据

    这里也需要设置hive的默认数据库

    vim ~/.hiverc
    use import_db;

    导入数据

    hive -f ~/import.sql

    至此Hive数据的迁移就完成.

    在部分有安全控制的集群环境下,hive连接被禁用了。这时候需要使用beeline连接hive并进行数据迁移,下面给大家介绍下如何使用beeline来进行数据迁移

    使用beeline进行导出脚本的生成

    beeline -u jdbc:hive2://cdh01:10000 -e "use export_db;show tables;"| awk '{printf "export table %s to |/tmp/export_db_export/%s|;\n",$2,$2}' | sed "s/|/'/g"|sed '1,3d'|sed '$d' > ~/export.hql

    执行导出脚本

    sed -i '1i use export_db;' ~/export.hql
    beeline -u jdbc:hive2://cdh01:10000 -n hdfs -f ~/export.hql
    

    这里使用distcp来进行hdfs文件在新集群的上传

    hadoop distcp hdfs://cdh01:8020/tmp/export_db_export/ hdfs://cdh02:8020/tmp/export_db_export

    新的集群hdfs目录需要提前创建

    修改import.hql

    cp ~/export.hql ~/import.hql
    sed -i 's/export /import /g' ~/import.hql
    sed -i 's/ to / from /g' ~/import.hql
    sed -i '1d' ~/import.hql
    sed -i '1i use import_db;' ~/import.hql

    导入数据

    create database import_db;
    beeline -u jdbc:hive2://cdh02:10000 -n hdfs -f ~/import.hql

    至此数据迁移完成

    所有失去的,都会以另一种方式回到你身边。
  • 相关阅读:
    C语言之指针基础概念
    Android之常用功能代码
    Android之ImageButton控件基础操作
    BZOJ1079或洛谷2476 [SCOI2008]着色方案
    HDOJ2870 Largest Submatrix
    BZOJ1855或洛谷2569 [SCOI2010]股票交易
    BZOJ1233 [Usaco2009Open]干草堆tower
    HDOJ4261 Estimation
    POJ3254或洛谷1879 Corn Fields
    POJ1037 A Decorative Fence
  • 原文地址:https://www.cnblogs.com/daemonyue/p/12966035.html
Copyright © 2011-2022 走看看