【问题标题】:Spark Web UI "take at SerDeUtil.scala:201" interpretationSpark Web UI "take at SerDeUtil.scala:201" 解释
【发布时间】:2016-07-30 02:42:26
【问题描述】:

我正在创建 Spark RDD,方法是使用 python 中的 elasticsearch-hadoop 连接器从 Elasticsearch 加载数据(导入 pyspark):

es_cluster_read_conf = {
    "es.nodes" : "XXX",
    "es.port" : "XXX",
    "es.resource" : "XXX"
}

es_cluster_rdd = sc.newAPIHadoopRDD(
        inputFormatClass="org.elasticsearch.hadoop.mr.EsInputFormat",
        keyClass="org.apache.hadoop.io.NullWritable", 
        valueClass="org.elasticsearch.hadoop.mr.LinkedMapWritable", 
        conf=es_cluster_read_conf)

现在,如果我的文件中只有这 2 个命令并运行它,在 Spark Web UI 上的应用程序详细信息中,我在工作中看到:take at SerDeUtil.scala:201

我现在有 2 个问题:

1) 我的印象是 Spark RDD 是惰性计算的,也就是说,如果没有应用任何操作,就不会启动任何作业。在上述场景中,我没有应用任何操作,但我看到作业正在 Web UI 上运行。

2) 如果这是一份工作,那么这个"take" 操作究竟意味着什么?这是否意味着数据实际上是从我的 ElasticSearch 节点加载并传递给 Spark 节点的?我理解有些工作被列为收集、计数等,因为这些是 Spark 中的有效操作。但是,即使经过大量研究,我仍然无法弄清楚这个take 操作的语义。

【问题讨论】:

    标签: apache-spark pyspark elasticsearch-hadoop


    【解决方案1】:

    我的印象是 Spark RDD 是惰性计算的,即如果没有应用任何操作,就不会启动任何作业。我

    这或多或少是正确的,尽管有一些例外情况可以由辅助任务触发,例如创建分区程序、JVM 和来宾语言之间的数据转换。当您使用高级Dataset API 和Dataframes 时,情况会更加复杂。

    如果这是一项工作,那么这个“接受”操作究竟意味着什么?这是否意味着数据实际上是从我的 ElasticSearch 节点加载并传递给 Spark 节点的?

    这是一项工作,实际上从源中获取了一些数据。需要确定键值对的序列化器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多