2

我已经看了半天的白皮书和 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 仅索引主键。许多提示和技巧有助于解决这个问题。

好的,所以如果我仍然准确到这一点,这将是一个有效的用例。

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

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

好的,说了这么多,现在针对具体问题。陈述 1 - 6 是否准确?

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

4

2 回答 2

2
  1. 您可以通过HDFS shellHDFS API直接访问 HDFS 中的文件。
  2. 正确的。
  3. 我不熟悉 CouchDB 或 RavenDB,但是在 HBase 中你不能有二级索引,所以你必须仔细设计你的行键来加快你的查询。互联网上有很多 HBase 架构设计技巧,你可以用谷歌搜索。
  4. 我认为说Hadoop是数据库引擎的计算引擎更合适。如果要将 HDFS 数据导入 HBase,可以使用 Apache Pig,如本文所述。如果要将 HBase 数据导出到 HDFS,可以使用导出实用程序
  5. MapReduce 是 Hadoop 框架的一个组件,它并不位于 HBase 之上。您可以在 MapReduce 作业中访问 HBase 数据,因为 HBase 使用 HDFS 进行存储。我认为您不想直接从 MapReduce 作业访问 HFile,因为原始文件以特殊格式编码,不易解析,并且可能会在未来的版本中发生变化。
于 2013-02-15T05:19:20.610 回答
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 数据。

于 2013-02-15T05:19:45.917 回答