2017-12-05 23 views
3

ローカルマシンからパーキングファイルを読み取り、sparkを使用してS3に書き込もうとしています。しかし、私はそうするために自分のスパークセッションを適切に設定することはできません。明らかに設定を行う必要がありますが、それを行う方法については明確な参照が見つかりませんでした。ローカルスパークでs3からパーケットファイルを読み書きしようとしています

現在、私の火花セッションは、ローカルの寄木細工のモックを読み込んで、そのように定義されています

val sparkSession = SparkSession.builder.master("local").appName("spark session example").getOrCreate() 

答えて

2

私はhimanshuIIITianによって投稿を少し修正する必要があります(ごめんなさい)。

  1. 古い、古い、維持されていないs3nではなく、s3aコネクタを使用してください。 S3Aは:より速く、より新しいS3クラスタ(ソウル、フランクフルト、ロンドン、...)で動作し、より良いスケールです。 S3Nには、最新のバージョンのHadoopでそのコネクタを完全に削除することによってのみ修正された、基本的なパフォーマンスの問題があります。進む。

  2. s3をSparkクエリの直接の宛先として安全に使用することはできません。現在利用できる古典的な "FileSystem"コミッタではできません。ローカルファイルに書き込みます://その後、AWS CLIインタフェースを使用してデータをコピーします。あなたはより良いパフォーマンスと、IOから通常期待される信頼できる書き込みの保証を得るでしょう

+0

2つ目のノートで詳しく説明できますか?私はs3に安全に書き込むことができないのはどういう意味ですか?寄木張りのファイルを読むのはどうですか? – dlaredod

+0

つまり、作業を行うコードはrename()のようなファイルシステムであり、実際には独自のコミットプロトコルを必要とするオブジェクトストアだと仮定しているため、S3を直接のデスティネーションとして使用することはできません。ファイルの読み込み:問題はありませんが、S3への直接書き込みです。危険。 https://www.youtube.com/watch?v=BgHrff5yAQoをご覧ください。 –

1

ローカルスパークでS3から寄木細工のファイルを読み書きするには、あなたのsbtプロジェクト -

で2つの依存関係以下を追加する必要があります
"com.amazonaws" % "aws-java-sdk" % "1.7.4" 
"org.apache.hadoop" % "hadoop-aws" % "2.7.3" 

私はそのプロジェクトをsbtと仮定しています。そのmvnはその後、以下を追加した場合dependencies-

<dependency> 
    <groupId>com.amazonaws</groupId> 
    <artifactId>aws-java-sdk</artifactId> 
    <version>1.7.4</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.hadoop</groupId> 
    <artifactId>hadoop-aws</artifactId> 
    <version>2.7.3</version> 
</dependency> 

は、その後、あなたはthis-

val sparkSession = SparkSession.builder.master("local").appName("spark session example").getOrCreate() 
sparkSession.sparkContext.hadoopConfiguration.set("fs.s3n.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem") 
sparkSession.sparkContext.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", "s3AccessKey") 
sparkSession.sparkContext.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", "s3SecretKey") 

とその行わように、sparkSessionでS3の資格情報を設定する必要があります。これで、ParquetファイルをS3に読み書きすることができます。例:

sparkSession.read.parquet("s3n://bucket/abc.parquet") //Read 
df.write.parquet("s3n://bucket/xyz.parquet") //Write 

私はそれが役に立ちそうです!

+0

@dlaredodこの回答はあなたの問題を解決しましたか? – himanshuIIITian

+0

すごくうまくいった!とても有難い ! – dlaredod

関連する問題