2016-12-24 8 views
2

Я пытаюсь запустить Mrjob example из книги Hadoop с Python на моем ноутбуке в псевдораспределенном режиме.Mrjob в режиме hadoop: Ошибка запуска задания, неправильный путь ввода: Файл не существует

(файл salaries.csv можно найти here)

Так что я могу начать NameNode и DataNode:

start-dfs.sh 

возвращается:

Starting namenodes on [localhost] 
localhost: starting namenode, logging to /home/me/hadoop-2.7.3/logs/hadoop-me-namenode-me-Notebook-PC.out 
localhost: starting datanode, logging to /home/me/hadoop-2.7.3/logs/hadoop-me-datanode-me-Notebook-PC.out 
Starting secondary namenodes [0.0.0.0] 
0.0.0.0: starting secondarynamenode, logging to /home/me/hadoop-2.7.3/logs/hadoop-me-secondarynamenode-me-Notebook-PC.out 

Я также нет никаких проблем создание структуры входного файла и копирование salaries.csv в hdfs:

hdfs dfs -mkdir /user/ 
hdfs dfs -mkdir /user/me/ 
hdfs dfs -mkdir /user/me/input/ 
hdfs dfs -put /home/me/Desktop/work/cv/hadoop/salaries.csv /user/me/input/ 
hdfs dfs -ls /user/me/input/ 

возвращается:

Found 1 items 
-rw-r--r-- 3 me supergroup 1771685 2016-12-24 15:57 /user/me/input/salaries.csv 

Я также сделать top_salaries.py исполняемым:

sudo chmod a+x /home/me/Desktop/work/cv/hadoop/top_salaries.py 

lauching top_salaries.py в локальном режиме работает также:

python2 top_salaries.py -r local salaries.csv > answer.csv 

возвращается:

No configs found; falling back on auto-configuration 
Creating temp directory /tmp/top_salaries.me.20161224.195052.762894 
Running step 1 of 1... 
Counters: 1 
    warn 
     missing gross=3223 
Counters: 1 
    warn 
     missing gross=3223 
Streaming final output from /tmp/top_salaries.me.20161224.195052.762894/output... 
Removing temp directory /tmp/top_salaries.me.20161224.195052.762894... 

однако, работает эта работа на Hadoop (положить вещи вместе) python2 top_salaries.py -r hadoop hdfs:///user/me/input/salaries.csv возвращается:

No configs found; falling back on auto-configuration 
Looking for hadoop binary in $PATH... 
Found hadoop binary: /home/me/hadoop-2.7.3/bin/hadoop 
Using Hadoop version 2.7.3 
Looking for Hadoop streaming jar in /home/me/hadoop-2.7.3... 
Found Hadoop streaming jar: /home/me/hadoop-2.7.3/share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar 
Creating temp directory /tmp/top_salaries.me.20161224.195201.967990 
Copying local files to hdfs:///user/me/tmp/mrjob/top_salaries.me.20161224.195201.967990/files/... 
Running step 1 of 1... 
    session.id is deprecated. Instead, use dfs.metrics.session-id 
    Initializing JVM Metrics with processName=JobTracker, sessionId= 
    Cannot initialize JVM Metrics with processName=JobTracker, sessionId= - already initialized 
    Cleaning up the staging area file:/tmp/hadoop-me/mapred/staging/me553683497/.staging/job_local553683497_0001 
    Error launching job , bad input path : File does not exist: /tmp/hadoop-me/mapred/staging/me553683497/.staging/job_local553683497_0001/files/mrjob.zip#mrjob.zip 
    Streaming Command Failed! 
Attempting to fetch counters from logs... 
Can't fetch history log; missing job ID 
No counters found 
Scanning logs for probable cause of failure... 
Can't fetch history log; missing job ID 
Can't fetch task logs; missing application ID 
Step 1 of 1 failed: Command '['/home/me/hadoop-2.7.3/bin/hadoop', 'jar', '/home/me/hadoop-2.7.3/share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar', '-files', 'hdfs:///user/me/tmp/mrjob/top_salaries.me.20161224.195201.967990/files/mrjob.zip#mrjob.zip,hdfs:///user/me/tmp/mrjob/top_salaries.me.20161224.195201.967990/files/setup-wrapper.sh#setup-wrapper.sh,hdfs:///user/me/tmp/mrjob/top_salaries.me.20161224.195201.967990/files/top_salaries.py#top_salaries.py', '-input', 'hdfs:///user/me/input/salaries.csv', '-output', 'hdfs:///user/me/tmp/mrjob/top_salaries.me.20161224.195201.967990/output', '-mapper', 'sh -ex setup-wrapper.sh python top_salaries.py --step-num=0 --mapper', '-combiner', 'sh -ex setup-wrapper.sh python top_salaries.py --step-num=0 --combiner', '-reducer', 'sh -ex setup-wrapper.sh python top_salaries.py --step-num=0 --reducer']' returned non-zero exit status 512 

Edit:

это мое ядро-site.xml:

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

и это мой hdfs-site.xml:

<configuration> 
    <property> 
     <name>dfs.namenode.name.dir</name> 
     <value>/home/me/Desktop/work/cv/hadoop/namenode</value> 
    </property> 
    <property> 
     <name>dfs.datanode.data.dir</name> 
     <value>/home/me/Desktop/work/cv/hadoop/datanode</value> 
    </property> 
</configuration> 

(другие файлы XML конфигурации, я не редактируются/изменено)

edit2:

здесь сценарий Python (такой же, как на ссылке GitHub выше)

from mrjob.job import MRJob 
from mrjob.step import MRStep 
import csv 

cols = 'Name,JobTitle,AgencyID,Agency,HireDate,AnnualSalary,GrossPay'.split(',') 

class salarymax(MRJob): 

    def mapper(self, _, line): 
     # Convert each line into a dictionary 
     row = dict(zip(cols, [ a.strip() for a in csv.reader([line]).next()])) 

     # Yield the salary 
     yield 'salary', (float(row['AnnualSalary'][1:]), line) 

     # Yield the gross pay 
     try: 
      yield 'gross', (float(row['GrossPay'][1:]), line) 
     except ValueError: 
      self.increment_counter('warn', 'missing gross', 1) 

    def reducer(self, key, values): 
     topten = [] 

     # For 'salary' and 'gross' compute the top 10 
     for p in values: 
      topten.append(p) 
      topten.sort() 
      topten = topten[-10:] 

     for p in topten: 
      yield key, p 

    combiner = reducer 

if __name__ == '__main__': 
salarymax.run() 
+1

он не может найти файл /tmp/hadoop-me/mapred/staging/me118248587/.staging/job_local118248587_0001/files/mrjob.zip#mrjob.zip проверить копию своего файла. – AdamSkywalker

+1

xml-файлы не имеют значения, я вижу пути, начинающиеся с/tmp/hadoop-me, hdfs: /// user/me, hdfs: /// user/hduser, это немного грязно. Job не может найти mrjob.zip # mrjob.zip, проверьте, как вы устанавливаете входные файлы для hadoop – AdamSkywalker

+0

Ha! Хороший улов. Но что мне делать, чтобы это исправить? Я вижу, что теперь это грязно, но где я устанавливаю эти каталоги, чтобы он был более аккуратным? – user189035

ответ

1

Ok.Вам нужно отредактировать файл core-site.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
<configuration> 
    <property> 
     <name>fs.default.name</name> 
     <value>hdfs://master:9000</value> 
    </property> 
</configuration> 

и файл hdfs-site.xml как:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
<configuration> 
    <property> 
     <name>dfs.replication</name> 
     <value>2</value> 
    </property> 
    <property> 
     <name>dfs.permissions</name> 
     <value>false</value> 
    </property> 
    <property> 
     <name>dfs.namenode.name.dir</name> 
     <value>/home/edureka/hadoop-2.7.3/namenode</value> 
    </property> 
    <property> 
     <name>dfs.datanode.data.dir</name> 
     <value>/home/edureka/hadoop-2.7.3/datanode</value> 
    </property> 
</configuration> 

и вам нужно отредактировать hdfs-site.xml как:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
<configuration> 
    <property> 
     <name>dfs.replication</name> 
     <value>2</value> 
    </property> 
    <property> 
     <name>dfs.permissions</name> 
     <value>false</value> 
    </property> 
    <property> 
     <name>dfs.datanode.data.dir</name> 
     <value>/home/edureka/hadoop-2.7.3/datanode</value> 
    </property> 
</configuration> 

и вам необходимо создать mapred-site.xml файл с контентом:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
<configuration> 
    <property> 
     <name>mapreduce.framework.name</name> 
     <value>yarn</value> 
    </property> 
</configuration> 

и вам нужно отредактировать yarn-site.xml содержать:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
<configuration> 
    <property> 
     <name>yarn.nodemanager.aux-services</name> 
     <value>mapreduce_shuffle</value> 
    </property> 
    <property> 
     <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name> 
     <value>org.apache.hadoop.mapred.ShuffleHandler</value> 
    </property> 
</configuration> 

Затем сделайте:

start-dfs.sh 
start-yarn.sh 

затем сделать:

hdfs dfs -mkdir /user/ 
hdfs dfs -mkdir /user/me/ 
hdfs dfs -mkdir /user/me/input/ 
hdfs dfs -put /home/me/Desktop/work/cv/hadoop/salaries.csv /user/me/input/ 

делает сейчас:

sudo chmod a+x /home/me/Desktop/work/cv/hadoop/top_salaries.py 
python2 top_salaries.py -r hadoop hdfs:///user/me/input/salaries.csv > answer.csv 

работы.