2017-05-15 10 views
0

スパークジョブ中にS3バケットの内容をEMRにリストする方法を理解できません。私は、次のEMRのS3フォルダを一覧表示

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

これは、常に次のエラー

hadoopConfiguration fs.defaultFS -> hdfs://**********.eu-central-1.compute.internal:8020

java.lang.IllegalArgumentException: Wrong FS: s3://*********/, expected: 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からjarsをデプロイしたい場合)、私はs3:// logbucket/j -.../containers/application内のログのみを見つけることができます。/conatiner...0001。 S3で表示されるまでかなりの遅延があります。どのように私はマスターでsshを介してそれを見つけるのですか?またはスパークのアプリケーションログをチェックするために、より高速で/より良い方法がいくつかありますか? 更新:ちょうど/mnt/var/log/hadoop-yarn/containersの下にそれらが見つかりましたが、それは糸によって所有されています:糸とhadoopユーザーとして私はそれを読むことができません。 :(アイデア

答えて

0

私はあなたが右のFSを拾っているとは思わない。何かしてみただ静的FileSystem.get()メソッドを使用するか、またはPath.get()

:?YARN UIは、ログについて Path p = new Path("s3://bucket/subdir"); FileSystem fs = p.get(conf); FileStatus[] status= fs.listStatus(p);

をすべきですノードマネージャーを経由してそれらにお越しください。

関連する問題