1
我有一个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个vCores集群中的滑动窗口。我正在使用可用的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"
火花提交好心给我如何优化这一点,并成功地从蜂巢表中提取数据的建议。
感谢
你有合理的配置。你正在运行我们的内存,因为你没有重新分区的数据(或者如果它重新分区,那么......它不是一个最佳的好数字我猜它可能是像16 * 43 * 2 = 1376或16 * 43 * 3 = 2064)。查看执行器日志并查看每个执行器有多少记录。 –
我已重新分区。但是在重新分区之前作业失败。我感觉选择查询效率不高。 select查询上的'limit'是否起作用,它将获取所有记录并对其应用限制? – anaga
下面有一个答案,您是否删除了限制并尝试过? –