我有一个 1.6T Hive 表,其中包含时间序列数据。我在用Hive 1.2.1
and Spark 1.6.1
in scala
.
以下是我的代码中的查询。但我总是得到Java out of memory error
.
val sid_data_df = hiveContext.sql(s"SELECT time, total_field, sid, year, date FROM tablename WHERE sid = '$stationId' ORDER BY time LIMIT 4320000 ")
通过从配置单元表中迭代地一次选择几条记录,我试图对结果进行滑动窗口dataframe
我有一个由 4 个节点组成的集群,具有 122 GB 内存、44 个 vCore。我正在使用 488 GB 可用内存中的 425 GB。我使用以下参数进行火花提交
--num-executors 16 --driver-memory 4g --executor-memory 22G --executor-cores 10 \
--conf "spark.sql.shuffle.partitions=1800" \
--conf "spark.shuffle.memory.fraction=0.6" \
--conf "spark.storage.memoryFraction=0.4" \
--conf "spark.yarn.executor.memoryOverhead=2600" \
--conf "spark.yarn.nodemanager.resource.memory-mb=123880" \
--conf "spark.yarn.nodemanager.resource.cpu-vcores=43"
请给我关于如何优化它并成功从配置单元表中获取数据的建议。
Thanks
问题很可能出在这里:
LIMIT 4320000
你应该避免使用LIMIT
对大量记录进行子集化。在火花中,LIMIT
将所有行移动到单个分区,可能会导致严重的性能和稳定性问题。
参见示例如何优化下面的 Spark 代码(scala)?
我试图通过一次选择几条记录来迭代地在这个结果数据帧上创建一个滑动窗口。
这听起来不对。滑动窗口操作通常可以通过窗口函数和基于时间戳的某种组合来实现window buckets.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)