请澄清我对Hadoop / HBase的理解

时间:2013-02-15 03:33:51

标签: hadoop hbase

我一直在阅读白皮书并观看YouTube视频半天,并相信我对该技术有正确的理解,但在开始我的项目之前,我想确保它正确。

所以,这就是我认为我知道的。

由于我正在理解hadoop和hbase的架构,他们几乎就像这样建模了

-----------------------------------------
|               Mapreduce               |
-----------------------------------------
| Hadoop  | <-- hbase export--|  HBase  |
|         |  --apache pig --> |         |
-----------------------------------------
|       HDFS                            |
 ----------------------------------------

简而言之,HBase是一个完全不同的数据库引擎,针对碰巧在HDFS上运行并与Mapreduce兼容的实时更新和查询进行了调整。

现在,假设上述情况是正确的,我认为这就是我所知道的其他内容。

  1. Hadoop专为从开始到结束的大数据而设计。引擎使用分布式附加系统,这意味着一旦插入数据就无法删除。要访问数据,您可以使用Mapreduce,或HDFS shell和HDFS API ..
  2. Hadoop不喜欢小块,它从来没有打算成为一个实时系统。您不希望为每个文件存储一个人和地址,实际上您将存储一百万人和每个文件的地址并插入大文件。
  3. 另一方面,HBase是一个非常典型的NoSql数据库引擎,与CouchDB,RavenDB等相比,其显着的区别在于它使用了hadoop的HDFS,可以可靠地扩展到仅受钱包限制的大小。
  4. Hadoop是文件系统(HDFS)和Java API的集合,用于在HDFS上执行计算。 HBase是一个NoSql数据库引擎,它使用HDFS在集群中有效地存储数据
  5. 要构建Mapreduce作业以访问来自Hadoop和HBase的数据,最好使用HBase导出将HBase数据推送到Hadoop并编写作业来处理数据,但Mapreduce可以访问两个系统一时间。
  6. 在设计HBase文件时必须非常小心,因为HBase本身不支持该文件中的索引字段,HBase仅索引主键。许多提示和技巧有助于解决这个问题。
  7. 好的,如果我仍然准确到这一点,这将是一个有效的用例。

    使用HBase构建网站。您可以像使用任何其他NoSql或RDBMS一样使用HBase来构建您的功能。完成后,将代码记录点放在代码中,以记录您的指标,例如log4j。您可以在log4j中创建一个新的appender,其规则说明日志文件大小达到1 gig时,将其推送到hadoop集群,删除它,创建新文件,继续生活。

    稍后,Mapreduce开发人员可以编写一个例程,使用HBase导出从HBase获取数据集,比如用户ID列表,然后转到存储在Hadoop中的日志,找到每个用户的面包屑跟踪通过系统给定的时间跨度。

    好的,所有人都说,现在针对具体问题。陈述1 - 6准确吗?

    ** * ** * *** *编辑一个, 我根据收到的答案更新了上述信念。

2 个答案:

答案 0 :(得分:2)

  1. 您可以通过HDFS shellHDFS API直接访问HDFS中的文件。
  2. 正确。
  3. 我不熟悉CouchDB或RavenDB,但在HBase中你不能拥有二级索引,因此你必须仔细设计你的行键以加快查询速度。互联网上有很多HBase架构设计技巧,你可以谷歌搜索。
  4. 我认为说Hadoop是数据库引擎的计算引擎更合适。如果要将HDFS数据导入HBase,可以按照this post中的说明使用Apache Pig。如果要将HBase数据导出到HDFS,可以使用export utility
  5. MapReduce是Hadoop框架的一个组件,它并不位于HBase之上。您可以在MapReduce作业中访问HBase数据,因为HBase使用HDFS进行存储。我不认为你想直接从MapReduce作业访问HFile,因为原始文件是用special format编码的,它不容易解析,在将来的版本中可能会改变。

答案 1 :(得分:1)

Since HBase and Hadoop are different database engines, one can not access the data in the other directly. For HBase to get something out of Hadoop, it must go thru Mapreduce and vice versa.

这不是真的,因为Hadoop不是数据库引擎。 Hadoop是文件系统(HDFS)和Java API的集合,用于在HDFS上执行计算。

此外,Map Reduce不是技术,它是一个可以在HDFS数据上并行工作的模型。