问题标签 [hadoop-streaming]

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 投票
2 回答
1030 浏览

python - 使用 Hadoop Streaming 管理依赖项?

我有一个关于 Hadoop Streaming 的快速问题。如果我正在使用 Python 流并且我有我的映射器/减速器需要但默认未安装的 Python 包,我是否需要在所有 Hadoop 机器上安装这些包,或者是否有某种序列化将它们发送到远程机器?

0 投票
2 回答
1126 浏览

python - Hadoop 流式多行输入

我将Dumbo用于一些 Hadoop Streaming 作业。我有一堆 JSON 字典,每个字典都包含一篇文章(多行文本)和一些元数据。我知道 Hadoop 在提供大文件时表现最好,所以我想将所有 JSON 字典合并到一个文件中。

问题是我不知道如何让 Hadoop 将每个字典/文章作为单独的值读取,而不是在换行符上拆分。如何告诉 Hadoop 使用自定义记录分隔符?或者,也许我可以将所有 JSON 字典放入一个列表数据结构中并让 Hadoop 读取它?

或者也许对字符串进行编码(base64?)会删除所有新行并且普通的“阅读器”能够处理它?

0 投票
1 回答
3871 浏览

hadoop - Hadoop 流问题

我在使用 Hadoop Streaming 时遇到了这些问题。我正在用python编写代码

1) 聚合库包

根据hadoop流文档(http://hadoop.apache.org/common/docs/r0.20.0/streaming.html#Working+with+the+Hadoop+Aggregate+Package+%28the+-reduce+aggregate+option%29 ),有一个内置的 Aggregate 类,它既可以作为映射器,也可以作为减速器。

这是命令:

执行此命令会使映射器失败,并出现以下错误:

但是,如果您使用聚合作为减速器而不是组合器来运行此命令,则作业可以正常工作。

这是否意味着我不能将聚合类用作组合器?

2) 不能使用 | 作为通用选项的分隔符

这是来自上述链接的示例命令

您不能使用 | 作为 map.output.key.field.separator 的参数。错误是

(更新)你必须逃避 | 像这样的\

3) 不能像示例中那样在命令末尾指定 -D 选项。错误是

文档有缺陷还是我做错了什么?

感谢您对我做错了什么的任何见解。谢谢

0 投票
3 回答
2211 浏览

hadoop - hadoop 流确保每个 reducer 一个键

我有一个映射器,它在处理数据时将输出分类为 3 种不同的类型(类型是输出键)。我的目标是通过 reducer 创建 3 个不同的 csv 文件,每个文件都包含一个键的所有数据,并带有标题行。

键值可以更改并且是文本字符串。

现在,理想情况下,我想拥有 3 个不同的减速器,每个减速器只能获得一个键,它的整个值列表。

除了,这似乎不起作用,因为键没有映射到特定的减速器。

在其他地方对此的答案是编写一个自定义分区器类,它将每个所需的键值映射到特定的减速器。这会很棒,除了我需要在 python 中使用流式传输并且我无法在我的工作中包含自定义流式传输 jar,因此这似乎不是一个选项。

在 hadoop 文档中看到有一个可用的备用分区器类可以启用二级排序,但对我来说并不是很明显可以使用基于默认或键字段的分区器来确保每个键结束无需编写 java 类并使用自定义流 jar 就可以使用它自己的 reducer。

任何建议将不胜感激。

例子

映射器输出:

csv2\tfieldA,fieldB,fieldC csv1\tfield1,field2,field3,field4 csv3\tfieldRed,fieldGreen ...

问题是,如果我有 3 个减速器,我最终会得到这样的密钥分配:

一个 reducer 获得两种不同的 key 类型,一个 reducer 根本没有收到任何数据。这是因为 hash(key csv1) mod 3 和 hash(key csv2) mod 3 产生相同的值。

0 投票
2 回答
1857 浏览

hadoop - 使用 hadoop 流式写入不同的文件

我目前在 10 个服务器的 hadoop 集群上处理大约 300 GB 的日志文件。我的数据保存在名为 YYMMDD 的文件夹中,因此可以快速访问每一天。

我的问题是我今天刚刚发现我的日志文件中的时间戳是 DST(GMT -0400)而不是预期的 UTC。简而言之,这意味着 logs/20110926/*.log.lzo 包含从 2011-09-26 04:00 到 2011-09-27 20:00 的元素,它几乎破坏了对该数据所做的任何 map/reduce(即生成统计数据)。

有没有办法做一个映射/减少工作来正确地重新分割每个日志文件?据我所知,似乎没有办法使用流式传输输出文件 A 中的某些记录和输出文件 B 中的其余记录。

这是我目前使用的命令:

我对 java 和/或创建自定义类一无所知。我确实尝试过发布在http://blog.aggregateknowledge.com/2011/08/30/custom-inputoutput-formats-in-hadoop-streaming/的代码(几乎复制/粘贴了那里的内容)但我不能根本无法让它工作。无论我尝试什么,我都会收到“-outputformat:找不到类”错误。

非常感谢您的时间和帮助:)。

0 投票
1 回答
1579 浏览

python - Python Streaming:如何减少到多个输出?(虽然可以使用 Java)

我阅读了 Hadoop in Action 并发现在Java使用MultipleOutputFormatMultipleOutputs类中我们可以将数据减少到多个文件,但我不确定如何使用Python streaming.

例如:

如果有人知道,听说过,做过类似的事情,请告诉我

0 投票
4 回答
6773 浏览

python - hadoop 流:如何将键值列表提供给减速器?

因此,当我们Java用于编写map/reduce程序时,map 收集数据,reducer 接收每个键的值列表,例如

继续工作。但是可以用pythonusing做同样的事情streaming吗?我将此用作参考,并且似乎reducer 获取命令行上提供的每行数据

0 投票
0 回答
3857 浏览

java - 在 Hadoop Streaming 中复制到 hdfs 和从 hdfs 复制

我之前问过一个类似的问题,但是在做了一些探索之后,我对正在发生的事情有了更好的了解,但我想看看其他人是否有替代我的方法的解决方案。

问题

假设您正在尝试编写一个 Hadoop 流作业,该作业在 hdfs 上压缩一堆非常大的文件。 Hadoop Streaming 指南建议您编写一个映射器将文件从 hdfs 复制到本地节点,完成您的工作,然后将文件复制回 hdfs。这是一个小脚本,内联解释了一些额外的代码,用于执行稍微更基本的任务:只需重命名某个文件

剧本

输出

运行脚本后,我们得到这个输出

问题

似乎很清楚,hadoop dfs -copyToLocal并且hadoop dfs -copyFromLocal似乎在相关文件完成传输之前返回,如spincopy spin输出所示。我的猜测是 Hadoop 流 jvm 正在采用hadoop dfs命令创建的线程,因此即使hadoop dfs退出文件传输线程也会继续运行,但这只是一个猜测。当文件很大时,这变得特别烦人,并且 Hadoop 流在最后一个文件完成复制之前退出;似乎文件传输在中途终止,而您在 HDFS 上留下了一个部分文件。我的这个 hack 似乎至少可以确保文件完成复制。

我应该注意我使用的是 Cloudera 的 hadoop 版本 0.20.2+737。

有没有人遇到过这个问题?您找到了哪些替代解决方法?该问题是否已在 Hadoop 的任何新版本中得到解决?

0 投票
2 回答
2641 浏览

hadoop - hadoop-streaming : 将输出写入不同的文件

这是场景

在减速器中,我想将数据写入不同的文件,假设减速器看起来像

考虑写成的路径:

当我运行时pseudo-distributed mode(machine with one node and hdfs daemons running),一切都很好,因为所有守护进程都会写入同一组文件

问题: - 如果我在 1000 台机器的集群中运行它,它们是否会写入同一组文件?我writing to local filesystem在这种情况下,有没有更好的方法来执行这个操作hadoop streaming

0 投票
1 回答
1914 浏览

python - Hadoop 集群 - 在运行作业之前,我是否需要在所有机器上复制我的代码?

这让我感到困惑,当我使用 wordcount 示例时,我将代码保存在 master 并让他用 slave 做事,它运行良好

但是当我运行我的代码时,它开始在奴隶上失败,给出奇怪的错误,比如

因为我在路径上没有代码,是我做错了什么吗?

谢谢