在我们的工作环境中,运行Hive0.13.0-MapR-1501在一个更大的数据集上使用更强大的硬件,相同的查询尝试在多个阶段执行并最终抛出一个java.lang.OutOfMemoryError: Java如果我将子查询替换为文字,即WHERE date = '20150813',而不是聚合和内部连接,那么它执行得非常快。对于聚合/子查询,它似乎没有使用分区来减少IO的数量,而是试图扫描所有分区。
首先,我是否正确地假设,如果总是有一个单一的编写线程,那么我应该安全地使用HashMap,而不是ConcurrentHashMapNode如果有另一个线程在copy data from oldTab to newTab未完成时开始读取,那么由于HashMap#get从table中检索值(现在由于table = newTab而成为空数组),错误的数据将注定要失败
我不明白的是,为什么不先执行copy da