【问题标题】:Spark: hdfs cluster modeSpark:hdfs集群模式
【发布时间】:2016-10-02 01:49:45
【问题描述】:

我刚刚开始使用 Apache Spark。我正在使用集群模式(master、slave1、slave2),我想处理一个保存在 Hadoop(hdfs)中的大文件。我正在使用 SparkContext 中的 textFile 方法;在处理文件时,我监视节点,我可以看到只有 slave2 正在工作。处理后slave2有任务slave1没有任务。 如果我使用本地文件而不是使用 hdfs,那么两个从站同时工作。 我不明白为什么会有这种行为。请问,谁能给我一个线索?

【问题讨论】:

    标签: apache-spark hdfs


    【解决方案1】:

    这种行为的主要原因是数据局部性的概念。当 Spark 的 Application Master 请求创建新的 executor 时,会尝试将它们分配到数据所在的同一节点中。

    即在您的情况下,HDFS 很可能已将文件的所有块写入同一节点上。因此 Spark 将实例化该节点上的执行程序。相反,如果您使用本地文件,它将存在于所有节点中,因此数据局部性将不再是问题。

    【讨论】:

    • 谢谢@mark91。所以,没有办法使用 HDFS 并让所有节点都工作,对吧?
    • 我认为使用 Spark 使用所有集群资源所需的不是 HDFS 在从属服务器上分发数据的方式。实现这一点的主要方法是控制执行器的数量和 Spark 使用的分区数量。增加它们,您将利用集群中的更多资源。无论如何,如果您关心执行器在集群中的分布方式,您应该考虑 HDFS 的副本因素。拥有 3 个副本因子意味着 3 个节点将具有相同的拆分,因此所有节点都符合条件..
    猜你喜欢
    • 2019-12-22
    • 2021-12-22
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 2018-05-03
    • 2015-01-10
    • 2014-11-19
    • 1970-01-01
    相关资源
    最近更新 更多