1.hbase的导入与导出
命令:
//导出 hbase org.apache.hadoop.hbase.mapreduce.Export test_table /opt/hbase-data-back/test_table_back //增量导出 //这里的1是版本 //后面两个是时间 hbase org.apache.hadoop.hbase.mapreduce.Export harve_plate /hdfs/data_back/harve_plate 1 1483200000000 1495123200000
说明:上面都是例子,以增量导入为例
首先查看表的版本,命令:desc '表名' 就可以查看表的版本
后面的时间是转化过去的:2017-05-19 00:00:00 1495123200000
如果想增量导入。自己转化好时间即可
2.查看文件:
注:上面的路径并不是我最初认为的系统目录,而是hdfs内部的目录。因此在系统中是找不到此文件的。可以通过hdfs的命令查看文件:
hadoop fs -ls /opt/hbase-data-back/test_table_back
以我的操作为例。查看导出数据
3) 获取hdfs文件到系统
将hdfs中的/opt/hbase-data-back/test_table_back,复制到系统的/opt/hbase-data-back/test_table_back中:
hadoop fs -get /opt/hbase-data-back/test_table_back /opt/hbase-data-back/test_table_back
说明:这个命令的作用是将导出的文件复制一份放到普通目录下面
4) 将备份文件添加到hdfs中
将上面的目录复制到新的机器中,通过put将文件上传到hdfs中去。
hadoop dfs -put localFile hdfsFile
如:把系统的/opt/hbase-data-back/test_table_back上传到hdfs的/opt/hbase-data-back/test_table_back2下。
说明:这个就是将上面(第3步的)普通本文件放到hdfs上。使用的很少
5) 导入:
先创建一张一样的表:
hbase org.apache.hadoop.hbase.mapreduce.Import test_table_back /opt/hbase-data-back/test_table_back
网上有人说要这么写(指定从hdfs获取数据):hdfs://l-master.data/opt/hbase-data-back/test_table_back
但不这么写默认就是从hdfs中获取数据。
后记:
1.导出的表列族要和创建导入表的列族必须一样,否则导入将失败
2.在import时可以指定使用bulk的方式,bulk是生成hfile格式的文件,直接导入到Region,无需经历hbase的写数据过程,从而无需消耗memstore,无 需Flush等,更加高效,如果不指定bulk文件路径(hdfs的路径)则会采用hbase 的put和delete API进行写入。
$ bin/hbase -Dhbase.import.version=0.94 org.apache.hadoop.hbase.mapreduce.Import <tablename> <inputdir>
使用Import工具前必须先创建表,关于hbase.import.version属性是0.96的功能。
借鉴参考博文:https://blog.csdn.net/qq_41665356/article/details/80265656