2015-12-07 4 views
1

У меня есть большой объем данных, хранящихся в системе HDFS (или, альтернативно, в Amazon S3).Прочитайте несколько файлов HDFS или S3-файлов с помощью mrjob?

Я хочу обработать его с помощью mrjob.

К сожалению, при запуске mrjob и дате имя файла HDFS или имя содержащего каталога, я получаю сообщение об ошибке.

Например, здесь у меня есть данные, хранящиеся в каталоге hdfs://user/hadoop/in1/. Для тестирования мой файл hdfs://user/hadoop/in1/BCES_FY2014_clean.csv, но в производстве я хочу, чтобы там было несколько файлов.

Файл присутствует:

$ hdfs dfs -ls /user/hadoop/in1/ 
Found 1 items 
-rw-r--r-- 1 hadoop hadoop 1771685 2015-12-07 03:05 /user/hadoop/in1/BCES_FY2014_clean.csv 
$ 

Но когда я пытаюсь запустить его с mrjob, я получаю эту ошибку:

$ python mrjob_salary_max.py -r hadoop hdfs://user/hadoop/in1/BCES_FY2014_clean.csv 
no configs found; falling back on auto-configuration 
no configs found; falling back on auto-configuration 
STDERR: -ls: java.net.UnknownHostException: user 
STDERR: Usage: hadoop fs [generic options] -ls [-d] [-h] [-R] [<path> ...] 
Traceback (most recent call last): 
    File "mrjob_salary_max.py", line 26, in <module> 
    salarymax.run() 
    File "/usr/local/lib/python2.6/site-packages/mrjob-0.4.6-py2.6.egg/mrjob/job.py", line 461, in run 
    mr_job.execute() 
    File "/usr/local/lib/python2.6/site-packages/mrjob-0.4.6-py2.6.egg/mrjob/job.py", line 479, in execute 
    super(MRJob, self).execute() 
    File "/usr/local/lib/python2.6/site-packages/mrjob-0.4.6-py2.6.egg/mrjob/launch.py", line 153, in execute 
    self.run_job() 
    File "/usr/local/lib/python2.6/site-packages/mrjob-0.4.6-py2.6.egg/mrjob/launch.py", line 216, in run_job 
    runner.run() 
    File "/usr/local/lib/python2.6/site-packages/mrjob-0.4.6-py2.6.egg/mrjob/runner.py", line 470, in run 
    self._run() 
    File "/usr/local/lib/python2.6/site-packages/mrjob-0.4.6-py2.6.egg/mrjob/hadoop.py", line 233, in _run 
    self._check_input_exists() 
    File "/usr/local/lib/python2.6/site-packages/mrjob-0.4.6-py2.6.egg/mrjob/hadoop.py", line 249, in _check_input_exists 
    'Input path %s does not exist!' % (path,)) 
AssertionError: Input path hdfs://user/hadoop/in1/BCES_FY2014_clean.csv does not exist! 
$ 

Это работает, когда mrjob считывает из локальной файловой системы, но это не будет масштабироваться.

ответ

0

Видимо правильный URL HDFS имеет три слэша после двоеточия:

python mrjob_salary_max.py -r hadoop hdfs:///user/hadoop/in1/BCES_FY2014_clean.csv 

он будет читать все файлы в каталоге, если вы просто предоставить каталог:

python mrjob_salary_max.py -r hadoop hdfs:///user/hadoop/in1/ 

 Смежные вопросы

  • Нет связанных вопросов^_^