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
FieldsModifier and TypeFieldDescriptionprivate static final Stringprivate static final Stringprivate static final Stringprivate static final booleanprivate Fileprivate static final org.slf4j.Loggerprivate org.apache.hadoop.fs.Pathprivate org.apache.hadoop.fs.FileSystemprivate final booleanprivate final booleanFields inherited from class org.apache.hadoop.hbase.util.ClassLoaderBase
DEFAULT_LOCAL_DIR, LOCAL_DIR_KEY, parent -
Constructor Summary
ConstructorsConstructorDescriptionDynamicClassLoader(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 voidinitTempDir(org.apache.hadoop.conf.Configuration conf) Class<?>private voidprivate Class<?>tryRefreshClass(String name) Methods inherited from class java.net.URLClassLoader
addURL, close, definePackage, findClass, findResource, findResources, getPermissions, getResourceAsStream, getURLs, newInstance, newInstanceMethods inherited from class java.security.SecureClassLoader
defineClass, defineClassMethods 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:
loadClassin classClassLoader- Throws:
ClassNotFoundException
-
tryRefreshClass
- Throws:
ClassNotFoundException
-
loadNewJars
-