一、fs.defaultfs是什么
fs.defaultfs是Hadoop分布式文件系統中默認的文件系統URI。
在Hadoop集群中,有許多不同的文件系統可供選擇,包括HDFS(Hadoop分布式文件系統)、S3、本地文件系統等等。fs.defaultfs指定我們在使用Hadoop分布式文件系統API時使用哪個文件系統。
例如,在以下示例代碼中,如果我們未指定URI,則所使用的文件系統將為fs.defaultfs所配置的文件系統:
FileSystem fs = FileSystem.get(conf);
二、fs.defaultfs與Spark Jar文件處理
當我們使用Spark處理Hadoop文件系統中的Jar文件時,需要使用fs.defaultfs指定所選文件系統而不是本地文件系統。
以下是示例代碼:
SparkConf conf = new SparkConf().setAppName("MyApp")
.setMaster("local")
.set("spark.jars", "hdfs://localhost:9000/path/to/your.jar")
.set("spark.driver.extraClassPath", "hdfs://localhost:9000/path/to/your.jar")
.set("spark.executor.extraClassPath", "hdfs://localhost:9000/path/to/your.jar")
.set("fs.defaultfs", "hdfs://localhost:9000");
JavaSparkContext jsc = new JavaSparkContext(conf);
三、fs.defaultfs未設置的影響
如果您沒有設置fs.defaultfs,則可能會在使用HDFS之外的文件系統時遇到問題。
例如,如果您試圖使用以下代碼創建一個在本地文件系統上的文件:
FileSystem fs = FileSystem.get(new Configuration());
Path path = new Path("/path/to/file");
FSDataOutputStream out = fs.create(path);
你可能會遇到如下異常:
java.lang.IllegalArgumentException: Wrong FS: file:/path/to/file, expected: hdfs://localhost:9000
這個異常是因為使用了配置為“fs.defaultfs”所描述的默認文件系統(在本例中為HDFS)。
四、使用fs.defaultfs創建ViewFS中的文件
ViewFS是一個允許用戶將多個Hadoop文件系統視為單個文件系統的軟件.
如果您想要在ViewFS中創建文件,請使用以下代碼示例:
Configuration conf = new Configuration();
conf.set("fs.defaultfs", "viewfs://cmbc/");
FileSystem fs = FileSystem.get(conf);
Path path = new Path("/path/to/file");
FSDataOutputStream out = fs.create(path);
out.writeBytes("Hello World!");
out.close();
這里,“fs.defaultfs”指向ViewFS的默認文件系統。
請注意,“cmbc”是所需的ViewFs mount table的名稱。mount table是一個XML文件,描述了如何將Hadoop文件系統掛在到ViewFS的命名空間。
五、fs.defaultfs和fs.defaultFs的區別
請注意,fs.defaultfs和fs.defaultFs是不同的配置屬性。
fs.defaultFs是舊版的配置屬性,而fs.defaultfs是新版的配置屬性。
fs.defaultFs 提供了與fs.defaultfs相同的功能,但它已被棄用,不建議使用。
因此,為了保持兼容性,請使用fs.defaultfs而不是fs.defaultFs。
六、結論
在Hadoop分布式集群中,選擇正確的文件系統非常重要。fs.defaultfs設置用于指定使用哪個文件系統,它可以與HDFS、ViewFS等文件系統一起使用。
Spark用戶需要指定fs.defaultfs來確保能夠使用Spark處理Hadoop文件系統中的jar文件。fs.defaultfs未設置可能會在使用HDFS之外的文件系統時遇到問題。
fs.defaultfs與fs.defaultFs是不同的配置屬性,建議使用新版fs.defaultfs。