hiveserver2连接数与hivemetastore连接数详解

Hive连接session优化

HS2会话/操作超时的检查间隔:
hive.server2.session.check.interval 15min->5m
HS2会话持续时间未访问超时时间:
hive.server2.idle.session.timeout 12h->5m
HS2从会话空闲时间中排除实时操作,没有活动、没有挂起操作的会话才会被认为是空闲的:
hive.server2.idle.session.check.operation 默认为启用
HS2持续时间内未访问,则操作将关闭:
hive.server2.idle.operation.timeout 默认为6h
设置为正值,仅检查终端状态下的操作(FINISHED、CANCELED、CLOSED、ERROR)。
设置为负值,检查所有操作而不考虑状态。例如-7200000的值表示正在运行的查询/操作如果仍在运行,将在2小时后超时。

hiveserver2排查连接问题:
1、netstat -antlp|grep 10000
2、lsof -i:10000
3、ls -lrt /proc/12933/fd/
4、cd /proc/12933/fd/
5、lsof -i:10000 | grep “ESTABLISHED” |awk ‘{print $4}’ |awk -F “u” ‘{print $1}’ |xargs ls -all
每隔30min执行一次,覆盖写入hdfs
/30 * * * * hdfs dfs -copyFromLocal -f //.log /tmp/**.log01

Hive工作线程逻辑
1、hiveserver2 可以建立连接数1000,但同时发出请求数受等待队列控制
Thrift工作线程数:hive.server2.thrift.max.worker.threads=1000
2、Client与HS2建立连接,,HiveServer2收到请求后,先放到等待队列里(如果队列已满,则抛出异常)
等待队列的长度:hive.server2.async.exec.wait.queue.size=1000
3、计算线程从等待队列中取请求,进行处理(请求不一定都提交到集群上,如show databases)
计算线程的数量:hive.server2.async.exec.threads 1000

metastore可以建立连接数1200,并且每个连接都可以发出请求。
连接池中的最大连接数:datanucleus.connectionPool.maxPoolSize(默认10)100,有3个HMS实例,每个服务器有4个池,则可以容纳1200个连接。
mysql /etc/my.conf max_connections(默认151)3000,最大用户连接数

hivemetastore排查连接问题:
1、netstat -antlp|grep 9083
2、lsof -i:9083
3、ls -lrt /proc/43743/fd/
4、cd /proc/43743/fd/
5、lsof -i:9083 | grep “ESTABLISHED” |awk ‘{print $4}’ |awk -F “u” ‘{print $1}’ |xargs ls -all

metastore连接池数量配置:
datanucleus.connectionPool.maxPoolSize 缺省值为10,如果poolSize=100,有3个HMS实例,每个服务器有4个池,则可以容纳1200个连接。
mysql /etc/my.conf max_connections = 3000 默认151,最大用户连接数建议3000

其他优化线程数配置:
hive.metastore.fshandler.threads 缺省值为15,用于在MSCK阶段中扫描分区的线程数。
hive.compactor.worker.threads 默认值为0,在这个metastore实例上运行多少个合并工作线程。支持事务时至少在一个Metastore实例上大于0。

### 解析 Import Error 的常见原因 当遇到 `ImportError: cannot import name 'Generic'` 错误时,通常意味着尝试从模块中导入的对象不存在或无法访问。此问题可能由多种因素引起: - 版本不兼容:不同库之间的版本冲突可能导致此类错误。 - 安装缺失:目标库未正确安装或路径配置有误。 - 导入语句不当:可能存在循环依赖或其他语法层面的问题。 ### 针对 Generic 类型的具体解决方案 对于特定于 `Generic` 的情况,考虑到 Python 中 `Generic` 是 typing 模块的一部分,在处理该类别的 ImportError 时可采取如下措施[^1]: #### 方法一:确认typing模块可用性 确保环境中已安装标准库中的 typing 模块,并且其版本支持所使用的特性。可以通过以下命令验证: ```bash python -c "from typing import Generic; print(Generic)" ``` 如果上述命令执行失败,则可能是由于 Python 或者相关扩展包的版本过低造成的。此时应考虑升级至更高版本的解释器以及对应的开发工具链。 #### 方法二:调整导入方式 有时直接通过顶层命名空间来获取所需组件会更稳定可靠。修改代码以采用这种做法可能会解决问题: ```python from collections.abc import Iterable # 如果是迭代器相关接口 from typing import TypeVar, Protocol # 对于协议和泛型定义 T = TypeVar('T') class MyContainer(Protocol[T]): ... ``` 注意这里并没有显式提到 `Generic` ,而是利用了更为基础的数据结构抽象基类或是其他替代方案实现相同功能[^2]。 #### 方法三:排查环境变量设置 检查系统的 PYTHONPATH 和虚拟环境配置是否正常工作。任何异常都可能导致某些第三方软件包找不到必要的资源文件而引发类似的错误提示。建议清理并重建项目专属的工作区以便排除干扰项的影响。 #### 示例修正后的代码片段 假设原始代码试图这样引入 `Generic` : ```python from some_module import Generic # 可能导致 ImportError ``` 改为遵循官方文档推荐的方式后变为: ```python from typing import Generic # 正确的做法 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值