sys.stdout.write() 在 MRJOB 映射器中去哪里?

Posted

技术标签:

【中文标题】sys.stdout.write() 在 MRJOB 映射器中去哪里?【英文标题】:Where does sys.stdout.write() go to in MRJOB mapper? 【发布时间】:2015-04-02 19:48:06 【问题描述】:

mrjob.conf

runners:
  emr:
    aws_access_key_id: **
    aws_secret_access_key: **
    aws_region: us-east-1
    aws_availability_zone: us-east-1a
    ec2_key_pair: scrapers2
    ec2_key_pair_file: ~/arachnid.pem
    ec2_instance_type: c3.8xlarge
    ec2_master_instance_type: c3.8xlarge
    num_ec2_instances: 3
    python_bin: python2.6
    interpreter: python2.6
    ami_version: 2.4.11
    iam_job_flow_role: EMR_DefaultRole
    jobconf: "mapred.task.timeout": 600000, "mapred.output.direct.NativeS3FileSystem": false
    base_tmp_dir: /tmp
    enable_emr_debugging: true
    cmdenv:
        TZ: America/New_York
    s3_log_uri: s3://mrjob-lists/tmp/logs/
    s3_scratch_uri: s3://mrjob-lists/tmp/
    output_dir: s3://mrjob-lists/output
    ssh_tunnel_is_open: true
    ssh_tunnel_to_job_tracker: true

我正在使用 emr 运行作业,我的映射器任务有:

print "test"

还有

sys.stdout.write("TEst")

但是,我在 S3 的标准输出文件中找不到此输出。输出写在哪里?

【问题讨论】:

【参考方案1】:

Hadoop 1 作业的映射器标准输出应出现在 /task-attempts/job_#####_##/attempt_#####_##_##/stdout.gz 下的 S3 日志中

这些推送到 S3 确实需要一些时间。如果您让集群保持运行,您可以检查 Hadoop JobTracker Web 界面,并确保它在作业执行后也出现在本地日志中。

【讨论】:

以上是关于sys.stdout.write() 在 MRJOB 映射器中去哪里?的主要内容,如果未能解决你的问题,请参考以下文章

[Python]sys.stdin.readline(), sys.stdout.write(), sys.stdin.write()

sys.stdout.write 和 print 的区别?

sys.stdout.write() 在 MRJOB 映射器中去哪里?

python中print(obj) 与sys.stdout.write()的区别

Python 标准输出 sys.stdout 重定向

python unicode处理print和sys.stdout.write之间的差异