ITPub博客

首页 > 大数据 > Hadoop > 数据导入终章:如何将HBase的数据导入HDFS?

数据导入终章:如何将HBase的数据导入HDFS?

原创 Hadoop 作者:赵钰莹 时间:2018-10-15 15:53:46 0 删除 编辑

我们的最终目标是将数据导入Hadoop,在之前的章节中,我们介绍了如何将传统关系数据库的数据导入Hadoop,本节涉及到了HBase。HBase是一种实时分布式数据存储系统,通常位于与Hadoop集群相同的硬件上,或者与Hadoop集群紧密相连,能够直接在MapReduce中使用HBase数据,或将其导入HDFS,这是选择HBase作为解决方案的巨大优势之一。

(注:本文为《Hadoop从入门到精通》大型专题的第五章内容,本专题的其他文章见文末链接,专题的上半部也将于不久之后与大家见面,请持续关注本专题!)

实践:将HBase数据导入HDFS

如果将要在MapReduce中使用的客户数据与HDFS中的数据结合使用,那该怎么办?可以编写一个MapReduce作业,该作业将HDFS数据集作为输入,并直接从HBase的map或reduce代码中提取数据。但在某些情况下,将HBase中的数据直接转储到HDFS可能更有用,特别是如果计划在多个MapReduce作业中使用该数据并且HBase数据不可变或不经常更改。

问题

将HBase数据导入HDFS

解决方案

HBase包含一个Export类,可用于将HBase数据以SequenceFile格式导入HDFS。此技术还介绍了可用于读取导入的HBase数据代码。

讨论

在开始使用这种技术之前,需要启动并运行HBase。

为了能够从HBase导出数据,首先需要将一些数据加载到HBase。加载器创建一个名为stocks_example的HBase表,其中包含一个列族的详细信息,我们将HBase数据存储为Avro二进制序列化数据,此部分代码就不列举了。

运行加载程序并使用它将样本数据加载到HBase中:

可以使用HBase shell查看负载结果。list命令(不带任何参数)将显示HBase中的所有表,而带有单个参数的scan命令将转储表的所有内容:

有了这些数据,我们就可以将其导出到HDFS了。HBase附带了一个转储HBase表的org.apache.hadoop.hbase.mapreduce.Export类。以下代码段显示了使用Export类的示例。使用此命令,可以导出整个HBase表:

Export类还支持只导出单个列族,还可以压缩输出:

Export类以SequenceFile格式写入HBase输出,其中HBase行键使用org.apache.hadoop.hbase.io .ImmutableBytesWritable存储在SequenceFile记录键中,HBase值使用org.apache.hadoop.hbase.client.Result存储在SequenceFile记录值中.。

如果要在HDFS中处理导出的数据,该怎么办?以下列表显示了如何读取HBase SequenceFile并提取Avro记录的示例。

代码5.3 读取HBase SequenceFile以提取Avro记录

可以针对用于导出的HDFS目录运行代码并查看结果:

HBaseExportedStockReader类能够读取和转储HBase的Export类使用的SequenceFile内容。

使用内置的HBase Export类可以更轻松地将HBase中的数据导出到HDFS中。但是,如果不想将HBase数据写入HDFS,而是想直接在MapReduce作业中处理它,该怎么办?让我们看看如何使用HBase作为MapReduce作业的数据源。

实践:使用HBase作为 MapReduce的 数据源

内置的HBase导出器使用SequenceFile输出HBase数据,除了Java之外的编程语言不支持它,并且不支持模式演变。它仅支持Hadoop文件系统作为数据接收器。如果想要更多地控制HBase数据提取,可能需要其他HBase工具。

问题

希望直接在MapReduce作业中对HBase进行操作,而无需将数据复制到HDFS的中间步骤。

解决方案

HBase有一个TableInputFormat类,可以在MapReduce作业中使用,直接从HBase中提取数据。

讨论

HBase提供了一个名为TableInputFormat的InputFormat类,它可以将HBase用作MapReduce中的数据源。以下代码显示了一个MapReduce作业,它使用此输入格式(通过TableMapReduceUtil.initTableMapperJob调用)从HBase读取数据。

代码5.4 使用MapReduce将HBase数据导入HDFS

可以按如下方式运行此MapReduce作业:

$ hip hip.ch5.hbase.ImportMapReduce --output output

快速查看HDFS,告诉MapReduce作业是否按预期工作:

此输出确认MapReduce作业按预期工作。

总结

TableInputFormat类检查HBase并为每个HBase表区域创建输入拆分。如果有10个HBase region,则将执行10个map任务。输入格式还包括在输入拆分中托管region的服务器,这意味着map任务将被安排在与托管数据的HRegionServer相同的节点上执行。这提供了HBase level的位置,也提供了HDFS level的位置。从该区读取的数据可能来自本地磁盘,因为一段时间后,所有区的数据都将是本地的。这一切都假定HRegionServers与DataNode在同一主机上运行。

我们的最后关注点是持久存储,包括对关系数据库和HBase。接下来,我们将改变方向,看看如何利用kafka将数据导入Hadoop。

相关文章:

1、《第一章:Hadoop生态系统及运行MapReduce任务介绍!》链接: http://blog.itpub.net/31077337/viewspace-2213549/

2、《学习Hadoop生态第一步:Yarn基本原理和资源调度解析!》链接: http://blog.itpub.net/31077337/viewspace-2213602/

3、《MapReduce如何作为Yarn应用程序运行?》链接: http://blog.itpub.net/31077337/viewspace-2213676/

4、《Hadoop生态系统各组件与Yarn的兼容性如何?》链接: http://blog.itpub.net/31077337/viewspace-2213960/

5、《MapReduce数据序列化读写概念浅析!》链接: http://blog.itpub.net/31077337/viewspace-2214151/

6、《MapReuce中对大数据处理最合适的数据格式是什么?》链接: http://blog.itpub.net/31077337/viewspace-2214325/

7、《如何在MapReduce中使用SequenceFile数据格式?》链接: http://blog.itpub.net/31077337/viewspace-2214505/

8、《如何在MapReduce中使用Avro数据格式?》链接: http://blog.itpub.net/31077337/viewspace-2214709/

9、《企业自有数据格式杂乱,MapReduce如何搞定?》链接: http://blog.itpub.net/31077337/viewspace-2214826/

10、《企业使用Hadoop的重大挑战:如何在HDFS中组织和使用数据?》链接: http://blog.itpub.net/31545816/viewspace-2215158/ 

11、《如何在HDFS中进行数据压缩以实现高效存储?》链接:  http://blog.itpub.net/31545816/viewspace-2215281/

12、《Hadoop数据传输:如何将数据移入和移出Hadoop?》链接: http://blog.itpub.net/31545816/viewspace-2215580/

13、《如何将日志和二进制文件连续移入HDFS?》链接: http://blog.itpub.net/31545816/viewspace-2215948/

14、《如何将传统关系数据库的数据导入Hadoop?》链接: http://blog.itpub.net/31545816/viewspace-2216000/

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31545816/viewspace-2216036/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-07-12

  • 博文量
    50
  • 访问量
    88821