Class DynamicClassLoader
- All Implemented Interfaces:
Closeable
,AutoCloseable
The configured folder can be a HDFS path. In this case, the jar files under that folder will be copied to local at first under ${hbase.local.dir}/jars/. The local copy will be updated if the remote copy is updated, according to its last modified timestamp.
We can't unload a class already loaded. So we will use the existing jar files we already know to load any class which can't be loaded using the parent class loader. If we still can't load the class from the existing jar files, we will check if any new jar file is added, if so, we will load the new jar file and try to load the class again. If still failed, a class not found exception will be thrown.
Be careful in uploading new jar files and make sure all classes are consistent, otherwise, we may not be able to load your classes properly.
-
Field Summary
Modifier and TypeFieldDescriptionprivate static final String
private static final String
private static final String
private static final boolean
private File
private static final org.slf4j.Logger
private org.apache.hadoop.fs.Path
private org.apache.hadoop.fs.FileSystem
private final boolean
private final boolean
Fields inherited from class org.apache.hadoop.hbase.util.ClassLoaderBase
DEFAULT_LOCAL_DIR, LOCAL_DIR_KEY, parent
-
Constructor Summary
ConstructorDescriptionDynamicClassLoader
(org.apache.hadoop.conf.Configuration conf, ClassLoader parent) Creates a DynamicClassLoader that can load classes dynamically from jar files under a specific folder. -
Method Summary
Modifier and TypeMethodDescriptionprivate void
initTempDir
(org.apache.hadoop.conf.Configuration conf) Class<?>
private void
private Class<?>
tryRefreshClass
(String name) Methods inherited from class java.net.URLClassLoader
addURL, close, definePackage, findClass, findResource, findResources, getPermissions, getResourceAsStream, getURLs, newInstance, newInstance
Methods inherited from class java.security.SecureClassLoader
defineClass, defineClass
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findSystemClass, getClassLoadingLock, getPackage, getPackages, getParent, getResource, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, registerAsParallelCapable, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
Field Details
-
LOG
-
DYNAMIC_JARS_DIR
-
DYNAMIC_JARS_DIR_KEY
- See Also:
-
DYNAMIC_JARS_OPTIONAL_CONF_KEY
- See Also:
-
DYNAMIC_JARS_OPTIONAL_DEFAULT
- See Also:
-
userConfigUseDynamicJars
-
useDynamicJars
-
localDir
-
remoteDirFs
-
remoteDir
-
jarModifiedTime
-
-
Constructor Details
-
DynamicClassLoader
Creates a DynamicClassLoader that can load classes dynamically from jar files under a specific folder.- Parameters:
conf
- the configuration for the cluster.parent
- the parent ClassLoader to set.
-
-
Method Details
-
initTempDir
-
loadClass
- Overrides:
loadClass
in classClassLoader
- Throws:
ClassNotFoundException
-
tryRefreshClass
- Throws:
ClassNotFoundException
-
loadNewJars
-