2017-05-15 48 views
0

我無法理解如何在火花作業期間簡單列出EMR上S3存儲桶的內容。 我想做到以下幾點在EMR上列出S3文件夾

Configuration conf = spark.sparkContext().hadoopConfiguration(); 
FileSystem s3 = S3FileSystem.get(conf); 
List<LocatedFileStatus> list = toList(s3.listFiles(new Path("s3://mybucket"), false)) 

這總是失敗,出現以下錯誤

java.lang.IllegalArgumentException: Wrong FS: s3://*********/, expected: hdfs://**********.eu-central-1.compute.internal:8020 
在hadoopConfiguration fs.defaultFS -> hdfs://**********.eu-central-1.compute.internal:8020

我明白,如果我不使用的協議現在的樣子/ myfolder/myfile而不是hdfs:// myfolder/myfile它將默認爲df.defaultFS。 但我希望如果我指定我的s3:// mybucket/fs.defaultFS應該不重要。

如何訪問目錄信息? spark.read.parquet(「s3://mybucket/*.parquet」)工作得很好,但爲了這個任務,我需要檢查一些文件的存在,並且還想刪除一些文件。我認爲org.apache.hadoop.fs.FileSystem將是正確的工具。

PS:我也不明白記錄是如何工作的。如果我使用部署模式集羣(我想從S3中部署不支持客戶端模式的jar),我只能在s3:// logbucket/j -.../containers/application中找到我的日誌。 /conatiner...0001。在S3的演出之前有相當長的延遲。我如何通過主人的ssh找到它?還是有一些更快/更好的方法來檢查火花應用程序日誌? 更新:剛剛在/mnt/var/log/hadoop-yarn/containers找到它們,但它是由紗線:紗線和hadoop用戶擁有,我無法閱讀它。 :(思路

回答

0

我不認爲你拿起FS權利;只使用靜態FileSystem.get()方法,或Path.get()

試着這麼做: Path p = new Path("s3://bucket/subdir"); FileSystem fs = p.get(conf); FileStatus[] status= fs.listStatus(p);

關於日誌,紗UI應讓你通過節點​​管理員看到他們。