前言
- CDH5(Impala1.4开始) 中,impala 可以使用 HDFS 缓存特性加快频繁访问的数据的速度,减少 cpu 使用率。当数据缓存到 hdfs cache 中时,impala 可以直接从缓存中读取数据而不需要读磁盘并且减少额外的内存拷贝。
- 官网说明1:https://blog.cloudera.com/blog/2014/08/new-in-cdh-5-1-hdfs-read-caching/
- 官网说明2:https://blog.cloudera.com/blog/2014/02/apache-hadoop-2-3-0-is-released-hdfs-caching-ftw/
下面写上自己的理解
自己绘制的简易流程图:
- A-SQL 在获取元数据信息过程中,B-SQL 执行了 INVALIDATE METADATA,导致HDFS缓存清空,然而在获取元数据成功时需要提交缓存报告。在提交的缓存报告中得到的结论是缓存完成且成功,可真实的元数据缓存被清空了一部分导致缓存不成功,这是一个矛盾,怎么办呢?只能继续等待元数据获取完整!但是由于连接有超时这么一说,于是直到超时被拒绝。
结论:
- 重试失败的SQL语句是不错的选择;
- INVALIDATE METADATA 时可以加上库、表、分区,尽可能缩小影响的范围,或尽可能的保证在一段时间内只有1个SQL在操作某些表,避免并行。
- 取消 INVALIDATE METADATA,可以显著提高impalad的查询速度,但由于元数据不同步,导致读取不到最新的数据而出现结果错误(不建议)。