我需要將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