場景:兩個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表在新集羣建好。