2017-04-21 10 views
0

streamContext.textFileStream("s3://log-directory/")を使用してファイルをリッスンして解析し、それらをORCファイルとして出力するSparkストリーミングジョブがあります。この特定のディレクトリには、5分ごとに40個以上のファイルがストリーミングされています。S3に対するスパークストリーミングのパフォーマンスを向上させる方法

ただし、EMRクラスタに追加するマシンの数にかかわらず、実行時に3人から4人のエグゼキュータを持つことで、最大30個のタスクを実行することになります。これにより、各マイクロバッチジョブはすべてのデータを解析して変換するのに約5分かかり、一度に4〜10個のログファイルを解析するだけなので、ジョブがかなり遅れてしまいます。理想的には、各バッチは5分間に40以上のファイルをすべて処理し、次のセットに移動します。

私の質問 - 実行中のエグゼキュータの数を増やす方法はありますか?それとも、私の仕事が新しいファイルに追いつくことを許していないと思っていない他の問題がありますか?私はS3がSparkでいかに遅いかについていくつかのことを読んだが、私の仕事は 17/04/21 19:14:32 INFO FileInputDStream: Finding new files took 2135 msのようなメッセージを返し続けている。これはではありませんが、5分ではありませんので、ファイルを見つけることに問題はないようです。ファイルは現在、100メガバイトごとに限界いっぱいまでされている - それは同様に十分でなければなりませんように。これは思える

spark.default.parallelism = 160 
spark.executors.cores =  8 
spark.executor.memory =  10356M 

:環境に関しては、私は現在、その結果コンフィグオプションとしてspark.maximizeResourceAllocation=trueを設定します。私はあなたが与えることができる任意のヘルプをappreicate、そして必要に応じて詳細を追加して幸せ。

+0

ストリーミングのソースは何ですか?キネシス?カフカ?ファイル? –

+0

Amazon ELBのファイル – jpavs

答えて

0

これはELBから情報を取るとオークで直接情報を書き込むために火花を使用し

は全く最善の解決策ではない、Archtectureの問題です。

圧縮のためにorcが、ディスクにIOがあるため、書き込み処理が遅くなります。私があなたに提案しているのは、プロセスを変更すること、スパークであなたのデータをKinesisまたはKafkaに書き込んで速い書き込みにすることです。プロセスの反対側では、Fireboxを使用してFireboxを使用してS3またはSparkのデータを書き込んでS3のストリーム処理をより大きな時間枠で書き込むことができます。

データを高速に、高速データに変換したい場合は、AWSのPrestoまたはAthenaを使用してKinesisから直接データを取得することをお勧めします。またはあなたが必要とする他のツール。

こちらがお役に立てば幸いです。

+0

私のデータソースはELBログです。これらは私たちにとって貴重な情報を含んでいます。 Prestoは最終的には私がクエリに使用しているツールですが、ORCをテキストファイルに読み込むときのパフォーマンスははるかに向上しています。だから、私の考えは、バッチジョブ(私の現在の解決策)を持つのではなく、ELBがORCに直接書き込んだファイルをストリーミングすることでした。 ELBからKinesisにログデータを取得する方法はありませんか? – jpavs

+0

私はすでに使用していたソリューションがあり、同様の問題がFluentDであることをお勧めします。http://docs.fluentd.org/v0.12/articles/kinesis-stream大きな問題がありますOrcにデータを書き込むのはIOです。そしてorcでのパフォーマンスについては、これはOrcからの巨大なパフォーマンスです。ポイントは、リアルタイムデータの必要性は何ですか? Kinesisは、ELBのファイルよりも読み込みを速くするのに役立ちます。それを試してみてください。私はELB - > FluentD - > Kinesis - > Spark - > S3(Orc) –

0

SparkのFileInputDStreamは、ディレクトリをスキャンする方法が非常に非効率的です。タイムスタンプを取得して除外できるかどうかを確認するために、すべてのファイルを複数回スキャンすることになります。このファイルは、ファイルのタイムスタンプを取得するGET要求が100 + msかかるすべてのオブジェクトストアに対してサーフェスされます。

SPARK-17159がインストールされるまで、今すぐできることは、すでに処理した古いファイルがないディレクトリを維持することです。それらは必要ではありませんが、スキャンされ続けているほど、プログラムの速度が遅くなります。

関連する問題