0%

hive数据跨集群迁移方法

使用csv为载体

  1. 从原集群中导出数据为csv。可以使用语句,也可以使用dbeaver之类的数据库连接软件
  2. 删除第一行表头,删除所有双引号
  3. 存储到新集群的hdfs中 hadoop dfs -put export.csv /user/username
  4. 新hive集群创建分区表,另外创建接受csv数据的临时表。csv文件无法直接导入分区表中,只能额外使用一张临时表过渡一下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    drop table db.tablename_csv;
    CREATE TABLE db.tablename_csv (
    columns
    )
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '$'
    LINES TERMINATED BY '\n'
    STORED AS TEXTFILE;

    load data inpath '/user/username/export.csv' into table db.tablename_csv;
    -- ALTER TABLE db.tablename DROP PARTITION (logdate <= 20230605);
  5. 在trino中将csv临时表数据导入分区表中
    1
    2
    insert into hive.db.tablename
    select * from hive.db.tablename_csv where logdate>'20240605';

使用hive export的方式

原集群上导出数据:

1
2
3
4
hadoop dfs -mkdir /user/username/db.table
hive>export table db.table to '/user/username/db.table';
hadoop dfs -get /user/username/db.tablename
tar -czvf ./tablename.tar.gz ./db.tablename/

export语句是可以指定分区的,但似乎只能指定一个分区。

新集群上导入数据:

1
2
hadoop dfs -put db.tablename /user/username
hive>import table db.tablename from '/user/username/db.tablename';