簡體   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