HDFS文件系统的URL

5

我有一些数据存储在HDFS的/user/Cloudera/Test/*路径下。通过运行hdfs -dfs -cat Test/*命令,我可以很好地查看记录。

现在,我需要将同样的文件作为RDD在Scala中读取。我已经在Scala shell中尝试了以下操作。

val file = sc.textFile("hdfs://quickstart.cloudera:8020/user/Cloudera/Test")

我编写了一些过滤器和for循环来读取单词。但是当我最后使用Println时,它会显示文件未找到。

请问有人可以帮我确定在这种情况下HDFS的URL是什么吗? 注意:我正在使用Cloudera CDH5.0虚拟机。


/user/Cloudera/Test/ 是一个文本文件吗?看起来更像是一个文件夹。 - Raphael Roth
2个回答

3
如果您正在尝试在Spark作业中访问文件,那么您可以简单地使用URL。
val file = sc.textFile("/user/Cloudera/Test") 

Spark将自动检测此文件。您无需添加localhost作为前缀,因为默认情况下,Spark作业从HDFS目录中读取它们。

希望这能解决您的问题。


它没有起作用。我可以通过执行“hdfs dfs -cat hdfs:/user/cloudera/temp.txt”来查看内容..... 然而,[val file = sc.textFile("hdfs:/user/Cloudera/temp.txt")] 抛出错误路径不存在。 - Srikant Sahu
如果您在Spark或Hadoop中运行作业,不需要使用HDfS作为前缀,它们会自动在HDfS中搜索数据文件,您不需要提及它。只需保留为/user/Cloudera/temp.txt即可。 - siddhartha jain
如果我使用"/user/Cloudera/temp.txt",我会得到这个错误 - 输入路径不存在:hdfs://quickstart.cloudera:8020/user/Cloudera/temp.txt。 - Srikant Sahu
你确定/user/Cloudera/temp.txt中的C是大写的吗?实际上,到目前为止我使用的所有Cloudera系统中,user文件夹内的cloudera文件夹都是小写的。如果这不是问题的原因,那么我建议你尝试其他目录,比如/temp/temp.txt,因为我建议的结构在我的集群中是有效的。 - siddhartha jain
太棒了!将Cloudera更改为cloudera就可以了。没想到文件夹名称是区分大小写的。谢谢。 - Srikant Sahu

0

不要使用“quickstart.cloudera”和端口,而是直接使用IP地址:

val file = sc.textFile("hdfs://<ip>/user/Cloudera/Test")

个人而言,我会不鼓励使用IP地址,因为服务器IP地址会发生变化,而主机名往往是静态的。 - Fredulom
val file = sc.textFile("hdfs://localhost/user/Cloudera/temp.txt") 抛出错误,路径不存在。 - Srikant Sahu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接