[ 
https://issues.apache.org/jira/browse/HIVE-26211?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ECFuzz updated HIVE-26211:
--------------------------
    Priority: Blocker  (was: Major)

> "hive.server2.webui.max.historic.queries" should be avoided to be set too 
> large, otherwise it will cause blocking
> -----------------------------------------------------------------------------------------------------------------
>
>                 Key: HIVE-26211
>                 URL: https://issues.apache.org/jira/browse/HIVE-26211
>             Project: Hive
>          Issue Type: Bug
>          Components: Clients
>    Affects Versions: 3.1.2
>         Environment: Hive 3.1.2
> os.name=Linux
> os.arch=amd64
> os.version=5.4.0-72-generic
> java.version=1.8.0_162
> java.vendor=Oracle Corporation
>            Reporter: ECFuzz
>            Assignee: ECFuzz
>            Priority: Blocker
>
> In hive-default.xml.template
> {code:java}
> <property>
>   <name>hive.server2.webui.max.historic.queries</name>
>   <value>25</value>
>   <description>The maximum number of past queries to show in HiverSever2 
> WebUI.</description>
> </property>{code}
> Set hive.server2.webui.max.historic.queries to a relatively large value, take 
> 20000000 as an example, start hiveserver2, it can start hiveserver normally, 
> and logging without exception.
> {code:java}
> liky@ljq1:/usr/local/hive/conf$ hiveserver2 
> SLF4J: Class path contains multiple SLF4J bindings.
> SLF4J: Found binding in 
> [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: Found binding in 
> [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an 
> explanation.
> SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
> 2022-05-09 20:03:41: Starting HiveServer2
> SLF4J: Class path contains multiple SLF4J bindings.
> SLF4J: Found binding in 
> [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: Found binding in 
> [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an 
> explanation.
> SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
> Hive Session ID = 0b419706-4026-4a8b-80fe-b79fecbccd4f
> Hive Session ID = 0f9e28d7-0081-4b2f-a743-4093c38c152d{code}
> Next, if you use beeline as a client to connect to hive and send a request 
> for database related operations, for example, if you query all the databases, 
> after successfully executing "show databases", beeline blocks and no other 
> operations can be performed.
> {code:java}
> liky@ljq1:/opt/hive$ beeline
> SLF4J: Class path contains multiple SLF4J bindings.
> SLF4J: Found binding in 
> [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: Found binding in 
> [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an 
> explanation.
> SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
> Beeline version 3.1.2 by Apache Hive
> beeline> !connect jdbc:hive2://192.168.1.194:10000/default
> Connecting to jdbc:hive2://192.168.1.194:10000/default
> Enter username for jdbc:hive2://192.168.1.194:10000/default: hive
> Enter password for jdbc:hive2://192.168.1.194:10000/default: *****
> Connected to: Apache Hive (version 3.1.2)
> Driver: Hive JDBC (version 3.1.2)
> Transaction isolation: TRANSACTION_REPEATABLE_READ
> 0: jdbc:hive2://192.168.1.194:10000/default> show databases
> . . . . . . . . . . . . . . . . . . . . . .> ;
> INFO : Compiling 
> command(queryId=liky_20220509202542_15382019-f07b-40ff-840d-1f720df77d8b): 
> show databases
> INFO : Concurrency mode is disabled, not creating a lock manager
> INFO : Semantic Analysis Completed (retrial = false)
> INFO : Returning Hive schema: 
> Schema(fieldSchemas:[FieldSchema(name:database_name, type:string, 
> comment:from deserializer)], properties:null)
> INFO : Completed compiling 
> command(queryId=liky_20220509202542_15382019-f07b-40ff-840d-1f720df77d8b); 
> Time taken: 0.393 seconds
> INFO : Concurrency mode is disabled, not creating a lock manager
> INFO : Executing 
> command(queryId=liky_20220509202542_15382019-f07b-40ff-840d-1f720df77d8b): 
> show databases
> INFO : Starting task [Stage-0:DDL] in serial mode
> INFO : Completed executing 
> command(queryId=liky_20220509202542_15382019-f07b-40ff-840d-1f720df77d8b); 
> Time taken: 0.109 seconds
> INFO : OK
> INFO : Concurrency mode is disabled, not creating a lock manager
> ----------------
> database_name
> ----------------
> default      
> ----------------
> 1 row selected (1.374 seconds)
> {code}
> Also, on the hiveserver side, a runtime null pointer exception is thrown, and 
> the observation log throws no warnings or errors.
> {code:java}
> liky@ljq1:/usr/local/hive/conf$ hiveserver2 
> SLF4J: Class path contains multiple SLF4J bindings.
> SLF4J: Found binding in 
> [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: Found binding in 
> [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an 
> explanation.
> SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
> Error: Could not find or load main class 
> org.apache.hadoop.hbase.util.GetJavaProperty
> SLF4J: Class path contains multiple SLF4J bindings.
> SLF4J: Found binding in 
> [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: Found binding in 
> [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: Found binding in 
> [jar:file:/usr/local/hbase-2.2.2/hbase/maven/repository/org/slf4j/slf4j-log4j12/1.7.25/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an 
> explanation.
> SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
> 2022-05-09 20:03:41: Starting HiveServer2
> SLF4J: Class path contains multiple SLF4J bindings.
> SLF4J: Found binding in 
> [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: Found binding in 
> [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an 
> explanation.
> SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
> Hive Session ID = 0b419706-4026-4a8b-80fe-b79fecbccd4f
> Hive Session ID = 0f9e28d7-0081-4b2f-a743-4093c38c152d
> OK
> Exception in thread "HiveServer2-Handler-Pool: Thread-41" 
> java.lang.RuntimeException: java.lang.NullPointerException
>       at 
> org.apache.hive.service.cli.session.HiveSessionProxy.invoke(HiveSessionProxy.java:89)
>       at 
> org.apache.hive.service.cli.session.HiveSessionProxy.access$000(HiveSessionProxy.java:36)
>       at 
> org.apache.hive.service.cli.session.HiveSessionProxy$1.run(HiveSessionProxy.java:63)
>       at java.security.AccessController.doPrivileged(Native Method)
>       at javax.security.auth.Subject.doAs(Subject.java:422)
>       at 
> org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1729)
>       at 
> org.apache.hive.service.cli.session.HiveSessionProxy.invoke(HiveSessionProxy.java:59)
>       at com.sun.proxy.$Proxy42.close(Unknown Source)
>       at 
> org.apache.hive.service.cli.session.SessionManager.closeSession(SessionManager.java:552)
>       at 
> org.apache.hive.service.cli.CLIService.closeSession(CLIService.java:241)
>       at 
> org.apache.hive.service.cli.thrift.ThriftBinaryCLIService$1.deleteContext(ThriftBinaryCLIService.java:141)
>       at 
> org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:300)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>       at java.lang.Thread.run(Thread.java:748)
> Caused by: java.lang.NullPointerException
>       at 
> org.apache.hive.service.cli.operation.OperationManager.getQueryId(OperationManager.java:189)
>       at 
> org.apache.hive.service.cli.operation.OperationManager.removeOperation(OperationManager.java:206)
>       at 
> org.apache.hive.service.cli.operation.OperationManager.closeOperation(OperationManager.java:287)
>       at 
> org.apache.hive.service.cli.session.HiveSessionImpl.close(HiveSessionImpl.java:751)
>       at 
> org.apache.hive.service.cli.session.HiveSessionImplwithUGI.close(HiveSessionImplwithUGI.java:93)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:498)
>       at 
> org.apache.hive.service.cli.session.HiveSessionProxy.invoke(HiveSessionProxy.java:78)
>       ... 14 more{code}
> If you open another beeline as a client to initiate a database operation 
> request to the hiveserver, the beeline will also block after executing a 
> request and the hiveserver will throw the same exception again.
> If you call java API write a program to establish a jdbc connection as a 
> client to access hive, take JDBCDemo as an example.
> {code:java}
> import demo.utils.JDBCUtils;
> public class JDBCDemo{
>     public static void main(String[] args) throws Exception {
>         JDBCUtils.init();
>         JDBCUtils.createDatabase();
>         JDBCUtils.showDatabases();
>         JDBCUtils.createTable();
>         JDBCUtils.showTables();
>         JDBCUtils.descTable();
>         JDBCUtils.loadData();
>         JDBCUtils.selectData();
>         JDBCUtils.countData();
>         JDBCUtils.dropDatabase();
>         JDBCUtils.dropTable();
>         JDBCUtils.destory();
>     }
> }
> {code}
> Starting the hiveserver and running the written program will block directly 
> after the first database operation request, and the terminal will not throw 
> any hints, in line with beeline's blocking node, the hiveserver throws the 
> same exceptions as before.
> {code:java}
> liky@ljq1:~/hive_jdbc_test$ ./startJDBC_0.sh 
> SLF4J: Class path contains multiple SLF4J bindings.
> SLF4J: Found binding in 
> [jar:file:/home/liky/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.17.1/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: Found binding in 
> [jar:file:/home/liky/.m2/repository/org/slf4j/slf4j-log4j12/1.7.25/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an 
> explanation.
> SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
> Running: drop database if exists hive_jdbc_test
> Running: create database hive_jdbc_test
> ​
> ​
> ​
> ^Cliky@ljq1:~/hive_jdbc_test$
> {code}
> In summary, when the value of hive.server2.webui.max.historic.queries is set 
> to a larger value, {*}it blocks all clients that initiate the request{*}, and 
> the hive server side only throws a runtime null pointer exception, and the 
> observation log throws no related warnings and errors, causing some impact.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to