簡體   English   中英

Hadoop MapReduce function 給出錯誤。 流媒體命令失敗

[英]Hadoop MapReduce function is giving an error. Streaming Command Failed

將mapper.py、reducer.py、count_word_data.txt文件保存在C:\BigData\Hadoop-3.2.2目錄下。

給出初始命令

hadoop-3.2.2\bin\>hdfs fs -mkdir input

hadoop-3.2.2\bin\>hdfs fs -copyFromLocal C:\BigData\Hadoop-3.2.2\count_word_data.txt /input

映射器.py

#!/usr/bin/python -O

import sys

for line in sys.stdin:
    line = line.strip()
    keys = line.split()
    for key in keys:
        value = 1
        print("{}".format(key)," {} ".format(value))

減速器.py

#!/usr/bin/python -O

import sys

last_key = None
running_total = 0

for input_line in sys.stdin:
   input_line = input_line.strip()
   this_key, value = input_line.split("\t", 1)
   value = int(value)

   if last_key == this_key:
       running_total += value
   else:
       if last_key:
           print( "%s\t%d" % (last_key, running_total) )
       running_total = value
       last_key = this_key

if last_key == this_key:
   print( "%s\t%d" % (last_key, running_total) )

要運行這些 python 文件,我使用了 Hadoop 命令

Hadoop jar C:/BigData/hadoop-3.2.2/share/Hadoop/tools/lib/hadoop-streaming-3.2.2.jar -mapper “python C:/BigData/hadoop-3.2.2/mapper.py” -reducer “C:/BigData/hadoop-3.2.2/reducer.py” -input “input/count_word_data.txt” -output “input/output”

之后它給了我這個錯誤

雖然我已經在系統環境變量中正確指定了所有路徑(Python,Hadoop,JAVA,SPARK)。我不知道為什么我會遇到這個錯誤。

2022-02-10 18:33:09,065 INFO Configuration.deprecation: mapred.job.id is deprecated. Instead, use mapreduce.job.id
2022-02-10 18:33:09,065 INFO Configuration.deprecation: user.name is deprecated. Instead, use mapreduce.job.user.name
2022-02-10 18:33:09,066 INFO Configuration.deprecation: mapred.task.partition is deprecated. Instead, use mapreduce.task.partition
2022-02-10 18:33:09,075 ERROR streaming.PipeMapRed: configuration exception
java.io.IOException: Cannot run program "python": CreateProcess error=2, The system cannot find the file specified
        at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
        at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
        at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:209)
        at org.apache.hadoop.streaming.PipeMapper.configure(PipeMapper.java:66)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav

該系統找不到指定的文件

這個問題與Hadoop沒有直接關系。

任何一個:

  1. 該錯誤表明python未安裝(或在您的 Windows PATH上)。 要解決此問題,請確保您可以運行python -V ,它會顯示已安裝的版本。
  2. 它指的是您的 mapper/reducer 腳本,需要將其上傳到 HDFS,命令將實際運行的位置。 您可以使用更多選項來執行此-files C:\path\to\mapper.py,C:\path\to\reducer.py

您也不需要在輸入或 output 路徑上加引號。


我還要指出 PySpark 可以說是更好/更簡單的字數統計方法,它不需要 HDFS。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM