我有一个包含大量文件的HDFS目录。当我尝试通过Web界面进入目录时,浏览器挂起。当我尝试通过命令行(hadoop fs -ls /user/loom/many_files_dir/
)列出文件时,我得到了
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8
[Unloading class sun.reflect.GeneratedMethodAccessor1]
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.Arrays.copyOf(Arrays.java:2882)
......
我希望有一些python方法可以枚举目录中的文件(或者其他脚本语言)。你能跟我说说吗?
答案 0 :(得分:1)
我建议您使用snakebite http://snakebite.readthedocs.org/en/latest/client.html#snakebite.client.Client.ls
client = snakebite.client.Client(host, port=8020)
list(client.ls(["/user/loom/many_files_dir/"]))
这直接与namenode对话以获取列表,而不调用本地JVM。
答案 1 :(得分:1)
您现在可能对此处的新python-hdfs交互操作感兴趣:http://hdfs3.readthedocs.org/en/latest/
from hdfs3 import HDFileSystem
hdfs = HDFileSystem(host=host, port=8020)
hdfs.ls("/user/loom/many_files_dir/")