问题标签 [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 回答
732 浏览

hadoop - 限制在 Hadoop Streaming 上运行的映射器数量

是否可以使用 Hadoop Streaming 在任何给定时间限制为作业运行的映射器数量?例如,我有一个 28 个节点的集群,每个节点可以运行 1 个任务。如果我的工作有 100 个任务,我只想在任何时间点使用 28 个节点中的 20 个。我想限制一些作业,因为它们可能包含许多长时间运行的任务,我有时想运行一些运行速度更快的作业并确保它们可以立即运行,而不是等待长时间运行的作业完成。

我看到了这个问题,标题是正确的,但答案似乎并没有解决这个特定问题。

谢谢!

0 投票
3 回答
828 浏览

subprocess - 使用 Python 和 python 子进程的 Hadoop 流式传输

我已经建立了一个基本的 hadoop 主从集群设置,并且能够在集群上运行 mapreduce 程序(包括 python)。

现在我正在尝试运行一个访问 C 二进制文件的 python 代码,所以我正在使用 subprocess 模块。我可以将 hadoop 流用于普通的 python 代码,但是当我包含 subprocess 模块来访问二进制文件时,作业失败了。

正如您在下面的日志中看到的,hello 可执行文件被识别为用于打包,但仍然无法运行代码。

. . packageJobJar: [ /tmp/hello/hello , /app/hadoop/tmp/hadoop-unjar5030080067721998885/] [] /tmp/streamjob7446402517274720868.jar tmpDir=null

我正在尝试的命令是:

其中 hello 是 C 可执行文件。这是一个简单的 helloworld 程序,我用它来检查基本功能。

我的 Python 代码是:

任何有关如何在 hadoop 流中使用 Python 运行可执行文件或帮助调试的帮助都会让我在这方面取得进展。

谢谢,

加内什

0 投票
2 回答
1168 浏览

python - Hadoop-streaming:映射器运行时 PYTHONPATH 不起作用

  • 我有一个 PYTHONPATH 设置,它也可以正常工作,除非我运行 map-reduce 作业
  • 它失败了

    回溯(最后一次调用):文件“/work/app/hadoop/tmp/mapred/local/taskTracker/hduser/jobcache/job_201203091218_0006/attempt_201203091218_0006_m_000020_0/work/./mapper.py”,第 57 行,来自 src.utilities导入实用程序 ImportError: No module named src.utilities java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1 at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:311) at org.apache .hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:545) 在 org.apache.hadoop.streaming.PipeMapper.map(PipeMapper.java:121) 在 org.apache.hadoop.mapred.MapRunner.run(MapRunner.java :50) 在 org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:436) 在 org.apache.hadoop 的 org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:36)。mapred.MapTask.run(MapTask.java:372) at org.apache.hadoop.mapred.Child$4.run(Child.java:261) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth .Subject.doAs(Subject.java:396) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059) at org.apache.hadoop.mapred.Child.main(Child.java:255) java .lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1 at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:311) at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed. java:545) 在 org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:132) 在 org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:57) 在 org.apache.hadoop.streaming .PipeMapRunner.run(PipeMapRunner.java:36) 在 org。apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:436) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:372) at org.apache.hadoop.mapred.Child$4.run(Child .java:261) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:396) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java :1059) 在 org.apache.hadoop.mapred.Child.main(Child.java:255)apache.hadoop.mapred.Child.main(Child.java:255)apache.hadoop.mapred.Child.main(Child.java:255)

问题: - 在 hadoop-streaming 期间,我们是否必须专门设置 Python 路径?在哪里?

0 投票
1 回答
177 浏览

hadoop-streaming - 使用 cdh3u3 hadoop 和小飞象做 mapreduce 生成错误

我的 python 脚本:#!/usr/bin/python import sys importdumbo import cgi, urlparse #from dumbo.lib import JoinReducer #from dumbo.decor import primary, secondary

执行命令:

jobtracker 日志中的 hadoop 错误

引起:org.apache.hadoop.streaming.io.TypedBytesOutputReader.readKeyValue(TypedBytesOutputReader.java:57) 的 java.lang.NullPointerException 提前感谢所有帮助。

0 投票
1 回答
953 浏览

java - 在hadoop中读取图像

如何在hadoop中将图像转换为序列文件格式?. 我不想读取一堆文件,只是一个图像并对其进行操作。

0 投票
1 回答
2419 浏览

hadoop - 用于日志分析的 Amazon MapReduce 最佳实践

我正在解析由 Apache、Nginx、Darwin(视频流服务器)生成的访问日志,并按日期/引荐来源网址/用户代理汇总每个交付文件的统计信息。

每小时生成大量日志,而且这个数字在不久的将来可能会急剧增加 - 因此通过 Amazon Elastic MapReduce 以分布式方式处理此类数据听起来很合理。

现在我已经准备好使用映射器和减速器来处理我的数据并使用以下流程测试整个过程:

  • 将映射器、reducers 和数据上传到 Amazon S3
  • 配置适当的作业并成功处理
  • 从 Amazon S3 下载聚合结果到我的服务器并通过运行 CLI 脚本将它们插入 MySQL 数据库

我已经根据互联网上数以千计的关于 Amazon ERM 的教程手动完成了这项工作。

接下来我该怎么办?自动化此过程的最佳方法是什么?

  • 我应该通过 API 控制 Amazon EMR jobTracker 吗?
  • 如何确保我的日志不会被处理两次?
  • 将已处理文件移动到存档的最佳方法是什么?
  • 将结果插入 PostgreSQL/MySQL 的最佳方法是什么?
  • 应如何在输入/输出目录中布置作业数据?
  • 我应该每次使用 API 创建一个新的 EMR 作业吗?
  • 将原始日志上传到 Amazon S3 的最佳方法是什么?
  • 任何人都可以分享他们的数据处理流程设置吗?
  • 如何控制文件上传和作业完成?

我认为本主题对许多尝试使用 Amazon Elastic MapReduce 处理访问日志但无法找到好的材料和/或最佳实践的人很有用。

UPD:在这里澄清一下最后一个问题:

由 Amazon Elastic MapReduce 提供支持的日志处理的最佳实践是什么?

相关文章:

将数据传入和传出 Elastic MapReduce HDFS

0 投票
2 回答
1678 浏览

php - 我们如何从 AWS SDK for PHP 传递 Hadoop 流的参数?

我正在尝试通过 AWS SDK for PHP 添加一些工作。我能够成功启动集群并通过 API 启动新的作业流程,但在尝试创建 Hadoop Streaming 步骤时出现错误。

这是我的代码:

我收到如下错误:无效的流参数'-input s3://.... -output s3://..... -mapper s3://....../mapper.php -reducer s3://...../reducer.php"

所以不清楚如何将参数传递给 Hadoop Streaming JAR ?

官方 AWS SDK for PHP 文档不提供任何示例或文档。

可能相关的未答复线程:

使用 aws php sdk 将参数传递给 hive 脚本

0 投票
1 回答
214 浏览

python - hadoop-streaming:工作完成后自动进行后处理?

第 1 步 - 我有一个 hadoop 流作业,它需要根据处理数据量的可变时间 第 2 步 - 工作完成后,我需要将所有数据转储导入 mongodb 并从中创建一个平面 csv 文件

问题
有什么方法可以使用 hadoop 流将步骤 2 粘合到步骤 1 并避免手动执行步骤 2?

0 投票
1 回答
2042 浏览

hadoop - 如何在 Hadoop 流中设置每个节点的最大减速器数量?

我有一个基于 C++ 的 MapReduce 作业,并且正在使用 Hadoop 流。

7但是,即使我18在命令行配置中将它们设置为;每个节点的最大减速器数量最终也是如此mapred.tasktracker.reduce.tasks.maximum=18

还有什么可以阻止 reducer 发出更多的 reduce 任务吗?

0 投票
2 回答
4286 浏览

hadoop - 将目录而不是文件传递给hadoop-streaming?

在我的工作中,我需要解析许多历史日志集。个别客户(有数千个)可能有数百个按日期划分的日志子目录。例如:

  • 日志/Customer_One/2011-01-02-001
  • 日志/Customer_One/2012-02-03-001
  • 日志/Customer_One/2012-02-03-002
  • 日志/Customer_Two/2009-03-03-001
  • 日志/Customer_Two/2009-03-03-002

每个单独的日志集本身可能有五到六级深度并包含数千个文件。

因此,我实际上希望单个地图作业能够处理遍历子目录:简单地枚举单个文件是我的分布式计算问题的一部分!

不幸的是,当我尝试将仅包含日志子目录的目录传递给 Hadoop 时,它抱怨我无法将这些子目录传递给我的映射器。(同样,我已经写信接受子目录作为输入):

$ hadoop jar "${HADOOP_HOME}/contrib/streaming/hadoop-streaming-${HADOOP_VERSION}.jar" -input file:///mnt/logs/Customer_Name/ -file mapper.sh -mapper "mapper.sh" -file reducer.sh -reducer "reducer.sh" -output .

[ . . . ]

12/04/10 12:48:35 ERROR security.UserGroupInformation: PriviledgedActionException as:cloudera (auth:SIMPLE) cause:java.io.IOException: Not a file: file:/mnt/logs/Customer_Name/2011-05-20-003 12/04/10 12:48:35 ERROR streaming.StreamJob: Error Launching job : Not a file: file:/mnt/logs/Customer_Name/2011-05-20-003 Streaming Command Failed! [cloudera@localhost ~]$

有没有一种直接的方法来说服 Hadoop-streaming 允许我将目录分配为工作项?