[ 
https://issues.apache.org/jira/browse/HIVE-7553?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14089008#comment-14089008
 ] 

Ferdinand Xu commented on HIVE-7553:
------------------------------------

I am now working on this issue, but before putting in a patch I want to present 
the approach so that I could get some feedback.
To my understand, this issue is attempting to resolve the hot swap jar files 
for HIVE_AUX_JARS_PATH. I did some POCs locally. 
The main workflow for jars loader is as below:
1. Read env HIVE_AUX_JARS_PATH from the system and parse it through adding jar 
files under the directory one by one 
2. The system classloader loads the jar files in step 1. 
3. When trying to create a UDF based on the added aux jars, FunctionTask will 
try to get a class from loaded classes by calling getUdfClass method. From my 
view, the key factor to solve this problem is mainly about the classloader. 
For class loader, it has some "limitations" which should be some designs: 
a) when finding a class, it will check the parent classloader first to see 
whether the class is loaded and then current classloader. 
b) Classloader did not have the mechanism for us to reload a cached class. 
Based on this, I have come up with the following solutions in three catalogs. 
1. change the order of loading classes
 As mentioned in section 1, auxilary class path is parsed and loaded when hive 
server2 booting up. Can we postpone the loading phase until needed which means 
loading it on the go, namely creating UDF? In addition, reloading cached jars 
is handful issue. To resolve it, we should create a new classloader each time 
followed by calling the method Thread.setContextClassloader(refreshedCL) and 
HiveConf.setClassLoader(refreshedCL) 
2. override the standard classloader
Still keep the current loading order & make the classloader loading child 
classloader first and then the parent(still need to create a new classloader on 
the go) 
3. Others
use OSGi? JRebel? 
If I have anything incorrect, please feel free to figure me out. Thanks!

> avoid the scheduling maintenance window for every jar change
> ------------------------------------------------------------
>
>                 Key: HIVE-7553
>                 URL: https://issues.apache.org/jira/browse/HIVE-7553
>             Project: Hive
>          Issue Type: Bug
>          Components: HiveServer2
>            Reporter: Ferdinand Xu
>            Assignee: Ferdinand Xu
>
> When user needs to refresh existing or add a new jar to HS2, it needs to 
> restart it. As HS2 is service exposed to clients, this requires scheduling 
> maintenance window for every jar change. It would be great if we could avoid 
> that.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to