Apache spark 火花中的Alluxio(快子)和钨的区别?
Tachyon是一种分布式内存存储系统,与Spark分开开发,在Spark应用程序中可用作堆外持久性存储 worth是一个新的sparksql组件,它通过直接在字节级别工作来提供更高效的Spark操作。由于worth不再依赖于使用Java对象,因此我们可以使用堆内(在JVM中)或堆外存储 在堆外模式下,两者都可以减少垃圾收集开销,因为数据不是作为Java对象存储的 <> P>我可以简单地考虑TaCHYON对一般RDD带来的好处,而SkySQL受益于钨? 假设下面的代码Apache spark 火花中的Alluxio(快子)和钨的区别?,apache-spark,apache-spark-sql,rdd,alluxio,Apache Spark,Apache Spark Sql,Rdd,Alluxio,Tachyon是一种分布式内存存储系统,与Spark分开开发,在Spark应用程序中可用作堆外持久性存储 worth是一个新的sparksql组件,它通过直接在字节级别工作来提供更高效的Spark操作。由于worth不再依赖于使用Java对象,因此我们可以使用堆内(在JVM中)或堆外存储 在堆外模式下,两者都可以减少垃圾收集开销,因为数据不是作为Java对象存储的 P>我可以简单地考虑TaCHYON对一般RDD带来的好处,而SkySQL受益于钨? 假设下面的代码 val df = spark.
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
Alluxio获得了内存速度读/写操作的好处。Spark能够从Alluxio(内存存储系统)读取数据。这样做的好处是避免了来自硬盘的输入/输出(IO)(硬盘上的任何文件系统,如HDFS等) 钨-是spark的后端优化引擎。Catalyst Optimizer以逻辑/优化的逻辑计划的形式对数据帧/数据集API或Spark SQL中编写的代码进行优化。一旦这个阶段结束,Wonder optimization engine将接管并负责动态生成代码(称为“代码生成”),该代码针对分布式环境的执行进行了高度优化 对我来说,两者都有不同的用途,我更愿意将它们分开处理
希望在某种程度上有所帮助。Alluxio获得了内存速度读/写操作的好处。Spark能够从Alluxio(内存存储系统)读取数据。这样做的好处是避免了来自硬盘的输入/输出(IO)(硬盘上的任何文件系统,如HDFS等) 钨-是spark的后端优化引擎。Catalyst Optimizer以逻辑/优化的逻辑计划的形式对数据帧/数据集API或Spark SQL中编写的代码进行优化。一旦这个阶段结束,Wonder optimization engine将接管并负责动态生成代码(称为“代码生成”),该代码针对分布式环境的执行进行了高度优化 对我来说,两者都有不同的用途,我更愿意将它们分开处理
希望在某种程度上有所帮助。简而言之,你的两种说法都不正确:
- 由于Spark 1.6的堆外存储不再使用Alluxio,而是使用Spark的内部堆外存储。例如,参见SPARK-16025
- Spark SQL中的所有存储模式都以内部二进制格式存储数据,可以使用
properties进一步配置Spark.SQL.inMemoryColumnarStorage.*
- 由于Spark 1.6的堆外存储不再使用Alluxio,而是使用Spark的内部堆外存储。例如,参见SPARK-16025
- Spark SQL中的所有存储模式都以内部二进制格式存储数据,可以使用
properties进一步配置Spark.SQL.inMemoryColumnarStorage.*
// 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交互
钨是Spark的内部数据表示,旨在提高内存和CPU的效率。实际上,由于内存空间和GC开销,JVM对象的默认内存布局对于Spark应用程序来说是低效的(请参阅DataRicks上的项目)。Worth帮助Spark直接从二进制数据格式处理数据,而无需麻烦JVM构造JVM对象
因此,Spark应用程序可能会从Alluxio读取输入文件——Alluxio在不理解这些字节的情况下发送Spark字节,然后解析数据,并根据Wonder定义的协议在Spark内部表示。Spark与Alluxio和Wonder在不同阶段进行数据交互 对于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交互
钨是Spark的内部数据表示,旨在提高内存和CPU的效率。实际上,由于内存空间和GC开销,JVM对象的默认内存布局对于Spark应用程序来说是低效的(请参阅DataRicks上的项目)。Worth帮助Spark直接从二进制数据格式处理数据,而无需麻烦JVM构造JVM对象
因此,Spark应用程序可能会从Alluxio读取输入文件——Alluxio发送Spark字节而不理解这些字节,然后解析数据并根据协议定义在Spark内部表示。谢谢,我通过了JIRA,现在rdd使用内部堆外存储。对于第二个语句,我阅读了一些文档,知道它是一种列式内部字节格式,而wown扮演着一个优化器的角色,它可以在运行中直接处理二进制格式。谢谢,我通过了JIRA,现在rdd使用了内部堆外存储。对于第二个语句,我阅读了一些文档,知道它是一种列式内部字节格式,而wown扮演着一个优化器的角色,它可以非常好地工作