Tachyon是一个分布式的内存存储系统,它是独立于星火应用程序开发的,它可以在星火应用程序中用作堆外持久性存储。
钨是一种新的Spark组件,它通过直接在字节级别上工作来提供更高效的星火操作。由于Tungsten不再依赖于使用Java对象,所以我们可以使用堆上( JVM)或堆外存储。
在离堆模式下,这两种方式都减少了垃圾收集开销,因为数据不是存储在Java对象中。
那么,我是否可以简单地考虑一下,Tachyon给一般的RDD带来了好处,而spark则从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发布于 2018-10-04 12:24:14
简而言之,你的两种说法都是不正确的:
OFF_HEAP存储不再使用Alluxio,而是使用Spark的内部堆外存储。例如,参见火花-16025。spark.sql.inMemoryColumnarStorage.*属性进一步配置。发布于 2018-10-04 12:20:50
Alluxio获得内存速度、读/写操作的好处。火花能够从Alluxio (在内存存储系统中)读取数据。这提供了避免来自硬盘(任何文件系统,如HDFS等)的输入/输出(IO)的好处。
钨-是火花的后端优化引擎。所编写的dataframe/dataset API或Spark中的代码以逻辑/优化逻辑计划的形式由催化剂优化器进行优化。一旦这一阶段结束,钨优化引擎将接管并负责动态生成代码(称为“Code”),这是对分布式环境中的执行高度优化的代码。
对我来说,两者都有不同的目的,我更愿意分别对待它们。
希望它能在一定程度上有所帮助。
发布于 2018-10-08 23:23:43
火花在不同阶段与Alluxio和Tungsten相互作用。
对于Spark,Alluxio是一个外部分布式存储系统,类似于HDFS。火花通过文件系统接口与Alluxio进行交互(请参阅下面的示例)。除了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")火花只在各个阶段与Alluxio交互,以读取输入数据文件和写入输出文件。
钨是星火的内部数据表示,旨在提高内存和CPU的效率。本质上,JVM对象的默认内存布局被认为是由于内存空间和GC开销(请参阅databricks中的Project上的博客 )对Spark应用程序的效率低下。钨可以直接处理二进制数据格式中的数据,而不会干扰JVM构造JVM对象。
因此,Spark应用程序可以从Alluxio-在不了解这些字节的情况下读取输入文件,然后根据Tungsten定义的协议,解析数据并在Spark中表示它。
https://stackoverflow.com/questions/52645783
复制相似问题