繁体   English   中英

如何使用Hive上下文有效地在Spark中查询Hive表?

[英]How to efficiently query a hive table in spark using hive context?

我有一个带有时间序列数据的1.6T Hive表。 我在scala使用Hive 1.2.1Spark 1.6.1

以下是我的代码中的查询。 但是我总是使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"

请给我一些有关如何优化它并成功从hive表中获取数据的建议。

谢谢

问题可能在这里:

LIMIT 4320000

您应该避免使用LIMIT来对大量记录进行子集化。 在Spark中, LIMIT将所有行移动到单个分区,并且可能会导致严重的性能和稳定性问题。

例如参见下面的如何优化火花代码(scala)?

我试图通过一次选择几条记录来对此结果数据框架进行滑动窗口化。

这听起来不对。 滑动窗口操作通常可以通过窗口功能和基于时间戳的window存储桶的某种组合来实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM