当 Impala 中的元数据信息太多(例如几百个库、几万个表),Impala 在启动的时候,需要把这些元数据信息广播到所有节点上,默认这个动作的超时时间是10s。当元数据较大且较易触发时,可通过在 Impala 的启动配置文件 /data/Impala/conf/impalad.flgs
中设置 -statestore_subscriber_timeout_seconds=100
。
通常出现这个问题,会在 Impala 的日志 /data/emr/impala/logs
中出现如下内容:
Connection with state-store lost
Trying to re-register with state-store
虽然 Impala 不是内存数据库,但在处理大型表、大型数据时,还是应该为 Impala 分配更多的物理内存,一般建议是使用128G或者更多的内存,并分配80%给到 Impala 进程。
可能原因如下:
[localhost:27001] > set mem_limit=3000000000;
MEM_LIMIT set to 3000000000
[localhost:27001] > select 5;
Query: select 5
+---+ |5 | +---+ |5 | +---+
[localhost:27001] > set mem_limit=3g;
MEM_LIMIT set to 3g
[localhost:27001] > select 5;
Query: select 5
+---+ |5 | +---+ |5 | +---+
[localhost:27001] > set mem_limit=3gb;
MEM_LIMIT set to 3gb
[localhost:27001] > select 5;
+---+
|5 | +---+ |5 | +---+
[localhost:27001] > set mem_limit=3m;
MEM_LIMIT set to 3m
[localhost:27001] > select 5;
+---+
|5 |
+---+
|5 |
+---+
[localhost:27001] > set mem_limit=3mb; MEM_LIMIT set to 3mb [localhost:21000] > select 5;
+---+ |5 | +---+
本页内容是否解决了您的问题?