![](/img/trans.png)
[英]How to query data stored in Hive table using SparkSession of Spark2?
[英]How to efficiently query a hive table in spark using hive context?
我有一個帶有時間序列數據的1.6T Hive表。 我在scala
使用Hive 1.2.1
和Spark 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
將所有行移動到單個分區,並且可能會導致嚴重的性能和穩定性問題。
我試圖通過一次選擇幾條記錄來對此結果數據框架進行滑動窗口化。
這聽起來不對。 滑動窗口操作通常可以通過窗口功能和基於時間戳的window
存儲桶的某種組合來實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.