星火基础
Spark Fundamentals
我是 Spark 的新手...在学习基础知识时我不清楚一些基本的事情:
查询 1. 对于分布式处理 - Spark 可以在没有 HDFS 的情况下工作吗 - 集群上的 Hadoop 文件系统(比如通过创建它自己的分布式文件系统)或者它是否需要一些基本的分布式文件系统作为必要条件例如 HDFS、GPFS 等
查询 2。如果我们已经在 HDFS 中加载了一个文件(作为分布式块)——那么 Spark 会再次将其转换为块并在其级别重新分发(用于分布式处理),还是仅使用块分发作为根据 Haddop HDFS 集群。
问题 3. 除了定义 DAG 之外,SPARK 是否也像 MapReduce 那样创建分区并将分区洗牌到 reducer 节点以进行进一步计算?
我对此感到困惑,因为在创建 DAG 之前很明显,在每个 Worker 节点上工作的 Spark Executor 将数据块加载为内存中的 RDD,并且根据 DAG 应用计算......但是将数据分区到哪里是必需的每个 Keys 并将它们带到将执行 reducer 任务的其他节点(就像 mapreduce)这是如何在内存中完成的?
最好单独提问,因为问题 3 很难理解。不管怎样:
- 不,Spark 不需要分布式文件系统。
- 默认情况下,Spark 将为每个 HDFS 块创建一个分区,并在可能的情况下将计算与数据放在一起。
- 您问的是 shuffle。 Shuffle 在 reducer 将从中获取的映射器上创建块。
spark.shuffle.memoryFraction
参数控制分配给 shuffle 块文件的内存量。 (默认为 20%。)spark.shuffle.spill
参数控制当内存用完时是否将 shuffle 块溢出到本地磁盘。
Query 1. For distributing processing - Can Spark work without HDFS ?
对于分布式处理,Spark 不需要HDFS。但是可能read/write数据from/toHDFS系统。对于某些用例,它可能会将数据写入 HDFS。对于teragen排序世界纪录程序,它使用HDFS对数据进行排序,而不是使用in-memoery。
Spark 不提供分布式存储。但是与 HDFS
集成是存储的一种选择。但 Spark 可以使用其他存储系统,如 Cassnadra 等。有关详细信息,请查看本文:https://gigaom.com/2012/07/11/because-hadoop-isnt-perfect-8-ways-to-replace-hdfs/
Query 2. If we already have a file loaded in HDFS (as distributed blocks) - then will Spark again be converting it into blocks and redistributes at it's level
我同意 Daniel Darabos 的回应。 Spark 将为每个 HDFS 块创建一个分区。
Query 3: on shuffle
根据数据的大小,随机播放将在内存中完成,或者它可能使用磁盘(例如 teragen 排序),或者它可能同时使用两者。在 Spark shuffle 上看看这个优秀的 article。
Fine with this. What if you don’t have enough memory to store the whole “map” output? You might need to spill intermediate data to the disk. Parameter spark.shuffle.spill is responsible for enabling/disabling spilling, and by default spilling is enabled
The amount of memory that can be used for storing “map” outputs before spilling them to disk is “JVM Heap Size” * spark.shuffle.memoryFraction * spark.shuffle.safetyFraction, with default values it is “JVM Heap Size” * 0.2 * 0.8 = “JVM Heap Size” * 0.16.
查询 1。
是的,它也可以与其他人一起工作。 Spark 与 RDD 一起工作,如果您有相应的 RDD 实现就是这样。当您通过在 HDFS 中打开文件实际创建 RDD 时,它会固有地创建一个 HADOOP RDD,它具有理解 HDFS 的实现,如果您编写自己的分布式文件系统,您可以编写您自己的实现并实例化 class 它的完成。但是将连接器 RDD 写入我们自己的 DFS 是一个挑战。更多内容可以查看spark代码中的RDD接口
查询 2。它不会重新创建,而是我的 HADOOP/HDFS RDD 连接器,它知道块在哪里。它还会尝试使用相同的纱线节点到 运行 jvm要处理的任务。
查询 3。对此不确定
查询 1:- 对于简单的 spark,由于抽象 RDD(弹性分布式数据集)而提供分布式处理,如果没有 HDFS,则无法提供分布式存储。
查询 2:- 不,它不会 recreate.Here Spark 将提供每个块作为分区(这意味着对该块的引用)所以它在同一个块上启动纱线
查询 3:- 不知道。
我是 Spark 的新手...在学习基础知识时我不清楚一些基本的事情:
查询 1. 对于分布式处理 - Spark 可以在没有 HDFS 的情况下工作吗 - 集群上的 Hadoop 文件系统(比如通过创建它自己的分布式文件系统)或者它是否需要一些基本的分布式文件系统作为必要条件例如 HDFS、GPFS 等
查询 2。如果我们已经在 HDFS 中加载了一个文件(作为分布式块)——那么 Spark 会再次将其转换为块并在其级别重新分发(用于分布式处理),还是仅使用块分发作为根据 Haddop HDFS 集群。
问题 3. 除了定义 DAG 之外,SPARK 是否也像 MapReduce 那样创建分区并将分区洗牌到 reducer 节点以进行进一步计算? 我对此感到困惑,因为在创建 DAG 之前很明显,在每个 Worker 节点上工作的 Spark Executor 将数据块加载为内存中的 RDD,并且根据 DAG 应用计算......但是将数据分区到哪里是必需的每个 Keys 并将它们带到将执行 reducer 任务的其他节点(就像 mapreduce)这是如何在内存中完成的?
最好单独提问,因为问题 3 很难理解。不管怎样:
- 不,Spark 不需要分布式文件系统。
- 默认情况下,Spark 将为每个 HDFS 块创建一个分区,并在可能的情况下将计算与数据放在一起。
- 您问的是 shuffle。 Shuffle 在 reducer 将从中获取的映射器上创建块。
spark.shuffle.memoryFraction
参数控制分配给 shuffle 块文件的内存量。 (默认为 20%。)spark.shuffle.spill
参数控制当内存用完时是否将 shuffle 块溢出到本地磁盘。
Query 1. For distributing processing - Can Spark work without HDFS ?
对于分布式处理,Spark 不需要HDFS。但是可能read/write数据from/toHDFS系统。对于某些用例,它可能会将数据写入 HDFS。对于teragen排序世界纪录程序,它使用HDFS对数据进行排序,而不是使用in-memoery。
Spark 不提供分布式存储。但是与 HDFS
集成是存储的一种选择。但 Spark 可以使用其他存储系统,如 Cassnadra 等。有关详细信息,请查看本文:https://gigaom.com/2012/07/11/because-hadoop-isnt-perfect-8-ways-to-replace-hdfs/
Query 2. If we already have a file loaded in HDFS (as distributed blocks) - then will Spark again be converting it into blocks and redistributes at it's level
我同意 Daniel Darabos 的回应。 Spark 将为每个 HDFS 块创建一个分区。
Query 3: on shuffle
根据数据的大小,随机播放将在内存中完成,或者它可能使用磁盘(例如 teragen 排序),或者它可能同时使用两者。在 Spark shuffle 上看看这个优秀的 article。
Fine with this. What if you don’t have enough memory to store the whole “map” output? You might need to spill intermediate data to the disk. Parameter spark.shuffle.spill is responsible for enabling/disabling spilling, and by default spilling is enabled
The amount of memory that can be used for storing “map” outputs before spilling them to disk is “JVM Heap Size” * spark.shuffle.memoryFraction * spark.shuffle.safetyFraction, with default values it is “JVM Heap Size” * 0.2 * 0.8 = “JVM Heap Size” * 0.16.
查询 1。 是的,它也可以与其他人一起工作。 Spark 与 RDD 一起工作,如果您有相应的 RDD 实现就是这样。当您通过在 HDFS 中打开文件实际创建 RDD 时,它会固有地创建一个 HADOOP RDD,它具有理解 HDFS 的实现,如果您编写自己的分布式文件系统,您可以编写您自己的实现并实例化 class 它的完成。但是将连接器 RDD 写入我们自己的 DFS 是一个挑战。更多内容可以查看spark代码中的RDD接口
查询 2。它不会重新创建,而是我的 HADOOP/HDFS RDD 连接器,它知道块在哪里。它还会尝试使用相同的纱线节点到 运行 jvm要处理的任务。
查询 3。对此不确定
查询 1:- 对于简单的 spark,由于抽象 RDD(弹性分布式数据集)而提供分布式处理,如果没有 HDFS,则无法提供分布式存储。
查询 2:- 不,它不会 recreate.Here Spark 将提供每个块作为分区(这意味着对该块的引用)所以它在同一个块上启动纱线
查询 3:- 不知道。