2015-08-24 79 views
1

我新的火花......一些基本的东西要通过基本面的时候我不明白:星火基础

查询1.分发处理 - 可以激发无HDFS的工作 - 在群集上的Hadoop文件系统(如通过创建它自己的分布式文件系统),还是需要一些基本的分布式文件系统,如HDFS,GPFS等的必备条件。

查询2.如果我们已经有一个文件加载到HDFS中块) - 然后将再次将Spark转换为块并在其级别重新分配(用于分布式处理),或者将按照Haddop HDFS群集使用块分配。

查询3.除定义DAG外,SPARK还创建像MapReduce那样的分区并将分区拖动到Reducer节点以进行进一步计算? 我很困惑,因为直到创建DAG,很明显,在每个Worker节点上工作的Spark Executor将数据块加载为内存中的RDD,并且按照DAG应用计算....但是部件需要用于分区数据按照Keys的要求,并将它们带到Reducer任务将执行的其他节点(就像mapreduce),这是如何在内存中完成的?

回答

1

这会更好地被要求作为单独的问题,问题3很难理解。无论如何:

  1. 不,Spark不需要分布式文件系统。
  2. 默认情况下,Spark将为每个HDFS块创建一个分区,并在可能的情况下将计算与数据共同定位。
  3. 您正在问什么shuffle。随机播放器会在映射器上创建块,以便减速器从中取出。 spark.shuffle.memoryFraction参数控制要分配多少内存来洗刷块文件。 (默认为20%)。spark.shuffle.spill参数用于控制当内存用完时是否将随机播放块溢出到本地磁盘。
+1

感谢@Daniel回答所有三个问题,下次会更加清楚。 你是对的我的查询只与Shuffle有关....从你的回答中得到更多我假设参数:spark.shuffle.memoryFraction和spark.shuffle.spill都适用于映射器 - 当Shuffle创建块时使用。 Reducer节点会发生什么?它会直接在内存中获取混洗块,还是首先将块写入Reducer节点磁盘,然后加载到内存中进行计算。 – Kansingh

+0

伟大的问题!我认为减速器也可能泄漏到磁盘。这些问题最好通过检查代码来解决,但洗牌代码的结构相当复杂。也许这是这个地方:https://github.com/apache/spark/blob/v1.4.1/core/src/main/scala/org/apache/spark/shuffle/hash/HashShuffleReader.scala#L55 –

0

查询1.对于分发处理 - Spark可以在没有HDFS的情况下工作吗?

对于分布式处理,星火不需要HDFS。但它可以读/写HDFS系统的数据。对于某些用例,它可能会将数据写入HDFS。对于teragen排序世界纪录节目,它使用HDFS排序数据而不是使用in-memoery。

Spark不提供分布式存储。但是与HDFS的集成是存储的一种选择。但星星之火可以在本文使用其他存储系统,如Cassnadra等深入了解更多详情:https://gigaom.com/2012/07/11/because-hadoop-isnt-perfect-8-ways-to-replace-hdfs/

查询2.如果我们已经在HDFS加载的文件(如分布式块) - 然后将再次星火将其转换为块并在其级别重新分配

我同意Daniel Darabos的回应。 Spark将为每个HDFS块创建一个分区。

问题3:在洗牌

根据数据的大小,将洗牌在内存中进行或者它可以使用磁盘(例如teragen分选),或者它可以使用两者。在Spark shuffle上看看这个优秀的article

很好。如果您没有足够的内存来存储整个“地图”输出会怎么样?您可能需要将中间数据泄露到磁盘。参数spark.shuffle.spill负责启用/禁用溢出,默认情况下启用溢出

在将溢出溢出到磁盘之前可用于存储“映射”输出的内存量为“JVM堆大小”* spark.shuffle.memoryFraction * spark.shuffle.safetyFraction,默认值为“JVM堆大小”* 0.2 * 0.8 =“JVM堆大小”* 0.16。

0

查询1. 是的,它也可以与其他人一起工作。如果你有相应的RDD实现它,当你实际上通过在HDFS中打开一个文件来创建一个RDD时,它固有地创建了一个HADOOP RDD,它具有理解HDFS的实现,如果你编写自己的分布式文件系统可以编写你自己的实现,并实例化它完成的类。但是将连接器RDD写入我们自己的DFS是一项挑战。对于更多你可以看看在火花代码

查询2.它不会重新创建,而是我的HADOOP/HDFS RDD连接器的手段,它知道块的位置。它也会尝试使用相同的纱线节点运行jvm任务来执行处理。

查询3.不知道这

0

查询1: - 对于简单的火花提供分发,因为抽象RDD(是轻快分发数据集)的处理,没有这HDFS提供水湿分配存储。

问题2: - 无它不会recreate.Here火花将提供每块作为分区(这意味着参考该块),所以它相同的块上启动纱线

问题3: - 不知道。