Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Hadoop流媒体在执行Hadoop作业时不导入Python包?_Hadoop_Mapreduce_Package_Hadoop2_Hadoop Streaming - Fatal编程技术网

为什么Hadoop流媒体在执行Hadoop作业时不导入Python包?

为什么Hadoop流媒体在执行Hadoop作业时不导入Python包?,hadoop,mapreduce,package,hadoop2,hadoop-streaming,Hadoop,Mapreduce,Package,Hadoop2,Hadoop Streaming,请参阅以下Hadoop(3.2.1)错误打印输出,以及我到目前为止的调查总结: 错误:java.lang.RuntimeException:PipeMapRed.waitOutputThreads(): 子进程失败,代码为1 org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:326) 在 org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(Pip

请参阅以下Hadoop(3.2.1)错误打印输出,以及我到目前为止的调查总结:

错误:java.lang.RuntimeException:PipeMapRed.waitOutputThreads(): 子进程失败,代码为1 org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.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)位于 java.security.AccessController.doPrivileged(本机方法)位于 javax.security.auth.Subject.doAs(Subject.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错误日志,如下所示(无法上传屏幕截图):

返回: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流式处理命令(仅地图):

配置文件(本地计算机):

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>
<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>
<configuration>
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
</configuration
<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>

mapreduce.framework.name
纱线
warn.app.mapreduce.am.env
HADOOP\u MAPRED\u HOME=/usr/local/HADOOP
mapreduce.map.env
HADOOP\u MAPRED\u HOME=/usr/local/HADOOP
mapreduce.reduce.env
HADOOP\u MAPRED\u HOME=/usr/local/HADOOP
core 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>
<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>
<configuration>
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
</configuration
<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>

hadoop.tmp.dir
/app/hadoop/tmp
其他临时目录的基础。
fs.default.name
hdfs://localhost:9000
纱线站点.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>
<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>
<configuration>
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
</configuration
<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>

纱线.节点管理器.辅助服务
mapreduce_shuffle

您是否在所有工作节点上安装了这些python包?因为
'os',sys',re'
是默认的python包。但是像熊猫、nltk、spacy这样的软件包就不是了。谢谢你的反馈。出于测试目的,我只在单个节点上运行Hadoop(希望最终会转到集群)。我知道在集群中也需要安装库,但不幸的是,在这种情况下,这不是问题所在。检查一下,您是否在所有工作节点上安装了这些python包?因为
'os',sys',re'
是默认的python包。但是像熊猫、nltk、spacy这样的软件包就不是了。谢谢你的反馈。出于测试目的,我只在单个节点上运行Hadoop(希望最终会转到集群)。我知道在集群中也需要安装库,但不幸的是,在这种情况下这不是问题所在