hive数据迁移
停机方式(简单)
hive数据迁移:
hive有2种存储方式,存磁盘或者hdfs,2者操作一样,磁盘就scp过去。
hdfs就distcp过去。
hadoop distcp -Dmapreduce.job.hdfs-servers.token-renewal.exclude="xx.xx.xx.xx" -i -strategy dynamic -log /hdfs_migration/None/日志路径 -bandwidth 100 -m 100 hdfs://xx.xx.xx.xx:8020/user/hive/warehouse/xx.db/table_name/* hdfs://xx.xx.xx.xx2:8020/user/hive/warehouse/xx.db/table_name/*
这段代码的意思是
-Dmapreduce.job.hdfs-servers.token-renewal.exclude
设置HDFS服务器的配置,排除指定的IP地址以避免进行令牌续期。
-i
: 表示在复制过程中忽略已存在的文件,不覆盖目标目录中的文件。
-strategy dynamic
: 使用动态策略,根据输入数据量和集群资源动态调整任务的映射器数量,以优化复制性能。
-log /hdfs_migration/
指定存放操作日志的路径-bandwidth 100 -m 100 代表每个map传送的宽带是每秒100mb,-m指的是 启动100个map
hive表迁移:
hive有2种表方式,磁盘和关系型数据库,一般我们都是用mysql,2者操作一样。
磁盘scp,mysql的话将mysql的hive库和表同步过去。
同步方式很多,导出sql,用工具navicat,同步脚本。这里就不写具体方式, 比较简单。
如果原表有分区,那么需要在迁移后的表,迁移数据后,进行分区修复。
进入迁移后的hive后输入
msck repair table xxx
如果迁移失败,导致没有元数据,那么需要重新建表。
先查看原表的结构,在原来的hive里或者beeline中。
show create table xxx
然后通过脚本导出为不带边框的表sql
beeline --showHeader=false --outputformat=dsv -e "show create table 库名.表名" > /xx.sql
然后进入迁移后的表,迁移数据后,进入hive在将这个建表sql建立一下。