2016-09-06 4 views
9

Sparkストリーミングアプリケーションのカスタムメトリックソース/シンクを作成しましたが、metrics.propertiesから初期化しようとしていますが、エグゼキュータからは機能しません。私はSparkクラスタのマシンを制御できないので、クラスタ内の$ SPARK_HOME/conf /にプロパティファイルをコピーすることはできません。私のアプリがどこにあるかのような場所にあるのですが、ファット・ジャーがクラスタ内のワーカー・ノードにダウンロードされるまでに、エグゼキュータは既に起動されており、Metricsシステムはすでに初期化されています。 。 「spark.metrics.confがmetrics.properties =」が、「metrics.properties」の執行に出荷された時点で、そのメトリックシステムがすでにあるカスタムソース/シンクの設定が認識されない

はこのpostに続いて、私は「spark.files = metrics.properties」を指定しました初期化されました。

私自身のメトリクスシステムを初期化するとファイルが取り込まれますが、マスター/エグゼキュータレベルのメトリック/プロパティが表示されません(例:executor.sink.mySink.propName = myProp - 'propName' from 'mySink')、彼らはSparkのメトリックシステムによってinitializedです。

executor initializeのメトリクスシステムの前に 'metrics.properties'を出荷する方法がありますか?

アップデート1:私は、スタンドアローンのスパークでこれをしようとしています2.0.0クラスタ

アップデート2:これを達成する上でハックの思想 - あなたの「実際の」火花ジョブを開始する前に、metrics.propertiesをコピーするためにダミーのジョブを開始各労働者に次に、既知のファイルの場所で実際の仕事を開始します。短所 - 従業員が死亡し、別の従業員がその所在を取る場合、このファイルは事前に知られているパスにありません。解決策の選択肢 - 新しいワーカーマシンが起動すると、metrics.propertiesをgit-repoから引き出し、既知のパスに配置します。それはうまくいくかもしれませんが、ひどくハッキリですが、Sparkが内部的にサポートするのが望ましい解決策です。

答えて

1

Spark metrics on wordcount example は基本的に私はあなたがSparkConf only load local system properties if they start with the prefix spark.すべての労働者に

+0

私はそれを試みました。 2つの問題 - 1) 'metrics.properties'をドライバマシンにコピーしません - エグゼキュータの作業ディレクトリにのみファイルをコピーすることになっているためです。 2)エグゼキュータ上でこれらのファイルをコピーするまでに、metricsシステムはファイルの不足のために初期化して失敗しました。 –

1

をmetrics.propertiesを送信するために--filesを追加する必要があると信じて、あなたが火花を追加あなたの特性をロードするために、トレイを持っています参照してください?

+0

私はまったくフォローしていませんが、質問の文脈でこれはどういう意味ですか? –

+0

'private val masterMetricsSystem = MetricsSystem.createMetricsSystem(" master "、conf、securityMgr) このconf値はSparkConfです。このconfにプロパティを挿入することができれば、カスタムプロパティでmetricsSystemを作成し、あなたの例では、spark.executor.sink.mySink.propName = myPropそれからあなたのシンクでそれを読んでください。 私はmetricSystemで何もしようとしたことがないので、これを使用できるかどうかはわかりませんが、sparkに--confを追加してExecutorのpropetiesを変更しましたので、これが役に立ちます。 – jlopezmat

+0

私はこのコードも見て、メトリクスのプロパティはexecutor.source.mysource.class = MyClassとして指定されています。返信いただきありがとうございますが、動作しません。 –

関連する問題