场景:两个Hadoop平台集群之间Hive表迁移。apache
基本思路:Hive表元数据和文件数据export到HDFS文件,经过Distcp将HDFS迁移到另外一个集群的HDFS文件,再经过import在新Hive中建表;tcp
此步骤在原平台执行将Hive表元数据和文件数据export到平台HDFS文件oop
1) 得到hive表的元数据信息blog
ret=$(hive -e 'show tables;' | grep -v _es | grep -v _hb | grep -v importinfo)hadoop
ret中存放hive全部表的表名。table
2) 导出hive表元数据和hive管理hdfs数据import
hive -e "export table $tem to '/tmp/hive-export/$tem';"集群
执行此命令后能够看到hdfs输出目录下有元数据和文件数据meta
查看hadoop fs -cat /tmp/hive-export/[table_name]/_metadata元文件map
用distcp从原平台将/tmp/hive-export/下数据迁移到新平台。
hadoop distcp hdfs://10.0.11.205:8020/tmp/hive-export hdfs://10.0.11.91:8020/tmp
执行成功后新平台tmp目录下会多出拷贝的数据文件。
1) 得到hive表名
Hive表名为/tmp/hive-export/下的路径名
使用hadoop fs -ls得到全部的表名
2) 执行导入命令
hive -e "import table [table_name] from '/tmp/hive-export/[table_name]’;"
能够看到hive上新生成了表,自此跨平台Hive表迁移完成。
在原平台上使用org.apache.hadoop.hbase.mapreduce.Export命令导出hbase数据到原平台的HDFS上
hbase org.apache.hadoop.hbase.mapreduce.Export [table_name] [hdfs_directory]
此步骤将导出的数据文件拷贝到新集群
hadoop distcp hdfs://10.0.11.205:8020[hdfs_directory] hdfs://10.0.11.91:8020/tmp
hbase org.apache.hadoop.hbase.mapreduce.Import [table_name] [hdfs_directory]
注:1)使用全路径,不能使用相对路径
2)在执行import以前,须要将hbase表在新集群建好。