使用Hadoop Streaming和新API文件格式时找不到类

0 投票
2 回答
522 浏览
提问于 2025-04-18 03:33

在使用Hadoop的Python流处理时,如果你用的是新的API,并且自定义了(Java)输出格式或者(Java)归约器类,就会出现找不到类的问题。而用旧的API时,这些都能正常工作。

也就是说,下面的命令行参数在旧API下可以正常使用,但在新API下就会有问题。

   -inputformat JavaClassName
   -outputformat JavaClassName
   -partitioner JavaClassName
   -combiner streamingCommand or JavaClassNam

举个例子,如果你查看这篇博客:http://research.neustar.biz/2011/08/30/custom-inputoutput-formats-in-hadoop-streaming/,如果你尝试用新的MultipleOutputs(归约器)来实现这个,可能会在本地Hadoop和AWS EMR上遇到问题。

有什么想法吗?

2 个回答

0

没错,看看这个链接:http://jira.pentaho.com/browse/PDI-11959

在使用 hadoop-streaming-2.6.0.jar 的时候,我也遇到了自定义分区器类的问题。最后我通过以下方法解决了:

  1. 导入 org.apache.hadoop.mapred 包,而不是相应的 mapreduce 包。
  2. 实现 Partitioner 接口,而不是继承 Partitioner 类。

我猜这和旧版的 API 是一样的。

0

看起来缺少了 -libjars 这个选项。你需要指定一个 jar 文件,这个文件里包含了自定义的格式和自定义的分区器。同时,在执行 hadoop 命令之前,还要把新创建的 jar 文件添加到环境变量 HADOOP_CLASSPATH 中,方法如下:

export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:Path-Custom-Format.jar

撰写回答