我已经阅读了白皮书并观看了 YouTube 视频半天,相信我对这项技术有了正确的理解,但在开始我的项目之前,我想确保它是正确的。
因此,这就是我认为我所知道的。
当我了解 hadoop 和 hbase 的架构时,它们几乎是这样建模的
-----------------------------------------
| Mapreduce |
-----------------------------------------
| Hadoop | <-- hbase export--| HBase |
| | --apache pig --> | |
-----------------------------------------
| HDFS |
----------------------------------------
简而言之,HBase 是一个完全不同的数据库引擎,针对实时更新和查询进行了调整,恰好在 HDFS 上运行,并且与 Mapreduce 兼容。
现在,假设上述内容是正确的,以下是我认为我知道的其他内容。
- Hadoop 自始至终都是为大数据而设计的。该引擎使用分布式仅追加系统,这意味着插入数据后您将无法删除数据。要访问数据,您可以使用 Mapreduce、HDFS shell 和 HDFS API。
- Hadoop 不喜欢小块,而且它从来就没有打算成为一个实时系统。您不想在每个文件中存储一个人和地址,实际上您会在每个文件中存储一百万个人和地址并插入大文件。 另一方面,HBase 是一个非常典型的 NoSql 数据库引擎,本质上与 CouchDB、RavenDB 等相比。显着的区别是它使用 hadoop 的 HDFS 构建,允许它可靠地扩展到仅受您的钱包限制的大小。
- Hadoop 是文件系统 (HDFS) 和 Java API 的集合,用于在 HDFS 上执行计算。 HBase 是一个 NoSql 数据库引擎,它使用 HDFS 跨集群高效存储数据
- 要构建一个 Mapreduce 作业来访问来自 Hadoop 和 HBase 的数据,最好使用 HBase 导出将 HBase 数据推送到 Hadoop 并编写作业来处理数据,但 Mapreduce 可以同时访问这两个系统一次。
- 设计 HBase 文件时必须非常小心,因为 HBase 本身不支持该文件中的索引字段,HBase 仅对主键进行索引。许多提示和技巧有助于解决这个问题。
好吧,如果我到目前为止仍然准确,那么这将是一个有效的用例。
您使用 HBase 构建站点。您可以像使用任何其他 NoSql 或 RDBMS 一样使用 HBase 来构建您的功能。完成后,您可以将指标记录点放入代码中,以在 log4j 中记录指标。您在 log4j 中创建一个新的附加程序,其规则是当日志文件大小达到 1 GB 时,将其推送到 hadoop 集群,删除它,创建一个新文件,继续生活。
稍后,Mapreduce 开发人员可以编写一个例程,使用 HBase 导出从 HBase 获取数据集(例如用户 ID 列表),然后转到存储在 Hadoop 中的日志并找到每个用户的面包屑路径在给定的时间跨度内通过系统。
好了,说了这么多,现在来说说具体问题。陈述 1 - 6 准确吗?
**********编辑一个, 我根据收到的答案更新了我的上述信念。
最佳答案
- 您可以通过HDFS shell直接访问HDFS中的文件或HDFS API .
- 正确。
- 我不熟悉CouchDB或RavenDB,但是在HBase中你不能有二级索引,所以你必须仔细设计你的行键来加速你的查询。互联网上有很多 HBase 架构设计技巧,您可以通过 google 搜索。
- 我认为说Hadoop是一个计算引擎而不是数据库引擎更合适。如果您想将HDFS数据导入HBase,可以使用Apache Pig,如this post中所述。 。如果要将HBase数据导出到HDFS,可以使用export utility .
- MapReduce 是 Hadoop 框架的一个组件,它并不位于 HBase 之上。您可以在 MapReduce 作业中访问 HBase 数据,因为 HBase 使用 HDFS 进行存储。我认为您不想直接从 MapReduce 作业访问 HFile,因为原始文件被编码在 special format 中。 ,它不容易解析,并且在未来的版本中可能会发生变化。
关于hadoop - 请澄清我对 Hadoop/HBase 的理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14887876/