如何将 select 火花 运行 w.r.t hdfs
How spark select where to run w.r.t hdfs
当我开始使用大数据技术时,我了解到基本规则是“移动代码,而不是数据”。但我意识到我不知道它是如何工作的:spark 如何知道将代码移动到哪里?
我在这里说的是最开始的步骤,例如:从分布式文件中读取和一些地图操作。
- 如果是 hdfs 文件,spark 如何知道实际数据部分在哪里?什么是tool/protocol在工作?
- 是否因资源管理器(stand-alone-spark/yarn/mesos)而异?
- on-top-of-hdfs 存储应用程序如何,例如 hbase/hive?
- 如果其他分布式存储运行在同一台机器上(比如kafka)呢?
- 除了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) 我相信他们使用相同的机制。
当我开始使用大数据技术时,我了解到基本规则是“移动代码,而不是数据”。但我意识到我不知道它是如何工作的:spark 如何知道将代码移动到哪里?
我在这里说的是最开始的步骤,例如:从分布式文件中读取和一些地图操作。
- 如果是 hdfs 文件,spark 如何知道实际数据部分在哪里?什么是tool/protocol在工作?
- 是否因资源管理器(stand-alone-spark/yarn/mesos)而异?
- on-top-of-hdfs 存储应用程序如何,例如 hbase/hive?
- 如果其他分布式存储运行在同一台机器上(比如kafka)呢?
- 除了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) 我相信他们使用相同的机制。