文章源自略懂百科-http://wswcn.cn/113423.html
HiveServer2是一个轻量级的Hive对外服务层,它是一个Thrift服务器,可以与Hadoop集群无缝交互。它支持JDBC和ODBC驱动程序,以提供查询数据的SQL层。传入的SQL查询将被转换为TEZ或MR作业,结果将被检索并发送回客户端。HS2内部没有进行过重的任务负载,它只是作为一个具有TEZ/MR驱动程序、扫描元数据信息和应用Ranger策略进行授权的服务层。文章源自略懂百科-http://wswcn.cn/113423.html
HiveServer2两种类型池
连接池:任何传入的连接都由HiveServer2处理程序线程处理,并保存在此池中,该池本质上不受限制,但受到可用于服务传入请求的线程数量的限制。如果没有空闲的HiveServer2处理程序线程来服务请求,则不会接受传入请求。可以通过参数hive.server2.thrift.max.worker.thread控制可以使用HS2生成的线程总数。会话池(每个队列):代表可以处于活动状态的并发会话数量为3。当连接池中的连接执行SQL查询时,如果发现会话队列中的空闲插槽并且执行SQL语句,就会维护每个在默认查询队列中定义的队列。在本例中,仅定义了默认队列,每个队列的会话数为3。超过3个并发查询(非连接)必须等待,直到会话池中的某个插槽空闲。在HS2中可能有多个连接处于活动状态,但在任何时候它只能执行3个查询,其余查询必须等待。文章源自略懂百科-http://wswcn.cn/113423.html
HiveServer2连接概述
HiveServer2连接图文章源自略懂百科-http://wswcn.cn/113423.html
HS2在端口10000上监听,并接受来自客户端在此端口上的连接。HS2打开到Kafka的连接,用于写入指标和血统信息,这些信息由Ambari指标服务和Atlas消费。S2也不时地直接连接到DataNodes来服务请求,例如Select * from Table LimitN。S2还连接到NodeManager, 在该NodeManager中,TEZ AM被创建以服务SQL查询。在此过程中,它与NameNode和资源管理器进行通信,而高可用性期间发生切换会影响连接。HiveServer2整体与ATLAS、SOLR、KAFKA、NameNode、DataNode、ResourceManager、NodeManager、MYSQL进行通信。文章源自略懂百科-http://wswcn.cn/113423.html
HiveServer2优化参数(基于Tez引擎)
设置"set hive.server2.tez.initialize.default.sessions=true"参数。它的作用是在HS2启动、重新启动时为每个会话分配Tez AM。(每个队列的会话数=3,因此将生成3个Tez AM。如果默认查询队列中有2个队列、每个队列的会话数=3,则将生成6个Tez AM。)在HS2启动时,也可以强制每个TEZ AM生成一定数量的容器(预热)。设置hive.prewarm.enabled=true,tez.grouping.split-count =3,将确保每个TEZ AM将持有2个容器来执行SQL查询。she z设置为default,每个队列的会话数为3,持有容器以减少延迟"hive.prewarm.enabled=true,tez.grouping.split-count =3"。HS2将为每个会话产生3个TEZ AM。对于每个TEZ AM,将产生2个容器。因此,在资源管理器UI中可以看到总共9个容器(3个TEZ AM + 6个容器)正在运行。为了使TEZ更有效并节省启动时间,需要在TEZ配置中配置以下参数。该参数防止AM在作业执行完成后立即宕掉。它会在最小值和最大值之间等待以处理另一个查询,否则会kkill自身并释放YARN资源。Tez.am.container.reuse.enabled=trueTez.am.container.idle.release-timeout.min.millis=10000Tez.am.container.idle.release-timeout.max.millis=20000文章源自略懂百科-http://wswcn.cn/113423.html
HiveServer2的连接内存
在HS2中,每个连接都有内存占用文章源自略懂百科-http://wswcn.cn/113423.html
1. 每个连接都会扫描metastore以了解表的情况。文章源自略懂百科-http://wswcn.cn/113423.html
2. 每个连接都会预留内存以保存指标和TEZ驱动程序。文章源自略懂百科-http://wswcn.cn/113423.html
3. 每个连接都会预留内存以保存TEZ执行的结果。文章源自略懂百科-http://wswcn.cn/113423.html
因此,如果大量连接处于活动状态,则由于缺少堆空间,HS2可能会变慢,因此需要根据连接数量调整堆空间。40个连接需要大约16GB的HS2堆。超出此范围的需要对GC和服务水平扩展,请进行调整。文章源自略懂百科-http://wswcn.cn/113423.html
可以基于以下参数空闲状态断开客户端连接:文章源自略懂百科-http://wswcn.cn/113423.html
hive.server2.session.check.interval=6hhive.server2.idle.operation.timeout=5dhive.server2.idle.session.check.operation=truehive.server2.idle.session.timeout=7d文章源自略懂百科-http://wswcn.cn/113423.html
HiveServer2内嵌了元数据存储,用于与RDBMS交互,以存储表Scehma信息。HiveMetastore通过数据库为其他服务提供服务。HiveServer2不直接使用HiveMetastore。文章源自略懂百科-http://wswcn.cn/113423.html
常见问题解决
1. 客户端经常出现超时:HS2永远不会拒绝连接,因此超时是客户端设置的参数,而不是HS2设置的。大多数工具的超时时间为30秒,根据您的集群使用模式将其增加到90-150秒。文章源自略懂百科-http://wswcn.cn/113423.html
2. HS2变得无响应:如果HS2频繁进行FULL GC或堆不可用,需要增加堆大小并进行水平扩展了。文章源自略懂百科-http://wswcn.cn/113423.html
3. HS2有大量连接:HS2在端口10000上接受连接,并且还连接到RDBMS、DataNodes(用于直接查询)和NodeManager(用于连接到AM),因此总是尝试分析是有很多输入连接还是输出连接。文章源自略懂百科-http://wswcn.cn/113423.html
4. 由于HS2作为一种服务是交互式的,因此为HS2提供一定数量的年轻一代总是很好的。文章源自略懂百科-http://wswcn.cn/113423.html
5. 如果事务型系统与HS2交互,那么提供一个20GB堆,其中为年轻代提供6-8GB,对于年轻代使用ParNewGC,对于老年代使用ConcurrentMarandSweepGC。文章源自略懂百科-http://wswcn.cn/113423.html
文章源自略懂百科-http://wswcn.cn/113423.html
评论