2017-03-14 12 views

答えて

1

ここでは、このトピックに関する美しい記事があります。締結する

storing-apache-hadoop-data-cloud-hdfs-vs-s3

:スケーラビリティ、組み込みの永続性、および低価格で、S3が勝者です!それにもかかわらず、パフォーマンスを向上させ、ファイルサイズやストレージフォーマットの制限をなくすために、HDFSを使用する方法があります。

S3からファイルにアクセスする際、URIスキームs3aを使用するとs3nよりもパフォーマンスが向上し、s3aでは5GBのファイルサイズ制限はありません。

val data = sc.textFile("s3a://bucket-name/key") 

あなたは

spark-submit \ 
    --master local[2] \ 
    --packages datastax:spark-cassandra-connector:2.0.0-M2-s_2.11,org.apache.hadoop:hadoop-aws:2.7.3 \ 
    --conf spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem \ 
    --conf spark.hadoop.fs.s3a.access.key=xxxx \ 
    --conf spark.hadoop.fs.s3a.secret.key=xxxxxxx \ 
    --class org.etl.jobs.sprint.SprintBatchEtl \ 
    target/scala-2.11/test-ingestion-assembly-0.0.1-SNAPSHOT.jar 
1

リーディングS3が開始を指すように設定されているコンテンツ-Rangeヘッダを有する認証HTTPSリクエストを行うの問題である。例えば、このようなスパークのためのScalaのjarファイルをsumbitでき(これはオプションであり、シークヘビーなORCとパーケットの入力には避ける必要があります)。

主要業績ポイント:

  • 読む:あなたがアクセスの局所性を得ることはありません。ネットワーク帯域幅は、レンタルするVMによって制限されます。
  • S3はシークで遅いですが、近いうちにHadoop 2.8で取り上げられています。
  • S3はメタデータ操作(リスト、getFileStatus())で遅くなります。これは仕事のセットアップを傷つける。
  • 書き込み:その前のHadoop 2.8を除き、クライアントはclose()までお待ちください。は遅延を追加します。
  • rename():本当にCOPYです。タスクやジョブをコミットするためにrename()が使用されるため、s3を作業の宛先として使用するとパフォーマンスが低下します。最終的にS3が一貫しているので、とにかくデータを失う可能性があります。 に書き込んでからs3a://

どのように実装されていますか? Apache Hadoopのソースツリーで抽象度org.apache.fs.FileSystemクラスの実装を調べてください。 HDFSとS3Aは両方の例です。ここにはthe S3A oneがあります。より速いランダムIOのためのHadoop 2.8 lazy seekとfadvise = randomオプションを持つ入力ストリームはS3AInputStreamです。


記事を見ると、もう1つの答えがカバーされています。これは、3GBの5GBに限定されたS3についての記事です。議論の両面でいくつかの重要な点を欠場する。

私は、S3が最初に「S3は圧縮をサポートしています!」との偏見を持っていたと思う:と、両方の側面のいくつかの無知。 (ヒント、parquetとORCの両方がseek()を必要としているが、Content-Range HTTPヘッダを使ってS3クライアントとS3Aクライアントで行う)

S3はEMR以外のシステムでは危険な場所です中間データを格納し、パフォーマンスを犠牲にして、作業の非効率的な宛先になります。これは、ワークフローの次の段階で新しく作成されたデータが取得されない可能性があり、大きなデータセットではrename()のコミット作業が機能しないことを意味します。あなたのHadoopのバージョンを一致させるためにアマゾン-S3 SDKのJARのバージョンが必要になりますすべて開発中でうまく動作するようだが、規模の問題は、サンプルコードを見てみると

を打つところ生産があり、

  1. ; 1.7.4のHadoop 2.7用です。それは非常に脆弱であることが証明されています。
  2. s3aの秘密をspark-defaults.confに入れるのが最適です。 AWS_環境変数のままにしておき、spark-submitによってそれらを自動的に伝播させることができます。それらをコマンドラインに置くと、psコマンドで表示され、その必要はありません。
  3. S3aは実際にIAM認証を使用します:EC2 VMに提出する場合は、起動時にVMに与えられた資格情報を受け取るので、秘密を提供する必要はありません。
1

あなたはスパークSQLを使用することを計画している場合は、お使いの外部表は、S3を指している場合は、SPARKのSQLが大幅に退行

  • の下に検討する必要があります。 org.apache.spark.shuffle.FetchFailedException: Too large frame、java.lang.OutOfMemoryError

  • などのメモリの問題が発生する可能性もあります。シャッフルブロックが2GBを超えると、シャッフルが失敗します。この問題は、外部テーブルがS3を指している場合に発生します。 HDFSに

  • SPARKのSQLパフォーマンスが50%速く50MM/10Gデータセットに

S3と比較され
関連する問題