tri*_*ons 5 java hadoop classpath
我想弄清楚如何设置引用HDFS的类路径?我找不到任何参考.
java -cp "how to reference to HDFS?" com.MyProgram
Run Code Online (Sandbox Code Playgroud)
如果我不能引用hadoop文件系统,那么我必须在每个hadoop机器上复制$ HADOOP_HOME下的所有引用的第三方库/ jar ...但我想通过将文件放到hadoop文件系统来避免这种情况.这可能吗?
用于程序运行的示例hadoop命令行(我的期望是这样的,也许我错了):
hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-1.0.3.jar -input inputfileDir -output outputfileDir -mapper /home/nanshi/myprog.java -reducer NONE -file /home/nanshi/myprog.java
Run Code Online (Sandbox Code Playgroud)
但是,在上面的命令行中,我如何添加java classpath?喜欢-cp"/home/nanshi/wiki/Lucene/lib/lucene-core-3.6.0.jar:/home/nanshi/Lucene/bin"
Ani*_*Jha 11
我想你要做的是在你的分布式程序中包含第三方库.你可以做很多选择.
选项1)我发现最简单的选项是将所有jar放在所有节点上的$ HADOOP_HOME/lib(例如/usr/local/hadoop-0.22.0/lib)目录中,然后重新启动jobtracker和tasktracker.
选项2)使用libjars选项命令,这是hadoop jar -libjars comma_seperated_jars
选项3)将jar包含在jar的lib目录中.在创建jar时你必须这样做.
选项4)安装计算机中的所有jar并将其位置包含在类路径中.
选项5)您可以尝试将这些jar放在分布式缓存中.
您无法将 HDFS 路径添加到类路径中。java 可执行文件将无法解释如下内容:
hdfs://path/to/your/file
Run Code Online (Sandbox Code Playgroud)
但是,可以使用-libjars选项将第三方库添加到需要这些库的每个任务的类路径中。这意味着您需要有一个所谓的驱动程序类(实现Tool),它可以设置并启动您的作业,并在运行该驱动程序类时在命令行上使用 -libjars 选项。反过来,该工具使用 GenericParser 来解析您的命令行参数(包括 -libjars),并在 JobClient 的帮助下完成所有必要的工作,将您的 lib 发送到所有需要它们的机器,并将它们设置在那些机器。
除此之外,为了运行 MR 作业,您应该使用位于发行版 bin/ 目录中的 hadoop 脚本。
这是一个示例(使用包含您的作业和驱动程序类的 jar):
hadoop jar jarfilename.jar DriverClassInTheJar
-libjars comma-separated-list-of-libs <input> <output>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27654 次 |
| 最近记录: |