在运行用 Ruby 编写的 Amazon EMR 流式作业时,如何需要外部库?
我已经定义了我的映射器,并且在我的日志中得到了这个输出。
mntvarlibhadoopmapredtaskTrackerjobcachejob_201008110139_0001attempt_201008110139_0001_m_000000_0work.mapper_stage1.rb:第1行:require:命令未找到。
我的第一反应是,要么是流媒体jar没有意识到它在执行一个ruby脚本(我在脚本顶部有一个指向usrbinruby的shebang声明),要么是流媒体API处理引用外部库的方式有问题。
目前在Amazon Elastic Mapreduce中,usrbinruby是一个指向usrbinruby1.8的符号链接。 这是一个危险的解释器,因为它是古老和错误的。
$ /usr/bin/ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
如果你使用的是64位实例之一(比如m1.xlarge),你可以安装一下 Ruby企业版 中的一个引导动作。 这将进入usrlocalbin,它比原版Ruby1.8有更高的路径解析优先级,所以service-nanny(shebangs usrbinruby)仍然可以工作,而你的脚本可以运行在2011年建立的解释器上,有更高的补丁级别。