【发布时间】:2014-07-03 12:54:51
【问题描述】:
在单个节点上安装 Hadoop 2.2 后,我尝试使用以下命令运行 Scalding 教程第 1 部分:
$ yarn jar target/scalding-tutorial-0.8.11.jar Tutorial0 --hdfs
https://github.com/Cascading/scalding-tutorial/
在运行教程之前,我已将所需文件 hello.txt 复制到 HDFS:
$ hdfs dfs -ls /data
Found 2 items
drwxr-xr-x - hdfs hdfs 0 2014-02-04 16:35 /data/10gsort
-rw-r--r-- 3 hdfs hdfs 26 2014-07-03 15:07 /data/hello.txt
看起来教程找不到输入文件:
Exception in thread "main" com.twitter.scalding.InvalidSourceException:[TextLine(data/hello.txt)] Data is missing from one or more paths in: List(data/hello.txt)
at com.twitter.scalding.FileSource.validateTaps(FileSource.scala:102)
at com.twitter.scalding.Job$$anonfun$validateSources$1.apply(Job.scala:158)
at com.twitter.scalding.Job$$anonfun$validateSources$1.apply(Job.scala:153)
at scala.collection.Iterator$class.foreach(Iterator.scala:727)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1156)
at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
at com.twitter.scalding.Job.validateSources(Job.scala:153)
at com.twitter.scalding.Job.buildFlow(Job.scala:91)
at com.twitter.scalding.Job.run(Job.scala:126)
at com.twitter.scalding.Tool.start$1(Tool.scala:109)
at com.twitter.scalding.Tool.run(Tool.scala:125)
at com.twitter.scalding.Tool.run(Tool.scala:72)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at JobRunner$.main(JobRunner.scala:27)
at JobRunner.main(JobRunner.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
任何想法如何使它工作?
【问题讨论】:
-
看起来它在寻找
data/hello.txt而不是/data/hello.txt,可能是这样吗? -
是的,在我看来也一样。但是我该如何解决这个问题?每个教程程序都可以在
local和hdfs模式下工作。当--hdfs参数给出教程代码`hadoop.util.ToolRunner.run(new hadoop.conf.Configuration, new Tool, args);` 时,应该注意将参数data/hello.txt适当地转换为/data/hello.txt。但事实并非如此。 -
其实
data/hello.txt和/data/hello.txt是不一样的。你熟悉相对路径和绝对路径吗? -
是的,我是。 Scalding 还附带了一个 ruby 脚本
scald.rb来运行 Scalding 作业。它允许使用单个开关从本地开发切换到 hadoop 模式。这意味着将参数路径从本地转换为 hdfs 路径,例如data/hello.txt到/data/hello.txt,我假设。但我没有看到教程在哪里运行这个脚本......