Hadoop和Couchbase结合使用的技巧

2019-03-28 13:02|来源: 网络

Hadoop 和数据处理

Hadoop 将许多重要特性结合在一起,这使 Hadoop 对于将大量数据分解为更小、实用的数据块非常有用。

Hadoop 的主要组件是 HDFS 文件系统,它支持将信息分布到整个集群中。对于使用这种分布格式存储的信息,可以通过一个名为 MapReduce 的系统在每个集群节点上进行单独处理。MapReduce 进程将存储在 HDFS 文件系统中的信息转换为更小的、经过处理的、更容易管理的数据块。

因为 Hadoop 可在多个节点上运行,所以可以使用它来处理大量输入数据,并将这些数据简化为更实用的信息块。此过程可使用一个简单的 MapReduce 系统来处理。

MapReduce 转换传入信息(不一定为结构化格式),将该信息转换为一种可更轻松地使用、查询和处理的结构。

例如,一种典型的用途是处理来自数百个不同应用程序的日志信息,以便可以识别特定的问题、计数或其他事件。通过使用 MapReduce 格式,您可以开始度量并查找趋势,将平常非常多的信息转换为更小的数据块。举例而言,在查看某个 Web 服务器的日志时,您可能希望查看特定页面上的特定范围中发生的错误。您可以编写一个 MapReduce 函数来识别特定页面上的特定错误,并在输出中生成该信息。使用此方法,您可从日志文件中精减多行信息,得到一个仅包含错误信息的小得多的记录集合。

理解 MapReduce

MapReduce 的工作方式分两个阶段。映射 (map) 过程获取传入信息,并将这些信息映射到某种标准化的格式。对于某些信息类型,此映射可以是直接和显式的。例如,如果要处理 Web 日志等输入数据,那么仅从 Web 日志的文本中提取一列数据即可。对于其他数据,映射可能更复杂。在处理文本信息时,比如研究论文,您可能需要提取短语或更复杂的数据块。

精减 (reduce) 阶段用于收集和汇总数据。精减实际上能够以多种不同方式发生,但典型的过程是处理一个基本计数、总和或其他基于来自映射阶段的个别数据的统计数据。

想象一个简单的示例,比如 Hadoop 中用作示例 MapReduce 的字数,映射阶段将对原始文本进行分解,以识别各个单词,并为每个单词生成一个输出数据块。reduce 函数获取这些映射的信息块,对它们进行精减,以便在所看到的每个惟一单词上进行递增。给定一个包含 100 个单词的文本文件,映射过程将生成 100 个数据块,但精减阶段可对此进行汇总,提供惟一单词的数量(比如 56 个)和每个单词出现的次数。

借助 Web 日志,映射将获取输入数据,为日志文件中的每个错误创建一条记录,然后为每个错误生成一个数据块,其中包含日期、时间和导致该问题的页面。

在 Hadoop 内,MapReduce 阶段会出现在存储各个源信息块的各个节点上。这使 Hadoop 能够处理以下大型信息集:通过允许多个节点同时处理数据。例如,对于 100 个节点,可以同时处理 100 个日志文件,比通过单个节点快得多地简化许多 GB(或 TB)的信息。

Hadoop 信息

核心 Hadoop 产品的一个主要限制是,无法在数据库中存储和查询信息。数据添加到 HDFS 系统中,但您无法要求 Hadoop 返回与某个特定数据集匹配的所有数据的列表。主要原因是 Hadoop 不会存储、结构化或理解存储在 HDFS 中的数据的结构。这正是 MapReduce 系统需要将信息分析并处理为更加结构化的格式的原因。

但是,我们可以将 Hadoop 的处理能力与更加传统的数据库相结合,使我们可以查询 Hadoop 通过自己的 MapReduce 系统生成的数据。可能的解决方案有许多,其中包括一些传统 SQL 数据库,但我们可以通过使用 Couchbase Server 来保持 MapReduce 风格(它对大型数据集非常有效)。

系统之间的数据共享的基本结构如 图 1 所示。


图 1. 系统之间的数据共享的基本结构

相关问答

更多
  • 很久以前,Couchbase工程师打算构建一个类似于zfs池的概念,但是对于分布式数据库。 该功能没有死,但与其他需要添加的数据库功能相比,从未受到过多关注。 最终发生的事情是,pool / default刚刚成为工程师未来想要构建的东西的占位符。 在过去,这个想法是池将被分配给群集中的一部分节点的桶的子集,并且这将有助于管理大型群集(100多个节点)。 所以现在我会说不要担心整个池概念,因为在当前的(2.x版本)中,这是一个没有任何特殊含义的占位符。 将来尽管围绕泳池概念可能会有一个特征,并且它将会被很好 ...
  • 这是“ Couchbase Lite ”。 我在这里回答了类似的问题/困惑。 TouchDB的构建是一个适用于嵌入到移动/桌面应用程序的Apache-CouchDB兼容数据库引擎。 这里的兼容因素是CouchDB的复制协议和NoSQL数据模型。 在将移动同步作为Couchbase服务器功能提供的过程中,他们将TouchDB更改为Couchbase Lite,并将其更名为Couchbase Lite,并将Sync Gateway构建为Couchbase Server和Couchbase Lite之间的服务器端 ...
  • 只是,见下文。(来自couchbase dev guide doc。) 如果您的值或格式大小有误,则需要检查值本身及其编码方式,并查看是否存在导致文档与Couchbase Server不兼容的任何问题。 你可以使用object.ExcuteGet object.ExcuteGet(key)仔细检查 var result = client.ExecuteGet("beer"); if (! result.Success) { Console.WriteLine("Get failed with mess ...
  • 如果您添加有关您想要做什么的更多信息会更好。 通常,在Couchbase中MongoDB的upsert模拟是设置操作。 它会将给定密钥的数据写入db。 如果db中有这样的键,它将覆盖它。 如果没有这样的密钥,它将创建它。 但也许你可以有一些情况,你可能需要其他功能,如: add , replace , incr , decr 。 It will be better if you add more information about what do you want to do. In general Mon ...
  • 对于couchbase-client,您可以参考REST API Couchbase? 如果这是它的真正的SDK Java客户端直接创建与数据库的连接,并且有许多函数可以获取,创建和更新文档,则可以在java类中映射文档,即使您希望在Spring中将Example.java类直接放在文档中,也可以使用documentarion为了实现这一点。 通过其他方式使用API,您可以发送n1ql查询响应包含json格式的文档。 取决于你想要的实现。 我建议你使用SDK JAVA 祝你好运。 For couchbase ...
  • 回应几点: 主要的是我认为你可以在Couchbase中轻松完成你想做的事。 Couchbase Server中的存储桶有点等同于单独的数据库。 所以你可以这样分割你的网站。 正如您所见,Sync Gateway中的通道为您提供了更多控制,可以分离数据和控制访问。 Couchbase Lite应该能够与CouchDB同步,但这并未经过严格测试。 很难从你的片段中看出出了什么问题。 您可以查看此帖子以获取一些想法: CouchDB:如何使用_revs_diff获取文档修订版ID Sync Gateway公开了C ...
  • 写在Couchbase中 暂时忽略复制并解释写入如何在单个couchbase群集中工作。 在couchbase中的一个键是一个vbucket (碎片)。 该vbucket只存在于集群中的一个节点上,因此只有一个可写的数据副本。 当两个客户端写入相同的密钥时,最后写入的客户端将“获胜”。 couchbase SDK确实公开了许多操作来帮助解决这个问题,比如“ add() ”和“ cas() ”。 内部复制 Couchbase确实拥有数据的副本副本。 这些副本不是最终用户可写的,只有在节点出现故障时才会变为活动 ...
  • 你有意冲洗你的水桶吗? 或者你的意思是你正在使用“memcached”类型的桶,这些桶不能在重启后存活? 我建议你设置桶的“couchbase”类型,并在存储会话时使用到期时间。 在这种情况下,您将拥有持久会话,但仍然没有空间不足,因为旧的非活动会话将自动删除。 I was wrong. The cache persists. Even after rebooting the server. Strange but yes it does. May be, couchbase flows cache to ...
  • 答案会因您使用的客户端库而略有不同。 但一般来说,来自调用集的肯定结果仅暗示客户端和服务器之间没有I / O或其他错误。 在这种情况下,对于给定密钥,数据应安全地存储在主节点的内存中。 在2.0中,Couchbase Server和相应的客户端库将支持Observe方法,该方法将允许进行持久性检查。 通过电话观察,您将能够提出以下问题: 在主节点上是内存中的键吗? 密钥是否在其主节点上持久保存到磁盘? 有一把钥匙被复制到记忆中吗? 有一把钥匙被坚持到它的复制品? 有关Observe的更多信息,请访问http ...
  • 有一段时间我们在移动设备上试用了一个专有的DB(ForestDB),但最终它的效果并不好,所以事情又回到了SQLite。 您仍然可以在1.2+中切换到ForestDB,但我不推荐它,因为它会在2.0中被删除,直到它再次变得可行。 如此简短的回答:是的,它使用了SQLite。 For a while we experimented with a proprietary DB (ForestDB) on mobile, but it didn't work out well enough in the end ...