2013-12-16 4 views
3

요약하면 : "socket.error : MRJob을 사용하는 동안 [errno 104] 연결이 연결 해제 됨"예외입니다. 스크립트는 실제로 버킷 생성 및 일부 작은 파일 (AWS 콘솔을 통해 수동으로 확인)을 업로드하기 때문에 S3에 액세스 할 수 있습니다. 하지만 가장 큰 파일 인 INPUT은 업로드되지 않습니다. 이봐, 그것은 단지 7GB의 테스트 데이터이다!MRJob : socket.error : [Errno 104] 동료에 의한 연결이 재설정되었습니다.

4 번 시도한 결과 항상 오류가 발생했습니다.

mrjob의 == 0.4.2

CONFIG

# cat /etc/mrjob.conf 
runners: 
    inline: 
    base_tmp_dir: /home/tmp 
    emr: 
    base_tmp_dir: /home/tmp 

    aws_access_key_id: [VALID KEY HERE] 
    aws_secret_access_key: [VALID SECRET HERE] 
    aws_region: us-east-1 
    ec2_instance_type: m1.medium 
    num_ec2_instances: 7 

역 추적

# python /home/bigdata/mr_job_1.py -r emr /home/filesystem/INPUT > /home/filesystem/OUTPUT 
using configs in /etc/mrjob.conf 
creating new scratch bucket mrjob-f02b7cd37b2bfffd 
using s3://mrjob-f02b7cd37b2bfffd/tmp/ as our scratch dir on S3 
creating tmp directory /home/tmp/mr_job_1.root.20131216.152251.298419 
writing master bootstrap script to /home/tmp/mr_job_1.root.20131216.152251.298419/b.py 
creating S3 bucket 'mrjob-f02b7cd37b2bfffd' to use as scratch space 
Copying non-input files into s3://mrjob-f02b7cd37b2bfffd/tmp/mr_job_1.root.20131216.152251.298419/files/ 
Traceback (most recent call last): 
    File "/home/bigdata/workers/process_data/mr_job_1.py", line 178, in <module> 
    MRSwapData().run() 
    File "/usr/local/lib/python2.7/dist-packages/mrjob/job.py", line 494, in run 
    mr_job.execute() 
    File "/usr/local/lib/python2.7/dist-packages/mrjob/job.py", line 512, in execute 
    super(MRJob, self).execute() 
    File "/usr/local/lib/python2.7/dist-packages/mrjob/launch.py", line 147, in execute 
    self.run_job() 
    File "/usr/local/lib/python2.7/dist-packages/mrjob/launch.py", line 208, in run_job 
    runner.run() 
    File "/usr/local/lib/python2.7/dist-packages/mrjob/runner.py", line 458, in run 
    self._run() 
    File "/usr/local/lib/python2.7/dist-packages/mrjob/emr.py", line 806, in _run 
    self._prepare_for_launch() 
    File "/usr/local/lib/python2.7/dist-packages/mrjob/emr.py", line 817, in _prepare_for_launch 
    self._upload_local_files_to_s3() 
    File "/usr/local/lib/python2.7/dist-packages/mrjob/emr.py", line 905, in _upload_local_files_to_s3 
    s3_key.set_contents_from_filename(path) 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 1290, in set_contents_from_filename 
    encrypt_key=encrypt_key) 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 1221, in set_contents_from_file 
    chunked_transfer=chunked_transfer, size=size) 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 713, in send_file 
    chunked_transfer=chunked_transfer, size=size) 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 889, in _send_file_internal 
    query_args=query_args 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 547, in make_request 
    retry_handler=retry_handler 
    File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 947, in make_request 
    retry_handler=retry_handler) 
    File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 908, in _mexe 
    raise e 
socket.error: [Errno 104] Connection reset by peer 

답변

1

나도이 문제에 달렸다. 나는 코드를 훑어 보았고 boto가 PleaseRetryException을 발생 시키거나 self.http_exceptions 유형을 예외로 만든 것을 발견했다. 예외의 한 가지 유형 일뿐만 아니라 이러한 코드를 내 코드로 가져오고 싶지 않아 대신 다음과 같은 작업을 수행합니다.

should_try_again = True 

while should_try_again: 
    try: 
    method_that_calls_boto() 
    should_try_again = False 
    except Exception as e: 
    print('Exception: %s' % e) 
    time.sleep(5) 
관련 문제