我需要将avro文件作为mrjob hadoop作业的输入。除非我将额外的命令传递给hadoop streaming jar,否则我找不到任何关于如何做的文档。这会使开发复杂化,因为我一直在使用inline
跑步者进行本地测试。如何将avro文件用作MRJob作业的输入?
是否有可能使用inline
跑步者用MRJob读取avro文件?
我需要将avro文件作为mrjob hadoop作业的输入。除非我将额外的命令传递给hadoop streaming jar,否则我找不到任何关于如何做的文档。这会使开发复杂化,因为我一直在使用inline
跑步者进行本地测试。如何将avro文件用作MRJob作业的输入?
是否有可能使用inline
跑步者用MRJob读取avro文件?
你需要的是告诉Hadoop的什么是你的Hadoop作业的你“输入格式”的格式:
hadoop jar hadoop-streaming.jar
;; other params go here
-inputformat org.apache.avro.mapred.AvroAsTextInputFormat
但我不知道你怎么运行MRJobs。如果您使用的是Plain Hadoop,我以前的解决方案正在运行。
由于Chiron解释您需要指定Hadoop输入格式。 这可以通过在MRJob
from mrjob.job import MRJob
from mrjob.protocol import JSONProtocol
class MRAvro(MRJob):
# Converts each AVRO record into one JSON record per line
HADOOP_INPUT_FORMAT = 'org.apache.avro.mapred.AvroAsTextInputFormat'
# Reads each JSON line into
INPUT_PROTOCOL = JSONProtocol
def mapper(self, avro_record, _):
# TODO
def reducer(self, key, values):
# TODO
在您的配置设置HADOOP_INPUT_FORMAT
选项,您需要确保为AvroAsTextInputFormat
.jar文件可在集群上完成;从v0.5.3开始,您可以在命令行使用--libjar
,或者在mrjob配置文件中配置libjars(v0.5.3未发布时;请参阅feature request中--libjar
的讨论)。
我不知道一个简单的方法来集成本地测试与AVRO(HADOOP_INPUT_FORMAT
被本地选手忽略)。一种解决方案是将您的测试数据与Apache avro-tools的tojson方法进行转换。
java -jar avro-tools-1.8.1.jar test_data.avro > test_data.json
否则,你可以写使用的Avro或fastavro库准备用于本地执行的数据在Python自己的函数。
谢谢,我昨天发现。我想我只需要安装一个本地hadoop实例并针对该实例进行开发,除非有其他答案... – jbrown