【问题标题】:How to load data into spark from a remote HDFS?如何从远程 HDFS 将数据加载到 spark 中?
【发布时间】:2022-11-03 02:24:44
【问题描述】:

我们的数据存储在远程 Hadoop 集群中,但是为了做一些 PoC,我需要在我的机器上本地运行 spark 应用程序。如何从远程 HDFS 加载数据?

【问题讨论】:

  • 对于 PoC,只需将数据从 HDFS 复制到您的计算机 :)

标签: apache-spark hadoop hdfs


【解决方案1】:

您可以configure spark 访问您有权访问的任何 hadoop 实例。(端口打开,节点可访问)

自定义 Hadoop/Hive 配置

如果您的 Spark 应用程序正在与 Hadoop、Hive 或两者交互,则可能存在 Hadoop/Hive Spark 的类路径中的配置文件。

多个正在运行的应用程序可能需要不同的 Hadoop/Hive 客户端配置。可以复制修改hdfs-site.xml, Spark 的类路径中的 core-site.xml、yarn-site.xml、hive-site.xml 每个应用程序。在 YARN 上运行的 Spark 集群中,这些 配置文件是在集群范围内设置的,不能安全地更改 由应用程序。

当您想要访问 HDFS 时,您需要:您尝试访问的集群中的 hdfs-site.xml 和 core-site.xml。

【讨论】:

  • 从技术上讲,不需要 XML 文件。您可以在运行时修改 hadoopConfiguration / SparkSession
  • 100% 正确,只是更方便地使用它们以避免拼写错误。但你是对的,它们不是必需的。
【解决方案2】:

对于任何想要从 Spark Java 应用程序访问远程 HDFS 的人,这里是步骤。

首先,您需要在运行命令中添加 --conf 键。取决于 Spark 版本:

  • (火花 1.x-2.1) spark.yarn.access.namenodes=hdfs://clusterS,hdfs://cluster
  • (Spark 2.2+) spark.yarn.access.hadoopFileSystems=hdfs://clusterA,hdfs://clusterB

其次,当你创建 Spark 的 Java 上下文时,添加:

javaSparkContext.hadoopConfiguration().addResource(new Path("core-site-clusterB.xml"));
javaSparkContext.hadoopConfiguration().addResource(new Path("hdfs-site-clusterB.xml"));

如果您遇到此异常:

java.net.UnknownHostException:clusterB

然后尝试将带有端口(而不是 hdfs/cluster 短名称)的远程 HDFS 的完整名称节点地址放入 --conf 到您的运行命令中。

更多细节在我的文章中:https://mchesnavsky.tech/spark-java-access-remote-hdfs

【讨论】:

    猜你喜欢
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 2018-11-18
    相关资源
    最近更新 更多