Thai Bui created HIVE-17502:
-------------------------------
Summary: Reuse of default session should not throw an exception in
LLAP w/ Tez
Key: HIVE-17502
URL: https://issues.apache.org/jira/browse/HIVE-17502
Project: Hive
Issue Type: Bug
Components: llap, Tez
Affects Versions: 2.2.0, 2.1.1
Environment: HDP 2.6.1.0-129, Hue 4
Reporter: Thai Bui
Assignee: Thai Bui
Hive2 w/ LLAP on Tez doesn't allow a currently used, default session to be
skipped mostly because of this line
https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezSessionPoolManager.java#L365.
However, some clients such as Hue 4, allow multiple sessions to be used per
user. Under this configuration, a Thrift client will send a request to either
reuse or open a new session. The reuse request could include the session id of
a currently used snippet being executed in Hue, this causes HS2 to throw an
exception:
{noformat}
2017-09-10T17:51:36,548 INFO [Thread-89]: tez.TezSessionPoolManager
(TezSessionPoolManager.java:canWorkWithSameSession(512)) - The current user:
hive, session user: hive
2017-09-10T17:51:36,549 ERROR [Thread-89]: exec.Task
(TezTask.java:execute(232)) - Failed to execute tez graph.
org.apache.hadoop.hive.ql.metadata.HiveException: The pool session
sessionId=5b61a578-6336-41c5-860d-9838166f97fe, queueName=llap, user=hive,
doAs=false, isOpen=true, isDefault=true, expires in 591015330ms should have
been returned to the pool
at
org.apache.hadoop.hive.ql.exec.tez.TezSessionPoolManager.canWorkWithSameSession(TezSessionPoolManager.java:534)
~[hive-exec-2.1.0.2.6.1.0-129.jar:2.1.0.2.6.1.0-129]
at
org.apache.hadoop.hive.ql.exec.tez.TezSessionPoolManager.getSession(TezSessionPoolManager.java:544)
~[hive-exec-2.1.0.2.6.1.0-129.jar:2.1.0.2.6.1.0-129]
at org.apache.hadoop.hive.ql.exec.tez.TezTask.execute(TezTask.java:147)
[hive-exec-2.1.0.2.6.1.0-129.jar:2.1.0.2.6.1.0-129]
at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:197)
[hive-exec-2.1.0.2.6.1.0-129.jar:2.1.0.2.6.1.0-129]
at
org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:100)
[hive-exec-2.1.0.2.6.1.0-129.jar:2.1.0.2.6.1.0-129]
at org.apache.hadoop.hive.ql.exec.TaskRunner.run(TaskRunner.java:79)
[hive-exec-2.1.0.2.6.1.0-129.jar:2.1.0.2.6.1.0-129]
{noformat}
Note that every query is issued as a single 'hive' user to share the LLAP
daemon pool, a set of pre-determined number of AMs is initialized at setup
time. Thus, HS2 should allow new sessions from a Thrift client to be used out
of the pool, or an existing session to be skipped and an unused session from
the pool to be returned. The logic to throw an exception in the
`canWorkWithSameSession` doesn't make sense to me.
I have a solution to fix this issue in my local branch at
https://github.com/thaibui/hive/commit/078a521b9d0906fe6c0323b63e567f6eee2f3a70.
When applied, the log will become like so
{noformat}
2017-09-10T09:15:33,578 INFO [Thread-239]: tez.TezSessionPoolManager
(TezSessionPoolManager.java:canWorkWithSameSession(533)) - Skipping default
session sessionId=6638b1da-0f8a-405e-85f0-9586f484e6de, queueName=llap,
user=hive, doAs=false, isOpen=true, isDefault=true, expires in 591868732ms
since it is being used.
{noformat}
A test case is provided in my branch to demonstrate how it works. If possible I
would like this patch to be applied to version 2.1, 2.2 and master. Since we
are using 2.1 LLAP in production with Hue 4, this patch is critical to our
success.
Alternatively, if this patch is too broad in scope, I propose adding an option
to allow "skipping of currently used default sessions". With this new option
default to "false", existing behavior won't change unless the option is turned
on.
I will prepare an official path if this change to master &/ the other branches
is acceptable. I'm not an contributor &/ committer, this will be my first time
contributing to Hive and the Apache foundation. Any early review is greatly
appreciated, thanks!
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)