2011-01-18 15 views
5

Próbuję uruchomić zadanie Map-Reduce w Hadoop Streaming ze skryptami w języku Python i otrzymuję te same błędy co Hadoop Streaming Job failed error in python, ale te rozwiązania nie działają dla mnie.Zadanie Hadoop Streaming nie powiodło się (nie powiodło się) w Pythonie

Moje skrypty działają poprawnie, gdy uruchomię "kot sample.txt | ./p1mapper.py | sort | ./p1reducer.py"

Ale kiedy biegnę, co następuje:

./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 

(Uwaga: Nawet jeśli usunąć „python” lub wpisz pełną ścieżkę dla -mapper i -reducer, wynik jest taki sam)

to wyjście uzyskać:

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! 

Dla każdego Failed/zabiło Próba Task:

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) 

Oto moje skrypty Pythona: p1mapper.py

#!/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

#!/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) 

naprawdę wdzięczni za każdą pomoc, dzięki!

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

może być problem z konfiguracją można również zamieścić swoje HDFS-site.xml i mapred Prosimy o konfigurację -site.xml. –

+0

Wklejony powyżej. Wielkie dzięki Joe! – sirentian

Odpowiedz

4

Brakuje wielu konfiguracjach i trzeba zdefiniować katalogi i taki. Zobacz tutaj:

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

Ukazuje operacja jest jak działania pseudo-rozprowadzany opisanego powyżej, z wyjątkiem:

  1. Określ nazwę hosta lub adres IP serwera głównego w wartościach fs.default. nazwa i mapred.job.tracker w conf/hadoop-site.xml. Są one określone jako pary host: port.
  2. Podaj katalogi dla dfs.name.dir i dfs.data.dir w conf/hadoop-site.xml. Służą one do utrzymywania rozproszonych danych systemu plików odpowiednio na węźle głównym i slave. Zauważ, że dfs.data.dir może zawierać listę nazw katalogów oddzielonych spacjami lub przecinkami, dzięki czemu dane mogą być przechowywane na wielu urządzeniach.
  3. Podaj mapred.local.dir w conf/hadoop-site.xml. Określa, gdzie zostaną zapisane tymczasowe dane MapReduce. Może to być również lista katalogów.
  4. Podaj mapred.map.tasks i mapred.reduce.tasks w conf/mapred-default.xml. Z reguły używaj 10x liczby procesorów podrzędnych dla mapred.map.tasks i 2x liczba procesorów podrzędnych dla mapred.reduce.tasks.
  5. Lista wszystkich hostów slave lub adresy IP w conf/plik niewolnikami, po jednej w wierszu i upewnij jobtracker znajduje się w pliku/etc/hosts, wskazujący na węźle jobtracker
0

dobrze, zatrzymany na tej samej problem w ciągu 2 dni teraz .. rozwiązanie że Joe przewidziane w jego other post działa dobrze dla mnie ..

Jako rozwiązanie problemu sugeruję:

1) ślepo i tylko ślepo instrukcje, w jaki sposób konfiguracja klastra z jednym węzłem here (Zakładam, że już to zrobiłeś)

2) Jeżeli gdziekolwiek w obliczu java.io.IOException: Niezgodny błąd namespaceIDs (znajdziesz go jeśli przeanalizować logi), zajrzyj here

3) usunąć wszystkie cudzysłowy z Twojej POLECENIE w Twojej przykład uruchomić

./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 

to śmieszne, ale to był punkt, w którym ja zatrzymany przez 2 całych dni

Powiązane problemy