首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们能否从HBase导出CDH3数据并将其导入CDH5 HBase?

我们能否从HBase导出CDH3数据并将其导入CDH5 HBase?
EN

Stack Overflow用户
提问于 2014-12-18 05:41:54
回答 1查看 184关注 0票数 1

我们有一个旧的基于CDH3的集群,并且在这个集群上存储在HBase中的数据。我们还拥有全新的集群,其中安装了CDH5.2。

我们希望将HBase数据从CDH3集群移动到CDH5集群。我想知道是否可以在不同版本之间迁移数据?它是否就像直接使用distcp命令?

在迁移数据之前和迁移过程中,我需要采取哪些预防措施?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-23 01:54:04

我不认为有一个简单的解决办法。我能想到的最简单的解决方案是使用一个MapReduce作业将每个HBase表导出到CDH3集群上的HDFS。一个DistCp作业将导出的HDFS数据从CDH3集群传输到CDH5集群上的HDFS,最后为每个表设置一个MapReduce作业将HDFS数据导入Hbase。

您可以通过使用没有还原器的默认HBase将表从HDFS导出到HDFS。将键、值设置为ImmutableBytesWriable、org.apache.hadoop.hbase.client.Result和输出格式类为SequenceFileOutputFormat。基本上,这将将HBase表中的任何数据写入到SequenceFile文件中,并保留直接从HBase读取数据的格式。

在CDH5集群的导入端,在DistCp之后,使用这个mapper类,它从导出的文件中读取数据并将它们写入HBase表。

代码语言:javascript
复制
public class HbaseSequenceFileToTableMapper extends TableMapper<ImmutableBytesWritable, Put>{
@Override
public void map(ImmutableBytesWritable row, Result value, Context context)
        throws IOException {
    try {
        context.write(row, resultToPut(row, value));
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

}

private static Put resultToPut(ImmutableBytesWritable key, Result result)
        throws IOException {
    Put put = new Put(key.get());
    for (KeyValue kv : result.raw()) {
        put.add(kv);
    }
    return put;
}
}

如果必须将大量数据从旧集群传输到新集群,则此解决方案非常有效。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27539918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档