Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用RVM的Hadoop流媒体找不到Gem_Ruby_Hadoop_Gem_Rvm_Hadoop Streaming - Fatal编程技术网

Ruby 使用RVM的Hadoop流媒体找不到Gem

Ruby 使用RVM的Hadoop流媒体找不到Gem,ruby,hadoop,gem,rvm,hadoop-streaming,Ruby,Hadoop,Gem,Rvm,Hadoop Streaming,原始问题(下面的长版本)。简短版本:使用ruby脚本作为mapper运行hadoop streaming,并在所有集群节点上安装rvm,这是不可行的。因为hadoop启动的shell不知道ruby(并且没有正确加载rvm)。为什么? 我想用wukong作为一块宝石,为hadoop创造地图/减少就业机会。问题是hadoop无法加载wukonggem(即找不到)。Hadoop作业显示以下错误: /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_

原始问题(下面的长版本)。简短版本:使用ruby脚本作为mapper运行hadoop streaming,并在所有集群节点上安装rvm,这是不可行的。因为hadoop启动的shell不知道ruby(并且没有正确加载rvm)。为什么?


我想用
wukong
作为一块宝石,为hadoop创造地图/减少就业机会。问题是hadoop无法加载
wukong
gem(即找不到)。Hadoop作业显示以下错误:

/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- wukong (LoadError)
from /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /tmp/mapr-hadoop/mapred/local/taskTracker/admin/jobcache/job_201207061102_0068/attempt_201207061102_0068_m_000000_0/work/./test.rb:6:in `<main>'
java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:362)
at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:572)
at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:136)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:57)
at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:394)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:327)
at org.apache.hadoop.mapred.Child$4.run(Child.java:270)
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:1109)
at org.apache.hadoop.mapred.Child.main(Child.java:264)
它可以产生所有的宝石,包括
悟空

$stderr.puts $LOAD_PATH.inspect
生成与打印运行本地(不是由hadoop启动的)ruby脚本的
$LOAD\u PATH
时相同的examt路径

为什么hadoop启动的ruby脚本找不到gem,而gem显然已安装且工作正常


hadoop的发布时间为:

hadoop jar /opt/mapr/hadoop/hadoop-0.20.2/contrib/streaming/hadoop-0.20.2-dev-streaming.jar \
-libjars /opt/hypertable/current/lib/java/hypertable-0.9.5.6.jar,/opt/hypertable/current/lib/java/libthrift-0.8.0.jar \
-Dmapred.child.env="PATH=$PATH:/usr/local/rvm/bin/rvm" \
-mapper '/home/admin/wukong/test.rb --map' \
-file /home/admin/wukong/test.rb \
-reducer /bin/cat \
-input /test/test.rb \
-output /test/something2
你在用ruby吗

确保您运行:

rvm use 1.9.3
echo$GEM_PATH
应返回如下内容:

/usr/local/rvm/gems/ruby-1.9.3-p194:/usr/local/rvm/gems/ruby-1.9.3-p194@global

如果没有,则表示use命令不起作用。

不知何故,我通过重新启动集群中的所有机器,使它起作用。我假设
rvm
的来源不正确。尽管需要重新启动,但仍有问题。

请查看此处:

它展示了如何使用Hadoop流运行带有gems的ruby映射程序

我知道你问我已经三年了,但也许这会帮助别人

/usr/local/rvm/gems/ruby-1.9.3-p194:/usr/local/rvm/gems/ruby-1.9.3-p194@global