【问题标题】:Url for HDFS file systemHDFS 文件系统的 URL
【发布时间】:2017-06-02 01:25:57
【问题描述】:

我在 HDFS /user/Cloudera/Test/* 中有一些数据。通过运行hdfs -dfs -cat Test/*,我可以很好地查看记录。

现在是同一个文件,我需要在 scala 中将其作为 RDD 读取。 我在 scala shell 中尝试过以下操作。

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

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

谁能帮我知道在这种情况下 HDFS url 是什么。 注意:我使用的是 Cloudera CDH5.0 VM

【问题讨论】:

  • /user/Cloudera/Test/ 是文本文件吗?它看起来更像是一个文件夹

标签: scala hadoop cloudera bigdata


【解决方案1】:

如果您尝试在 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")] 抛出错误路径不存在。
  • 如果您在 spark 或 Hadoop 中运行作业,请不要使用 HDfS 作为前缀,它们会自动在 HDfS 中搜索您不需要提及的数据文件。保留它 /user/Cloudera/temp.txt
  • 如果我使用“/user/Cloudera/temp.txt”我得到这个错误 - 输入路径不存在:hdfs://quickstart.cloudera:8020/user/Cloudera/temp.txt
  • 你确定 /user/Cloudera/temp.txt 中的 C 是大写的,实际上是我迄今为止使用的 Cloudera 系统,在所有这些系统中,用户文件夹中的 cloudera 文件夹都是小写字母。如果这不是问题,那么我建议您尝试使用任何其他目录,例如 /temp/temp.txt,因为我建议您的结构在我的集群中工作。
  • 太棒了!将 Cloudera 更改为 cloudera 有效。没有意识到文件夹名称区分大小写。谢谢。
【解决方案2】:

不使用“quickstart.cloudera”和端口,只使用ip地址:

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

【讨论】:

  • 就我个人而言,我不鼓励使用 IP 地址,因为服务器 IP 地址会发生变化,而主机名往往是静态的。
  • val file = sc.textFile("hdfs://localhost/user/Cloudera/temp.txt") 抛出错误路径不存在
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多