Labとは、アスタミューゼのエンジニアとデザイナーのブログです。アスタミューゼの事業・サービスを支えている知識と舞台裏の今を発信しています。データ開発エンジニアはじめまして山縣です。私のチームでは弊社のサービスやコンサルティングなどで必要となる特許やその他さまざまなデータを収集・解析しています。含めたいろいろなミドルウェア・ツールを使っています。そこで私の記事ではそういった業務に活用しているツールについて書いていきたいと思います。何かなどの解説はいたるところにあると思うので省略します。)弊社でのSparkの導入は去年の春くらいからはじまりました。はじめは試験的に使っていましたが徐々に利用範囲を広げ、今ではデータの処理には欠かせないものとなっています。そのクラスタのYARN上で稼働しています。導入に大きく寄与したと思います。Sparkの活用が進む一方で、実際に利用していると運用が難しいと感じることもあります。落ちてしまったり、SparkSQLで複雑なクエリを実行すると処理がこけたりと、いろいろな現象に出くわしました。この辺の問題はSpark自身が急速に進化していく中で改善されてきていると思います。何も考えずとも全部Sparkにお任せというところまではきていないかなという印象を受けます。今回も開発していたSparkのジョブがメモリの問題で落ちるという現象に出くわしましたのでそのことについて書きたいと思います。以下の内容については実際に行ったことをメモして書いていますが、試行錯誤しながら行ったこともあり不正確、曖昧な点もあるかもしれません。HDFS上にある複数種のCSVを読み込み、集計やJoinなどを行い中間的なCSVを出力しながら最終的なCSVを生成するものです。弊社の小さいクラスタでは3時間ほどかかります。このジョブを実行すると処理が2,30%進んだところでジョブが失敗するという現象に出くわしました。側が原因のようでした。メモリを4GBまで増やしてみました。この対応により今まで落ちていたあたりより先まで処理を進めることができました。それでも処理が70-80%くらいまで進んだところで同じようにエラーとなり落ちてしまいます。解決を急ぐならさらにメモリを足すか、Jobを分割すれば対応はできそうでした。側でメモリを消費します)を入れたつもりがありませんでした。それにも関わらずこのようにメモリを喰うのはなぜなのか?さすがに気になったので調べてみることにしました。当初はパラメータをいろいろいじったりしていたのですが、なかなか状況の改善につながりませんでした。プロセスのメモリダンプを取ってメモリの利用状況を確認してみました。コマンドで取得しました。読み込ませたところ以下のような結果となりました。MATではメモリリークの疑いのあるものを自動的に調べて教えてくれます。“org.apache.spark.ui.jobs.JobProgressListner"が占めていることが分かりました。実行状況を管理するクラスであることが想像できます。そこで実際にSparkのソースコードを確認してみしました。メンバを多数持っています。したがってジョブが長時間走るとメンバー変数のデータ量が増え、それがメモリを圧迫していると想像されます。コードを見ていたら以下の様な記述を見つけました。SparkUI.DEFAULT_RETAINED_JOBS)UIまわりのパラメータですね。ドキュメントを見ると以下のように、ジョブ数、ステージ数をいくつまで保存しておくかを指定するパラメータで、デフォルトで1000となっています。collecting.今回のジョブでは落ちるところまでで、ステージ数で2、300、ジョブ数はもっと少なかったと記憶しています。情報が削除されずどんどんメモリに追加されていっていたと考えられます。したがってこのパラメータを小さくすれば安定して動くのではないかと考えました。...そこで上記のように極端に少ないジョブ数、ステージ数を保持するようにして実行してみました。その結果、無事にジョブを最後まで実行することができました。念のため、7,80%処理が進んだ状況でメモリダンプを取ってみました。期待通りにメモリ使用量を減らせたと考えられます。側のメモリ量に応じて調整するとよいのではないかと思います。今回のトラブルは、はじめからこれらのパラメータを理解していればパラメータ調整だけで済む話でした。Sparkへの理解も深めることができたと思っています。Sparkはここ当面は大規模データ処理関連ではホットなプロダクトとなると考えています。今後も折を見て内部構造なども理解できるようにしていきたいと思います。起きたエラーとその対応Tweet関連記事2019-05-29Nuxt.jsのライフサイクル覚書デザイン部でフロントエンドエンジニアをしているkitoです。Rea...2019-04-09JDK12で変わったswitchに触れてみる。開発部のyanagitaです。9.6にアップグレードした話こんにちは。開発部のtorigakiです。HBaseで作る100万通りの文書分類器こんにちは。Labとは、アスタミューゼのエンジニアとデザイナーのブログです。アスタミューゼの事業・サービスを支えている知識と舞台裏の今をブログとTwitterで発信しています。@astamuseLabアスタミューゼで働きませんか?アスタミューゼでは現在エンジニア、デザイナーを募集中です。興味のある方はぜひご応募ください。(1)@astamuseLabさんのツイートastamuseサービスサイトastamuse世界中のinnovatorのために、創造活動を可視化し未来を創るためのプラットフォームです。活用や新規事業に役立つ様々な機能を提供します。ビッグデータ分析から情報提供し、あなたの知らない未来を発見するメディアです。reserved.スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。