Не удается получить доступ к каталогу из HDFS внутри скрипта Python - PullRequest
2 голосов
/ 03 июня 2019

У меня есть следующий скрипт Python (мне удалось запустить его локально):

#!/usr/bin/env python3

import folderstats

df = folderstats.folderstats('hdfs://quickstart.cloudera.8020/user/cloudera/files', hash_name='md5', ignore_hidden=True)

df.to_csv(r'hdfs://quickstart.cloudera.8020/user/cloudera/files.csv', sep=',', index=True)

У меня есть каталог: "файлы" в этом месте. Я проверил это через командную строку и даже с HUE, и это там.

(myproject) [cloudera@quickstart ~]$ hadoop fs -ls /user/cloudera
Found 1 items
drwxrwxrwx   - cloudera cloudera          0 2019-06-01 13:30 /user/cloudera/files

Проблема в том, что каталог не доступен.

Я попытался запустить его в своем локальном терминале: python3 script.py и даже с таким суперпользователем, как: sudo -u hdfs python3 script.py, и результат говорит:

Traceback (most recent call last):
  File "script.py", line 5, in <module>
    df = folderstats.folderstats('hdfs://quickstart.cloudera:8020/user/cloudera/files', hash_name='md5', ignore_hidden=True)
  File "/home/cloudera/miniconda3/envs/myproject/lib/python3.7/site-packages/folderstats/__init__.py", line 88, in folderstats
    verbose=verbose)
  File "/home/cloudera/miniconda3/envs/myproject/lib/python3.7/site-packages/folderstats/__init__.py", line 32, in _recursive_folderstats
    for f in os.listdir(folderpath):
FileNotFoundError: [Errno 2] No such file or directory: 'hdfs://quickstart.cloudera:8020/user/cloudera/files'

Не могли бы вы помочь мне прояснить этот вопрос?

Спасибо!

1 Ответ

1 голос
/ 04 июня 2019

Python запускается на одном компьютере с локальной файловой системой (FS) linux (или windows).

Проект HDFS Hadoop представляет собой настройку распределенной файловой системы на многих машинах (узлах).

Может существовать некоторый пользовательский класс для чтения данных HDFS на одном компьютере, однако я не знаю ни одного, и это противоречит цели распределенных вычислений.

Вы можете скопировать ( источникМестоположение HDFS => целевое расположение Local FS ) ваши данные из HDFS в локальную файловую систему через hadoop fs -get hdfs://quickstart.cloudera:8020/user/cloudera/files /home/user/<target_directory_name>, где Python живет или использует что-то вроде Spark, Hive или Impala для обработки / запроса данных.

Если объем данных достаточно мал, то копирование файлов из HDFS в Local FS для выполнения сценария Python должно быть эффективным для чего-то вроде Cloudera Quickstart VM.

...