本文为本人学习hadoop源码过程中所做的笔记,如有问题请大家指出,或者觉得不好,请绕行,谢谢!
fs = FileSystem.newInstance(uri, conf);
这段代码是如何得到FileSystem对象的呢?
由于FileSystem是抽象类,不能直接实例化对象,
因此只能通过其子类来完成实例化。
哪又是如何通过子类实例化的呢?
通过阅读源码,关键代码如下:
public static Class<? extends FileSystem> getFileSystemClass(String scheme,
Configuration conf) throws IOException {
if (!FILE_SYSTEMS_LOADED) {
loadFileSystems();
}
Class<? extends FileSystem> clazz = null;
if (conf != null) {
clazz = (Class<? extends FileSystem>) conf.getClass("fs." + scheme + ".impl", null);
}
if (clazz == null) {
clazz = SERVICE_FILE_SYSTEMS.get(scheme);
}
if (clazz == null) {