使用Hadoop Map Reduce执行python脚本时,出现以下错误。但是,在本地执行脚本(不使用Mapreduce)时,效果很好。
当我从脚本中删除以下代码时,MapReduce可以正常工作。
df_notnull = df[df[column].notnull()].copy()
请告知我我做错了什么?
脚本:
#!/usr/local/bin/python3
import os
import sys
import pandas as pd
import string
column='first_name'
seperator_in='|'
seperator_out='|'
compression_in=None
compression_out=None
encrypted_value_list = []
df = pd.read_csv(sys.stdin, compression=compression_in, sep=seperator_in, low_memory=False, encoding='utf-8-sig')
df_notnull = df[df[column].notnull()].copy()
df_notnull.to_csv(sys.stdout, compression=compression_out, index=False, sep=seperator_out)
提交命令:
hadoop jar /usr/env/hadoop-mapreduce-client/hadoop-streaming.jar -D mapreduce.job.queuename=QueueName -D mapreduce.job.reduces=1 -file /file/path/pythonScript.py -mapper 'python3 pythonScript.py' -input /file/path/python_test.csv -output /file/path/ouput001/out_17
错误:
错误:java.lang.RuntimeException:PipeMapRed.waitOutputThreads():子进程失败,代码为1 在org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:322) 在org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:535) 在org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:130) 在org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:61) 在org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34) 在org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453) 在org.apache.hadoop.mapred.MapTask.run(MapTask.java:343) 在org.apache.hadoop.mapred.YarnChild $ 2.run(YarnChild.java:170) 在java.security.AccessController.doPrivileged(本机方法) 在javax.security.auth.Subject.doAs(Subject.java:422) 在org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1869) 在org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:164)