无法通过Python脚本中的HDFS访问目录

时间:2019-06-03 07:14:52

标签: python hadoop hdfs cloudera

我有以下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 个答案:

答案 0 :(得分:1)

Python在具有本地linux(或Windows)文件系统(FS)的单台计算机上运行。

Hadoop的HDFS项目是跨许多机器(节点)的分布式文件系统设置。

可能有一些自定义类可以在一台机器上读取HDFS数据,但是我什么都不知道,这违背了分布式计算的目的。

您可以通过hadoop fs -get hdfs://quickstart.cloudera:8020/user/cloudera/files /home/user/<target_directory_name>将Python中的数据从HDFS复制( 源HDFS位置=>目标本地FS位置 )到本地文件系统中诸如Spark,Hive或Impala之类的东西来处理/查询数据。

如果数据量很小,则将Cloudera Quickstart VM之类的文件从HDFS复制到Local FS以执行python脚本应该是有效的。