我想将一个hbase表复制到另一个性能良好的位置。
我想从hbase服务器github页面重用copytable.java中的代码
我一直在看hbase的文件,但对我帮助不大http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/copytable.html
在看了stackoverflow的这篇文章之后:类的main()方法可以在java中的另一个类中调用吗
我想我可以直接用它的主类来调用它。
问题:您认为这样做比使用hbase服务器的copytable更好吗?你觉得使用这个复印台有什么不便吗?
1条答案
按热度按时间ldfqzlk81#
问题:您认为这样做比使用hbase服务器的copytable更好吗?你觉得使用这个复印台有什么不便吗?
首先,快照比
CopyTable
.hbase快照允许您对表进行快照,而不会对区域服务器造成太大影响。快照、克隆和恢复操作不涉及数据复制。另外,将快照导出到另一个集群不会对区域服务器产生影响。
在版本0.94.6之前,备份或克隆表的唯一方法是使用copytable/exporttable,或者在禁用表之后复制hdfs中的所有hfiles。这些方法的缺点是,您可能会降低区域服务器的性能(复制/导出表)或需要禁用该表,这意味着没有读或写;这通常是不可接受的。
快照不仅仅是重命名,在多个操作之间如果您想在一个特定点上还原,那么这就是正确的使用方法:快照是一组元数据信息,允许管理员返回到表的先前状态。快照不是表的副本;它只是一个文件名列表,并不复制数据。完整快照还原意味着您将返回到以前的“表架构”,并恢复以前的数据,从而丢失自快照创建以来所做的任何更改。
另外,请参见snapshots+和repeatable+reads+for+hbase+表
快照内部构件
另一种比copytable更简化Map的方法:
您可以在代码中实现如下内容这是一个独立的程序,当您编写mapreduce作业时,可以将多个put记录作为一个批插入(可能是100000条)。
这提高了hbase客户端中独立插入的性能您可以用mapreduce的方式来尝试
除此之外,你还可以考虑以下。。。
启用比默认值大的写入缓冲区
table.setAutoFlush(false)
2) 设置缓冲区大小缓冲区只在两种情况下刷新:
显式刷新
使用
flushCommits()
调用以将数据发送到服务器进行永久存储。隐式冲洗
这在您呼叫时触发
put()
或者setWriteBufferSize()
. 两个调用都将当前使用的缓冲区大小与配置的限制进行比较,并可以选择调用flushCommits()
方法。如果整个缓冲区被禁用,设置
setAutoFlush(true)
将强制客户端为每次调用put()
.