草庐IT

hadoop - 请澄清我对Hadoop/HBase的理解

coder 2024-01-06 原文

我已经阅读白皮书和观看 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 export 将 HBase 数据推送到 Hadoop 并编写您的作业来处理数据,但是 Mapreduce 可以同时访问两个系统一次。
  6. 在设计 HBase 文件时必须非常小心,因为 HBase 本身不支持在该文件中索引字段,HBase 仅索引主键。许多提示和技巧有助于解决这个问题。

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

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

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

好了,说了这么多,现在进入具体问题。陈述 1 - 6 准确吗?

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

最佳答案

  1. 您可以通过HDFS shell 直接访问HDFS 中的文件。或 HDFS API .
  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 中。 ,它不容易解析,并且在未来的版本中可能会发生变化。

关于hadoop - 请澄清我对Hadoop/HBase的理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14887876/

有关hadoop - 请澄清我对Hadoop/HBase的理解的更多相关文章

  1. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  2. TimeSformer:抛弃CNN的Transformer视频理解框架 - 2

    Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图

  3. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  4. HBase Region 简介和建议数量&大小 - 2

    Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile

  5. ruby - 易于初学者理解的 Ruby 库 - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭3年前。Improvethisquestion我正处于学习Ruby的阶段,我想查看一些小型库的源代码以了解它们是如何构建的。我不知道什么是小型图书馆,但希望SO能推荐一些易于理解的图书馆来学习。因此,如果有人知道一两个非常小的库,这是新手Rubyists学习的好例子,请推荐!我想使用Manveru'sInnatelib,因为它试图保持在2000LOC以下,但我还不熟悉其中经常使用的Ruby速记。也许大约100-5

  6. ruby - 无法理解 `puts{}.class` 和 `puts({}.class)` 之间的区别 - 2

    由于匿名block和散列block看起来大致相同。我正在玩它。我做了一些严肃的观察,如下所示:{}.class#=>Hash好的,这很酷。空block被视为Hash。print{}.class#=>NilClassputs{}.class#=>NilClass为什么上面的代码和NilClass一样,下面的代码又显示了Hash?puts({}.class)#Hash#=>nilprint({}.class)#Hash=>nil谁能帮我理解上面发生了什么?我完全不同意@Lindydancer的观点你如何解释下面几行:print{}.class#NilClassprint[].class#A

  7. ruby - 如何理解 Ruby 中的发送者和接收者? - 2

    我很难理解Ruby中sender和receiver的实际含义。它们一般是什么意思?到目前为止,我只是将它们理解为方法调用和获取其返回值的调用。但是,我知道我的理解还远远不够。谁能给我一个Ruby中发送者和接收者的具体解释? 最佳答案 面向对象中的一个核心概念是消息传递和早期概念化,这在很大程度上借鉴了计算的Actor模型。艾伦·凯(AlanKay)创造了面向对象一词并发明了最早的OO语言之一SmallTalk,他拥有voicedregretatusingatermwhichputthefocusonobjectsinsteadofo

  8. ruby-on-rails - Rails - 理解 application.js 和 application.css - 2

    rails新手。只是想了解\assests目录中的这两个文件。例如,application.js文件有如下行://=requirejquery//=requirejquery_ujs//=require_tree.我理解require_tree。只是将所有JS文件添加到当前目录中。根据上下文,我可以看出requirejquery添加了jQuery库。但是它从哪里得到这些jQuery库呢?我没有在我的Assets文件夹中看到任何jquery.js文件——或者直接在我的整个应用程序中没有看到任何jquery.js文件?同样,我正在按照一些说明安装TwitterBootstrap(http:

  9. ruby - 你如何理解 Ruby 中的这个三元条件? - 2

    我在某些代码中遇到了三元组,但我无法理解条件:str.split(/',\s*'/).mapdo|match|match[0]==?,?match:"somestring"end.join我确实理解我是在某些点上拆分字符串并将总结果转换为数组,然后依次处理数组的每个元素。除此之外,我不知道发生了什么。 最佳答案 一种(稍微)不那么令人困惑的写法是:str.split(/',\s*'/).mapdo|match|ifmatch[0]==?,matchelse"somestring"endend.join我认为多行三元语句很糟糕,尤其是

  10. ruby - 您如何将 S3 理解为 Ruby 中的分层目录结构? - 2

    有没有人成功地将S3存储桶读取为子文件夹?文件夹1--子文件夹2----文件3----文件4--文件1--文件2文件夹2--子文件夹3--文件5--文件6我的任务是读取文件夹1。我希望看到子文件夹2、文件1和文件2,但看不到文件3或文件4。现在,因为我将存储桶键限制为prefix=>'folder1/',你仍然会得到file3和4,因为它们在技术上具有folder1前缀。似乎真正做到这一点的唯一方法是吸收folder1下的所有键,然后使用字符串搜索从结果数组中实际排除file3和file4。有没有人有过这方面的经验?我知道像Transmit和Cyber​​duck这样的FTP风格的S3

随机推荐