问题标签 [mapreduce]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
6353 浏览

sorting - 在将值发送到减速器之前对其进行排序

我正在考虑在 hadoop 中构建一个小型测试应用程序来掌握系统的窍门。

我想到的应用程序将在统计领域。我想从我的减速器函数中获得“每个键的 10 个最差值”(我必须假设某些键可能存在大量值)。

我的计划是进入我的减速器的值基本上是“实际值”和“实际值的质量/相关性”的组合。基于相关性,我“简单地”想要取 10 个最差/最好的值并将它们从减速器中输出。

我该怎么做(假设特定键有大量值)?有没有一种方法可以在将所有值发送到减速器之前对其进行排序(并且在我读取前 10 个时停止读取输入)或者必须以不同的方式完成?

有人可以指出我可以查看的一段示例代码吗?


更新:我发现了两个有趣的 Jira 问题HADOOP-485HADOOP-686

任何人都有关于如何在 Hadoop 0.20 API 中使用它的代码片段?

0 投票
5 回答
11629 浏览

parallel-processing - What are some scenarios for which MPI is a better fit than MapReduce?

As far as I understand, MPI gives me much more control over how exactly different nodes in the cluster will communicate.

In MapReduce/Hadoop, each node does some computation, exchanges data with other nodes, and then collates its partition of results. Seems simple, but since you can iterate the process, even algorithms like K-means or PageRank fit the model quite well. On a distributed file system with locality of scheduling, the performance is apparently good. In comparison, MPI gives me explicit control over how nodes send messages to each other.

Can anyone describe a cluster programming scenario where the more general MPI model is an obvious advantage over the simpler MapReduce model?

0 投票
3 回答
4244 浏览

python - 在 Hadoop Streaming 中生成单独的输出文件

仅使用映射器(Python 脚本)而不使用减速器,如何为每一行输出输出一个以键为文件名的单独文件,而不是输出长文件?

0 投票
2 回答
894 浏览

sql - 在 Hadoop MapReduce 中缓存地图应用程序?

从数据流的角度来看 MapReduce 和 HBase 的组合,我的问题似乎很合适。我有大量文档要映射、合并和缩减。我之前的 SQL 实现是将任务拆分为批处理操作,将 Map 的结果累积存储到表中,然后执行相当于 reduce 的操作。这样做的好处是,在执行期间(或执行之间)的任何时候,我都可以在那个时间点获得 Map 的结果。

据我了解,将此作业作为 MapReduce 运行需要每次运行所有 Map 函数。

我的 Map 函数(实际上是任何函数)总是为给定的输入提供相同的输出。如果我不需要,重新计算输出根本没有意义。我的输入(一组文档)将不断增长,我将定期对数据运行 MapReduce 操作。在执行之间,我应该只需要为新添加的文档计算 Map 函数。

我的数据可能是 HBase -> MapReduce -> HBase。鉴于 Hadoop 是一个完整的生态系统,它可能能够知道给定函数已应用于具有给定标识的行。我假设 HBase 表中的条目是不可变的。Hadoop 是否/可以考虑到这一点?

我从文档(尤其是 Cloudera 视频)中了解到,重新计算(潜在冗余数据)可能比针对 Hadoop 正在用于处理的问题类别进行持久化和检索更快。

有什么意见/答案吗?

0 投票
3 回答
2569 浏览

python - MapReduce、Python 和 NetworkX

我已经为我使用 NetworkX 在 Python 中构建的图实现了一个未加权的随机游走函数。下面是我处理随机游走的程序片段。在我的程序的其他地方,我有一个创建图形的方法,并且我有一个模拟我编写的各种自定义图形测试方法的方法。其中一种图测试方法从图中随机选择两个节点,并在它们之间运行随机游走。从这个 Random Walk 计算的两件事是命中时间(从起点到终点遍历的链接数)和通勤时间(从起点到终点再回到起点的遍历链接数)。

我的随机游走代码非常简单,因为我只是选择随机节点直到到达终点。然而,当我尝试运行几个随机游走时,这个当前的实现非常慢(我想我需要在某个时候运行一百万)。

我的问题是:有什么方法可以使用 Hadoop MapReduce 来并行化此随机游走中正在进行的一些操作?有没有更好的方法让我随机游走?

0 投票
1 回答
3347 浏览

hadoop - 来自 HBase 的 Hadoop mapreduce 流式传输

我正在构建一个使用 HBase (0.20.1) 作为数据源和数据接收器的 Hadoop (0.20.1) mapreduce 作业。我想用 Python 编写这份工作,这需要我使用 hadoop-0.20.1-streaming.jar 将数据流进出我的 Python 脚本。如果数据源/接收器是 HDFS 文件,这可以正常工作。

Hadoop 是否支持从/到 HBase 的流式传输以进行 mapreduce?

0 投票
1 回答
1942 浏览

python - 包含 HTML 标签的文件上的 Hadoop MapReduce 作业

我有一堆大的 HTML 文件,我想在它们上运行 Hadoop MapReduce 作业以查找最常用的单词。我用 Python 编写了 mapper 和 reducer,并使用 Hadoop 流来运行它们。

这是我的映射器:

这是我的减速器:

每当我只是通过管道传输一个小样本小字符串时,例如“hello world hello hello world ...”,我就会得到一个排名列表的正确输出。但是,当我尝试使用一个小的 HTML 文件并尝试使用 cat 将 HTML 传输到我的映射器时,我收到以下错误(input2 包含一些 HTML 代码):

谁能解释我为什么会得到这个?另外,调试 MapReduce 作业程序的好方法是什么?

0 投票
2 回答
2946 浏览

hadoop - map() 和 reduce() 是否应该返回相同类型的键/值对?

在编写 MapReduce 作业(特别是 Hadoop,如果相关)时,必须定义一个map()和一个reduce()函数,两者都产生一系列键/值对。键和值的数据类型由应用程序自由定义。

在单词计数的规范示例中,这两个函数都会产生类型对(string, int),键是单词,值是出现次数。在这里 - 以及在我看到的所有其他示例中 - 输出的键和值类型在两个函数之间是一致的。

必须/应该在MapReduce 的任何应用程序中产生的键/值对的类型相同map()吗?reduce()如果是:为什么?

0 投票
0 回答
167 浏览

logging - 显示访问日志分析

我正在做一些工作来分析来自 Catalyst Web 应用程序的访问日志。数据来自网络场前面的负载均衡器,每天总计约 35Gb。它存储在Hadoop HDFS 文件系统中,我使用 MapReduce(通过Dumbo,这很棒)来处理数字。

分析的目的是尝试建立使用配置文件——哪些操作使用最多,每个操作的平均响应时间是多少,响应是从后端还是缓存提供的——用于容量规划、优化和设置监控系统的阈值。像 Analog 这样的传统工具会为我提供请求最多的 URL 或最常用的浏览器,但这些对我来说都没有用。我不需要知道那/controller/foo?id=1984是最流行的 URL;我需要知道所有命中的命中率和响应时间是多少,/controller/foo以便我可以查看是否有优化或缓存的空间,并尝试估计如果此操作的命中突然翻倍可能会发生什么。

我可以通过 MapReduce 轻松地将数据分解为每个时间段每个操作的请求。问题是以易于理解的形式显示它并挑选出重要的趋势或异常。我的输出形式为:

即,键是时间段,值是(action, hits, cache hits)每个时间段的元组。(我不必坚持这一点;这就是我到目前为止所拥有的。)

大约有 250 个动作。它们可以组合成较少数量的组,但在同一个图表上随时间绘制每个操作的请求数量(或响应时间等)可能不起作用。首先,它太吵了,其次,绝对数字并不重要——对于经常使用的、轻量级、可缓存的响应的请求,每分钟增加 100 个请求远不如每分钟增加 100 个请求重要在一个很少使用但昂贵(可能会命中数据库)不可缓存的响应中。在同一张图表中,我们不会看到很少使用的操作的请求变化。

静态报告不太好——一个巨大的数字表很难消化。如果我按小时汇总,我们可能会错过重要的每分钟更改。

有什么建议么?你是如何处理这个问题的?我想一种方法是以某种方式突出每个操作的请求率或响应时间的重大变化。滚动平均值和标准偏差可能会显示这一点,但我可以做得更好吗?

我还能生成哪些其他指标或数据?

0 投票
2 回答
85 浏览

parallel-processing - 并行记录组合 - 匹配多个键

我一直在研究使用 MapReduce 构建一个并行化的记录组合系统。语言无关紧要,我可以使用预先存在的库,例如 Hadoop,或者在必要时构建自己的库,我并不担心。

然而,我一直遇到的问题是我需要在多个条件上匹配记录。例如:我可能需要根据人名人的电话号码匹配记录,但不一定是人名电话号码。

例如,给定每条记录的以下键:

  1. “约翰·史密斯”和“555-555-5555”
  2. “简·史密斯”和“555-555-5555”
  3. “约翰史密斯”和“555-555-1111”

我希望系统获取所有三个记录,找出它们在其中一个键上匹配,并将它们组合成一个包含两个名称(“John Smith”和“Jane Smith”)以及两个电话号码的组合记录(“555-555-5555”和“555-555-1111”)。

这是我可以使用 MapReduce 完成的事情吗?如果是这样,我将如何匹配 Map 函数生成的键,以便所有匹配的记录都可以传递到 Reduce 函数中。*或者,有没有不同/更好的方法可以做到这一点?我唯一真正的要求是我需要它并行化。

[*] 请注意:我假设 Reduce 函数的使用方式是,每次调用 Reduce 函数都会产生一个组合记录,而不是 Reduce 函数会为整个作业产生一个结果。