2011-01-18 26 views
5

Hadoop StreamingでMap-ReduceジョブをPythonスクリプトで実行しようとしていて、同じエラーがHadoop Streaming Job failed error in pythonとなっていましたが、PythonでHadoopストリーミングジョブが失敗しました(成功していません)

私が実行したときに私のスクリプトが正常に動作 "猫SAMPLE.TXT |ソート| | ./p1mapper.pyを./p1reducer.py"

しかし、私は次のコマンドを実行します。

./bin/hadoop jar contrib/streaming/hadoop-0.20.2-streaming.jar \ 
    -input "p1input/*" \ 
    -output p1output \ 
    -mapper "python p1mapper.py" \ 
    -reducer "python p1reducer.py" \ 
    -file /Users/Tish/Desktop/HW1/p1mapper.py \ 
    -file /Users/Tish/Desktop/HW1/p1reducer.py 

( NB:私は「パイソン」を削除するか、-mapperと-reducerの完全なパス名を入力しても、結果は同じである)

これは、私が手に出力されます:

packageJobJar: [/Users/Tish/Desktop/HW1/p1mapper.py, /Users/Tish/Desktop/CS246/HW1/p1reducer.py, /Users/Tish/Documents/workspace/hadoop-0.20.2/tmp/hadoop-unjar4363616744311424878/] [] /var/folders/Mk/MkDxFxURFZmLg+gkCGdO9U+++TM/-Tmp-/streamjob3714058030803466665.jar tmpDir=null 
11/01/18 03:02:52 INFO mapred.FileInputFormat: Total input paths to process : 1 
11/01/18 03:02:52 INFO streaming.StreamJob: getLocalDirs(): [tmp/mapred/local] 
11/01/18 03:02:52 INFO streaming.StreamJob: Running job: job_201101180237_0005 
11/01/18 03:02:52 INFO streaming.StreamJob: To kill this job, run: 
11/01/18 03:02:52 INFO streaming.StreamJob: /Users/Tish/Documents/workspace/hadoop-0.20.2/bin/../bin/hadoop job -Dmapred.job.tracker=localhost:54311 -kill job_201101180237_0005 
11/01/18 03:02:52 INFO streaming.StreamJob: Tracking URL: http://www.glassdoor.com:50030/jobdetails.jsp?jobid=job_201101180237_0005 
11/01/18 03:02:53 INFO streaming.StreamJob: map 0% reduce 0% 
11/01/18 03:03:05 INFO streaming.StreamJob: map 100% reduce 0% 
11/01/18 03:03:44 INFO streaming.StreamJob: map 50% reduce 0% 
11/01/18 03:03:47 INFO streaming.StreamJob: map 100% reduce 100% 
11/01/18 03:03:47 INFO streaming.StreamJob: To kill this job, run: 
11/01/18 03:03:47 INFO streaming.StreamJob: /Users/Tish/Documents/workspace/hadoop-0.20.2/bin/../bin/hadoop job -Dmapred.job.tracker=localhost:54311 -kill job_201101180237_0005 
11/01/18 03:03:47 INFO streaming.StreamJob: Tracking URL: http://www.glassdoor.com:50030/jobdetails.jsp?jobid=job_201101180237_0005 
11/01/18 03:03:47 ERROR streaming.StreamJob: Job not Successful! 
11/01/18 03:03:47 INFO streaming.StreamJob: killJob... 
Streaming Job Failed! 
各失敗しました/殺したタスクの試みのために

:、 p1mapper.py

#!/usr/bin/env python 

from operator import itemgetter 
import sys 

word2count = {} 

for line in sys.stdin: 
    word, count = line.split(' ', 1) 
    try: 
     count = int(count) 
     word2count[word] = word2count.get(word, 0) + count 
    except ValueError: # count was not a number 
     pass 

# sort 
sorted_word2count = sorted(word2count.items(), key=itemgetter(1), reverse=True) 

# write the top 3 sequences 
for word, count in sorted_word2count[0:3]: 
    print '%s\t%s'% (word, count) 

は、任意の助けに感謝本当に思い

#!/usr/bin/env python 

import sys 
import re 

SEQ_LEN = 4 

eos = re.compile('(?<=[a-zA-Z])\.') # period preceded by an alphabet 
ignore = re.compile('[\W\d]') 

for line in sys.stdin: 
    array = re.split(eos, line) 
    for sent in array: 
     sent = ignore.sub('', sent) 
     sent = sent.lower() 
     if len(sent) >= SEQ_LEN: 
      for i in range(len(sent)-SEQ_LEN + 1): 
       print '%s 1' % sent[i:i+SEQ_LEN] 

p1reducer.py:

Map output lost, rescheduling: getMapOutput(attempt_201101181225_0001_m_000000_0,0) failed : 
org.apache.hadoop.util.DiskChecker$DiskErrorException: Could not find taskTracker/jobcache/job_201101181225_0001/attempt_201101181225_0001_m_000000_0/output/file.out.index in any of the configured local directories 
    at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathToRead(LocalDirAllocator.java:389) 
    at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathToRead(LocalDirAllocator.java:138) 
    at org.apache.hadoop.mapred.TaskTracker$MapOutputServlet.doGet(TaskTracker.java:2887) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:363) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) 
    at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:324) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:534) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:864) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:533) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:207) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:403) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:522) 

は、ここに私のPythonスクリプトですありがとう!

UPDATE:

HDFS-site.xmlを:

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 

<!-- Put site-specific property overrides in this file. --> 

<configuration> 

<property> 

      <name>dfs.replication</name> 

      <value>1</value> 

</property> 

</configuration> 

mapred-site.xmlを:

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 

<!-- Put site-specific property overrides in this file. --> 

<configuration> 

<property> 

      <name>mapred.job.tracker</name> 

      <value>localhost:54311</value> 

</property> 

</configuration> 
+0

のために立ち往生した時点で、設定問題である可能性がありました-site.xmlの設定をお願いします。 –

+0

上記貼り付け。ありがとうジョー! – sirentian

答えて

4

あなたは構成の多くが欠落していて、ディレクトリを定義する必要があり、そのような。ここを参照してください:

  1. fs.defaultの値でマスターサーバーのホスト名またはIPアドレスを指定します。

    http://wiki.apache.org/hadoop/QuickStart

    分散操作は除いて、ちょうど上記の疑似分散操作のようなものです。 conf/hadoop-site.xmlのnameとmapred.job.trackerを参照してください。これらはhost:portのペアとして指定されます。

  2. conf/hadoop-site.xmlにdfs.name.dirとdfs.data.dirのディレクトリを指定します。これらは、マスタノードとスレーブノードのそれぞれに分散ファイルシステムデータを保持するために使用されます。 dfs.data.dirには、複数のデバイスにデータを格納できるように、ディレクトリ名のスペースまたはカンマで区切られたリストが含まれる場合があることに注意してください。
  3. conf/hadoop-site.xmlにmapred.local.dirを指定します。これにより、一時的なMapReduceデータが書き込まれる場所が決まります。ディレクトリのリストでもあります。
  4. conf/mapred-default.xmlにmapred.map.tasksとmapred.reduce.tasksを指定します。経験則として、mapred.map.tasksにはスレーブプロセッサーの数を10倍、mapred.reduce.tasksにはスレーブプロセッサーの数を2倍にしてください。
  5. 一覧すべてのスレーブのホスト名またはIPアドレスをお使いの会/スレーブがファイルで、1行に1つずつとjobtrackerがあなたの/ etcにある/ホストが、私は同じ時に立ち往生、さてあなたjobtrackerノード
0

を指しているファイルを確認してください今2日間の問題...あなたの問題への解決策として、ジョーは私のためによく彼のother post作品に提供される解決策..

は、私がお勧め:

1)盲目的だけ盲目的方法についての指示に従ってください単一のノードクラスタをセットアップするhere(私はあなたがすでにそうしたと仮定します)

2)どこでも、あなたはにjava.io.IOException直面した場合:、(ログを調べる場合は、あなたがそれを見つけるでしょう)互換性のないnamespaceIDsエラーを見here

3を持っている)YOURからすべての二重引用符を削除COMMAND、あなたの例では

./bin/hadoop jar contrib/streaming/hadoop-0.20.2-streaming.jar \ 
    -input "p1input/*" \ 
    -output p1output \ 
    -mapper p1mapper.py \ 
    -reducer p1reducer.py \ 
    -file /Users/Tish/Desktop/HW1/p1mapper.py \ 
    -file /Users/Tish/Desktop/HW1/p1reducer.py 

を実行し、これはばかげているが、あなたはまた、あなたのHDFS-site.xmlのとmapredを投稿することができ、それは私が2全体日

関連する問題