目前使用腾讯云hbase产品(MapReduce emr集群),做历史归档的时候,发现腾讯云对于hbase的归档,并不是很友好,故使用其他方法做全量数据归档。
环境准备:
1、MapReduce emr集群
备注:腾讯云emr集群可以在core节点直接使用 ./hbase shell 登陆hbase。
2、ssh 登陆服务器后切换hadoop用户: su hadoop
3、./hbase shell 默认登陆路径:/usr/local/service/hbase/bin
下面是操作步骤:
1、先使用一台主机(hbase客户端)连接hbase,使用list命令查看数据库中的表,我们可以看到,此数据库有好几个表分别为:
[hadoop@10 bin]$ ./hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.2.4, rUnknown, Wed Mar 1 12:57:53 CST 2017
hbase(main):001:0> list
TABLE
lvwentao
meterdata
meterdata_history
test
wentao
7 row(s) in 0.3470 seconds
=> [ "lvwentao", "meterdata", "meterdata_history", "test", "wentao"]
hbase(main):002:0>
2、我们扫描(使用scan命令)一下数据中的数据前行,重点是查看#列族#名,下图可以看到列族名为:xinxi(记住此列族名,导入数据的时候需要创建表和列族)。
hbase(main):002:0> scan 'wentao'
ROW COLUMN+CELL
1 column=xinxi:name, timestamp=1667814892862, value=lili
2 column=xinxi:name, timestamp=1667814929007, value=city
2 row(s) in 0.1130 seconds
hbase(main):003:0>
image.png
3、退出连接,我们选择Export方式导出数据到本地(选择一个较小的数据库做测试):
./hbase org.apache.hadoop.hbase.mapreduce.Export wentao file:///data/test/wentao
注意: file:///data/test/wentao(最后一级目录(wentao)必须由hbase创建,不能自己创建。)
4、此时我们查看我们制定的目录下的文件,可以看到目录下有我们的数据库备份文件。
[root@fastdfs ~]# ls -ld /opt/sl_ev_trips/*
5、在第二台hbase中新建表和列族(表名随意,不过建议和原数据库表名相同,列族名必须和原数据库相同):
hbase(main):079:0> create 'test3','trips'
0 row(s) in 1.2760 seconds
=> Hbase::Table - test3
hbase(main):080:0>
6、至此,我们hbase数据库导出成功,可以做到本地备份归档。
二、下面开始分析踩坑
1、刚开始导出命令如下:
./hbase org.apache.hadoop.hbase.mapreducExport wentao /data/test/wentao
此命令导出数据可以成功,但不是导出到本地文件夹,而是导出到hdfs文件系统。可以在hdfs文件系统看到导出的文件。
我们想要将数据导出到本地保存,故使用下面命令:
./hbase org.apache.hadoop.hbase.mapreduce.Export wentao file:///data/test/wentao
2、在命令写正确的情况下,执行会报错:
image.pngError: java.io.IOException: Mkdirs failed to create file:/data/test/wentao/_temporary/1/_temporary/attempt_1667821207495_0014_m_000000_0 (exists=false, cwd=file:/data/emr/yarn/local/usercache/hadoop/appcache/application_1667821207495_0014/container_e19_1667821207495_0014_01_000002)
看错误可知hadoop需要权限。我们第一步给权限:
要导到/data盘 可专门在data盘创建一个hadoop有读写权限的目录
chown -R hadoop:hadoop /data/test
3、然后将/data/test赋予 777权限
chmod 777 -R /data/test
4、此时使用export可以正常导出数据。
网友评论