【问题标题】:Requiring external libraries in ruby streaming scripts for Amazon EMRAmazon EMR 的 ruby​​ 流脚本中需要外部库
【发布时间】:2010-08-11 02:17:49
【问题描述】:

在运行用 Ruby 编写的 Amazon EMR 流式传输作业时,我如何需要外部库?

我已经定义了我的映射器,并且在我的日志中得到了这个输出:

/mnt/var/lib/hadoop/mapred/taskTracker/jobcache/job_201008110139_0001/attempt_201008110139_0001_m_000000_0/work/./mapper_stage1.rb: 第 1 行:要求:找不到命令

我的第一反应是流 jar 没有意识到它正在执行一个 ruby​​ 脚本(我在脚本顶部有一个指向 /usr/bin/ruby 的 shebang 声明)或者有一些时髦的东西继续流式 API 处理引用外部库的方式。

【问题讨论】:

  • 看起来它没有被 ruby​​ 执行。您可以尝试添加类似将 RUBY_VERSION 放在顶部...
  • 这正是问题所在——它正在通过 sh 执行我的 ruby​​ 脚本。通过在从 cms 行工具启动作业时显式声明 ruby​​ 解释器解决了该特定问题(即: --mapper 'ruby s3://mybucket/mymapper.rb 将在我实际成功运行时更新 - 面临目前还有其他几个问题。感谢您的指点!
  • 如果您使用#!/usr/bin/env ruby,脚本将使用在 PATH 中找到的第一个 ruby​​ 解释器执行。

标签: ruby amazon-web-services hadoop mapreduce


【解决方案1】:

目前在 Amazon Elastic Mapreduce 中,/usr/bin/ruby 是指向 /usr/bin/ruby1.8 的符号链接。这是一个危险的解释器使用,因为它是古老的和错误的。

$ /usr/bin/ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]

如果您使用的是 64 位实例之一(例如 m1.xlarge),您可以在引导操作中安装 Ruby Enterprise Edition。这进入 /usr/local/bin ,它的路径解析优先级高于库存 Ruby1.8,因此 service-nanny(shebangs /usr/bin/ruby)仍然有效,而您的脚本可以在具有于 2011 年构建,补丁级别更高。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    相关资源
    最近更新 更多