0
I는 라인으로 큰 파일의 라인을 판독하고, 각 행에서의 동작을 수행하고 출력 인쇄 다음 간단한 mrjob
스크립트 가지고hadoop 러너 만드는 법?
#!/usr/bin/env python
from mrjob.job import MRJob
class LineProcessor(MRJob):
def mapper(self, _, line):
yield (line.upper(), None) # toy example: mapper just uppercase the line
if __name__ == '__main__':
# mr_job = LineProcessor(args=['-r', 'hadoop', '/path/to/input']) # error!
mr_job = LineProcessor(args=['/path/to/input'])
with mr_job.make_runner() as runner:
runner.run()
for line in runner.stream_output():
key, value = mr_job.parse_output_line(line)
print key.encode('utf-8') # don't care about value in my case
(이것은 단지 장난감 예이며, 각 라인의 처리가 비싸다 내 실제 경우에는 배포를 원한다.)
로컬 프로세스로만 작동합니다. 내가 '-r', 'hadoop'
를 사용하려고하면 (주석 참조 위) I 얻을 다음과 같은 이상한 오류 :
File "mrjob/runner.py", line 727, in _get_steps
'error getting step information: %s', stderr)
Exception: ('error getting step information: %s', 'Traceback (most recent call last):\n File "script.py", line 11, in <module>\n with mr_job.make_runner() as runner:\n File "mrjob/job.py", line 515, in make_runner\n " __main__, which doesn\'t work." % w)\nmrjob.job.UsageError: make_runner() was called with --steps. This probably means you tried to use it from __main__, which doesn\'t work.\n')
가 어떻게 실제로 즉 HadoopJobRunner
를 작성, 하둡에서 실행할 수 있습니다?
Hadoop Streaming 작업으로 실행하지 않는 이유가 있습니까? 예 : http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/ –
링크를 제공해 주셔서 감사합니다. 나는 편의성과 단순성을 위해 주로 mrjob을 선호합니다. hdfs와 데이터를 수동으로 복사하고 싶지 않습니다. 출력 형식을 쉽게 제어 할 수 있기를 원합니다. 하나의 파이썬 스크립트로 모든 것을 원합니다. 로컬 (테스트 용)과 hadoop에서 실행하는 것을 쉽게 전환하고 싶습니다. – Frank
프랭크 문제가 내 것과 똑같습니다. 나는 hadoop sanboxes/clusters/emr/(azure?)의 다른 유형에 대한 주자를 구성하는 방법을 이해하려고합니다. 당신은 당신의 연구와 함께 더있어? – Enzo