1

Tachyon 是一种分布式内存存储系统,与 Spark 分开开发,可在 Spark 应用程序期间用作堆外持久性存储

Tungsten 是一个新的 Spark SQL 组件,它通过直接在字节级别工作来提供更高效的 Spark 操作。由于 Tungsten 不再依赖于处理 Java 对象,我们可以使用堆上(在 JVM 中)或堆外存储

在堆外模式下,两者都减少了垃圾收集开销,因为数据不存储为 Java 对象。

那么我是否可以简单地认为 Tachyon 为一般 RDD 带来好处,而 spark-sql 从 Tungsten 中受益?

假设以下代码

val df = spark.range(10)

val rdd = df.rdd

df.persist(StorageLevel.OFF_HEAP) // in Tungsten format(bytes)?

df.show

rdd.persist(StorageLevel.OFF_HEAP) // in Tachyon storage ?

rdd.count
4

3 回答 3

2

Alluxio 获得了内存速度读/写操作的好处。Spark 能够从 Alluxio 读取数据(在内存存储系统中)。这提供了避免来自硬盘的输入/输出(IO)的好处(任何文件系统,例如位于硬盘上的 HDFS 等)。

Tungsten- 是 spark 的后端优化引擎。编写数据帧/数据集 API 或 Spark SQL 中的代码由 Catalyst Optimizer 以逻辑/优化逻辑计划的形式进行优化。一旦这个阶段结束,tungsten 优化引擎将接管并负责动态生成代码(称为“代码生成”),该代码针对分布式环境的执行进行了高度优化。

对我来说,两者都有不同的目的,我更愿意将它们分开对待。

希望它在一定程度上有所帮助。

于 2018-10-04T12:20:50.673 回答
2

Spark 与 Alluxio 和 Tungsten 交互以获取不同阶段的数据。

对于 Spark,Alluxio 是一个外部分布式存储系统,类似于 HDFS。Spark 通过文件系统接口与 Alluxio 交互(参见下面的示例)。它本质上与 Spark 访问 HDFS 或本地文件系统的接口相同,只是存储服务由 Alluxio 提供,它可以利用内存作为存储介质。

// save data as text file to Alluxio
> rdd.saveAsTextFile("alluxio://localhost:19998/rdd1")
// read data as text file from Alluxio
> rdd = sc.textFile("alluxio://localhost:19998/rdd1")
// save data as object file to Alluxio
> rdd.saveAsObjectFile("alluxio://localhost:19998/rdd2")
// read data as object file from Alluxio
> rdd = sc.objectFile("alluxio://localhost:19998/rdd2")

Spark 仅在阶段与 Alluxio 交互以读取输入数据文件和写入输出文件。

Tungsten 是 Spark 的内部数据表示,旨在提高内存和 CPU 的效率。从本质上讲,由于内存空间和 GC 开销,JVM 对象的默认内存布局被认为是低效的 Spark 应用程序(请参阅databricks 上关于 Project Tungsten的博客)。Tungsten 帮助 Spark 直接处理来自二进制数据格式的数据,而无需打扰 JVM 来构造 JVM 对象。

因此,Spark 应用程序可能会从 Alluxio 读取输入文件——Alluxio 在不理解这些字节的情况下向 Spark 发送字节,然后根据 Tungsten 定义的协议解析数据并在 Spark 内部表示。

于 2018-10-08T23:23:43.393 回答
1

简而言之,您的两个陈述都不正确:

  • 由于 Spark 1.6OFF_HEAP存储不再使用 Alluxio,而是使用 Spark 的内部堆外存储。参见例如 SPARK-16025。
  • Spark SQL 中的所有存储模式都以内部二进制格式存储数据,可以使用spark.sql.inMemoryColumnarStorage.*属性进一步配置。
于 2018-10-04T12:24:14.837 回答