【问题标题】:Performance improvements saving Spark ORC节省 Spark ORC 的性能改进
【发布时间】:2016-10-25 06:48:10
【问题描述】:

我正在使用 Spark 1.6.1,但在 Spark 世界中我还是个新手。 我正在玩将文件保存为 ORC 格式。

我正在尝试将相对较大的文本文件 (8 GB) 解析为 ORC。文件通常很宽,即 200 多列。

列类型是基本的:Int、String、Date。 我解析所有行,然后执行 persist() 并保存到文件中。

这是基本代码:

val schema = StructType(
  myTableColumns.map(
    c => StructField(
//Field descriptions ~200 fields
)))

val rowRDD = rddProcessedLines.map(line => {
  Row.fromSeq(line)
})

val fileSchemaRDD = hiveContext.createDataFrame(rowRDD, schema)

fileSchemaRDD.registerTempTable("output_table_name")
fileSchemaRDD.write.orc("output_folder")

问题是性能很差。这比从同一个文本文件导入关系数据库更糟糕。

我尝试在 Snappy 和 LZF 压缩器之间切换,这里没有太大的收获。 我还使用了节点的内存大小和内核数量,而不是更好。 然后我开始更改缓冲区大小等以进行压缩。 我看到大量列的性能急剧下降。 有人可以告诉在哪里看吗?有人可以指出有关 ORC 文件保存优化的有用主题吗?

【问题讨论】:

    标签: performance apache-spark spark-dataframe orc


    【解决方案1】:

    这种缓慢的性能是由于您尝试加载的文件的大小。要利用 spark 的分布式计算,请确保您有多个小文件以使转换更加并行。尝试将您的 8 GB 文件分成多个文件,每个文件大小为 64 MB。此外,从您的代码中,您不需要在保存之前将数据框注册到临时表,因为您以后不会用于任何其他转换。

    【讨论】:

    • 那么火花的性能在哪里呢?我需要执行 1. 解压缩。 2. 以某种方式分隔 64 个块(记住内部结构应该保持不变) 3. 将所有内容复制到 HDFS。我怀疑任何数据库“复制”或导入都会变慢。
    • 这不是一个神奇的应用程序,火花。如果你真的想使用集群的全部容量,你肯定需要处理输入的文件拆分。否则你结束重载单个执行器而不使用其余部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 2015-10-06
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多