为什么hadoop流在执行hadoop作业时不导入python包?

f45qwnt8  于 2021-05-31  发布在  Hadoop
关注(0)|答案(0)|浏览(218)

请参见下面的hadoop(3.2.1)错误打印输出,以及我到目前为止的调查摘要:
错误:java.lang.runtimeexception:pipemapred.waitoutputthreads():org.apache.hadoop.streaming.pipemapred.waitoutputthreads(pipemapred)处的子进程失败,代码为1。java:326)在org.apache.hadoop.streaming.pipemapred.mapredfinished(pipemapred。java:539)在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:465)在org.apache.hadoop.mapred.maptask.run(maptask。java:349)在org.apache.hadoop.mapred.yarnchild$2.run(yarnchild。java:174)在javax.security.auth.subject.doas(主题)中的java.security.accesscontroller.doprivileged(本机方法)。java:422)在org.apache.hadoop.security.usergroupinformation.doas(usergroupinformation。java:1730)在org.apache.hadoop.mapred.yarnchild.main(yarnchild。java:168)
通过浏览与以下hadoop错误打印输出相关的几乎所有可能的线程,这似乎是出于各种原因引发的:
最常见的是python文件不是可执行的,
或者代码中的某个地方有python错误。
在我的例子中,通过花费数小时的测试和消除过程,我发现每当我导入一个特定的库,比如pandas、nltk、spacy或任何可能的情况(“os”、“sys”、“re”都可以正常工作)时,就会出现这种情况。我现在知道是这样的,因为我还发现了一个失败的作业后的hadoop错误日志,如下所示(无法上传屏幕截图):

cd /usr/local/hadoop/logs/userlogs/application_1596371805267_0001/container_1596371805267_0001_01_000002

cat stderr

返回:importerror:没有名为pandas的模块
每当我使用下面的linux命令测试作业时,都不会抛出错误。因此,我知道库安装在正确的用户中,没有语法错误:

cat input_text.csv | python3 mapper.py

一旦我在代码开头注解掉“import pandas”(或除os、sys和re之外的任何其他库),hadoop作业就可以正常运行了。有人知道为什么hadoop不能获取这些python库吗?正如我提到的,只要我不导入这些包,hadoop就可以正常工作——有什么python配置需要修复吗?任何建议是非常感谢,让我知道如果有任何进一步的信息需要。我没有在这篇文章中包括mapper,因为据我所知,它在不导入包的情况下工作得很好,但是每当导入pandas、nltk、spacy等包时就会失败(不管它是只导入一个还是全部这些包)。
欲了解更多信息,请访问以下网站:
python版本:python 3.6.8
hadoop:3.2.1-单机版
hadoop流命令(仅Map):

hadoop jar /usr/local/hadoop/share/hadoop/tools/lib/hadoop-streaming-3.2.1.jar \
-D mapred.reduce.tasks=0 \
-file $HDUSER_PATH/mapper_clean2.py \
-mapper 'python3 mapper_clean2.py' \
-input $HDFS_PATH/input/combined_tweets_noheader.csv \
-output $HDFS_PATH/output_job1

配置文件(本地计算机):
mapred-site.xml:

<configuration>
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

<property>
    <name>yarn.app.mapreduce.am.env</name>
    <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>

<property>
    <name>mapreduce.map.env</name>
    <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>

<property>
    <name>mapreduce.reduce.env</name>
    <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
</property>

</configuration>

core-site.xml:

<configuration>
<property>
    <name>hadoop.tmp.dir</name>
    <value>/app/hadoop/tmp</value>
    <description>A base for other temporary directories.</description>
</property>

<property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:9000</value>
</property>
</configuration>

yarn-site.xml:

<configuration>
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
</configuration

hdfs-site.xml:

<configuration>
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>

<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/usr/local/hadoop_store/hdfs/namenode</value>
</property>

<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/usr/local/hadoop_store/hdfs/datanode</value>
</property>
</configuration>

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题