赞
踩
导出
通过Export导出数据到目标集群的hdfs,再在目标集群执行import导入数据,Export支持指定开始时间和结束时间,因此可以做增量备份,Export工具参数如下:
可见,在导出时可以指定version,starttime,endtime等参数,并且可以通过-D指定是否压缩,指定caching等属性。
Export导出工具与CopyTable一样是依赖hbase的scan读取数据,并且采用的InportFormat与CopyTable一样是TableInputFormat类,从该类的getSplits()方法可以看出MR的map数与hbase表的region数相同。
一,准备工作
student的表结构如下:
启动的节点:
二,导出表
我们执行导出命令:
成功!
因为我们的目标路径是存储在hdfs里面的,所以我们这点一点要注意,在本地磁盘下面是找不到的。
我们也可以通过命令来查看文件:
接着我们把hdfs里面导出的表,给复制到本地磁盘下面去。
查看:
三,导入表
先将备份的表,导入到hdfs中,利用hadoop dfs -put localFile hdfsFile命令
导入成功:
创建表:
导入数据
成功
查看数据:
四,备份百万级条数据
导出导入都是一样的步骤,只不过就是数据量很大的时候,会导出导入很慢,尤其是导入。
我导入数据的时候,都导入了十分钟,也许是我的电脑的内存很慢。
但是我看了下别的大佬的Hbase导入导出表的博客,发现会出现一个问题:
导出user表,接近18万条记录:
/hbs/hbase-1.0.3/bin/hbase org.apache.hadoop.hbase.mapreduce.Export harve_user /hdfs/data_back/harve_user_back
导出失败了,查看hdfs中的内容也是空的:
失败原因:
2017-06-19 15:41:21,996 INFO [main] mapreduce.Job: Task Id : attempt_1492400325003_0004_m_000002_2, Status : FAILED
Container [pid=126946,containerID=container_1492400325003_0004_01_000020] is running beyond virtual memory limits. Current usage: 162.1 MB of 1 GB physical memory used; 2.1 GB of 2.1 GB virtual memory used. Killing container.
机上运行的Container试图使用过多的内存,而被NodeManager kill掉了。
该错误是YARN的虚拟内存计算方式导致,上例中用户程序申请的内存为1Gb,YARN根据此值乘以一个比例(默认为2.1)得出申请的虚拟内存的值,当YARN计算的用户程序所需虚拟内存值大于计算出来的值时,就会报出以上错误。调节比例值可以解决该问题。
解决方法:mapred-site.xml中设置map和reduce任务的内存配置如下:(value中实际配置的内存需要根据自己机器内存大小及应用情况进行修改)
mapreduce.map.memory.mb 1536 mapreduce.map.java.opts -Xmx1024M mapreduce.reduce.memory.mb 3072 mapreduce.reduce.java.opts -Xmx2560MMapReduce作业配置参数
可在客户端的mapred-site.xml中配置,作为MapReduce作业的缺省配置参数。也可以在作业提交时,个性化指定这些参数
修改配置文件重启后再次执行,成功:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。