如何将 select 火花 运行 w.r.t hdfs

How spark select where to run w.r.t hdfs

当我开始使用大数据技术时,我了解到基本规则是“移动代码,而不是数据”。但我意识到我不知道它是如何工作的:spark 如何知道将代码移动到哪里?

我在这里说的是最开始的步骤,例如:从分布式文件中读取和一些地图操作。

  1. 如果是 hdfs 文件,spark 如何知道实际数据部分在哪里?什么是tool/protocol在工作?
  2. 是否因资源管理器(stand-alone-spark/yarn/mesos)而异?
  3. on-top-of-hdfs 存储应用程序如何,例如 hbase/hive?
  4. 如果其他分布式存储运行在同一台机器上(比如kafka)呢?
  5. 除了spark,类似的分布式引擎是否也一样,比如storm/flink?

编辑

对于 cassandra + spark,似乎(专用)连接器管理这个 数据位置

1) Spark 向 Hadoop 询问输入文件如何分布到 splits (another good explanation on splits) and turns splits into partitions. Check code of Spark's NewHadoopRDD:

override def getPartitions: Array[Partition] = {
  val inputFormat = inputFormatClass.newInstance
  inputFormat match {
    case configurable: Configurable =>
      configurable.setConf(_conf)
        case _ =>
      }
    val jobContext = newJobContext(_conf, jobId)
    val rawSplits = inputFormat.getSplits(jobContext).toArray
    val result = new Array[Partition](rawSplits.size)
    for (i <- 0 until rawSplits.size) {
      result(i) = new NewHadoopPartition(id, i, rawSplits(i).asInstanceOf[InputSplit with Writable])
    }
  result
}

2) 不是。这取决于文件的 Hadoop InputFormat。

3) 一样。

4) 机制类似,例如 KafkaRDD 实现将 Kafka 分区一对一映射到 Spark 分区。

5) 我相信他们使用相同的机制。