SlideShare a Scribd company logo
本当にあった
Apache Spark障害の話
株式会社サイバーエージェント 井上 ゆり
自己紹介>
井上 ゆり
株式会社サイバーエージェント
アドテク本部 AMoAd所属
twitter: @iyunoriue
GitHub: x1-
HP: バツイチとインケンのエンジニアブログ
http://x1.inkenkun.com/
2014年3月、ApacheSparkの
メジャー・バージョンがリリースされました。
1年半経った現在1.5.2がリリースされています。
公式JIRAから取得した、Sparkバージョン別のissue数です。
機能も増えていますが当然バグも増えています。
1年近くApacheSparkと付き合って、
その間に行ってきた
トラブルシューティングを
3つほどお話させて頂きます。
その前に・・・
Spark環境と用途
• Sparkクラスタ : N十台, オンプレ
• Sparkクラスタ化: zookeeper + Mesos
• SparkノードのFS: HDFS-HA + GCS + S3
• GUI : Apache Zeppelin, iPython
• 開発言語 : scala
• ジョブのビルド : sbt
• 用途 : 定常ジョブ(cron実行)
アドホック分析
Sparkのバージョンを1.4.0から1.5.1に
アップグレードしたら、HDFS-HAでエラー
case.1
case.1 Spark1.5系&HDFS-HAでエラー
Sparkクラスタを1.4.0から1.5.1へバージョンアップしたと
ころ、ジョブがfailするようになりました。
NameNodeが解決できていないようなエラーメッセージです。
※nameservice1はHDFS-HAクラスタに設定した論理サービス名です。
内容
15/10/21 15:22:12 WARN scheduler.TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, spark003.example.com):
java.lang.IllegalArgumentException: java.net.UnknownHostException: nameservice1
at org.apache.hadoop.security.SecurityUtil.buildTokenService(SecurityUtil.java:374)
at org.apache.hadoop.hdfs.NameNodeProxies.createNonHAProxy(NameNodeProxies.java:312)
at org.apache.hadoop.hdfs.NameNodeProxies.createProxy(NameNodeProxies.java:178)
at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:665)
at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:601)
:
case.1 Spark1.5系&HDFS-HAでエラー
• HDFSのHighAvailabilityを無効にすると正常に終了します。
• また、クラスタのバージョンを1.4系に戻すと正常に終了し
ます。
• JIRAにバグ報告するものの、HDFSの設定ファイルを見なおせ
とのこと。
SPARK-11227: Spark1.5+ HDFS HA mode throw
java.net.UnknownHostException: nameservice1
https://issues.apache.org/jira/browse/SPARK-11227
Try
case.1 Spark1.5系&HDFS-HAでエラー
• Apache Zeppelinで同じ内容を実行すると正常終了す
るので差異を調べました。
• Zeppelinで使われているSQLContextはHiveContext。
• 私たちが使っていたSQLContextはデフォルトの
SQLContext。
どうやらHiveContextが鍵のようです。
原因
case.1 Spark1.5系&HDFS-HAでエラー
• SQLContextではなくHiveContextを使うと、
NameNodeの名前解決ができました。
• デフォルトのSQLContextの使用をやめて、
HiveContextを使うようにしました。
解決
implicit val sqlContext = new HiveContext( sc )
executorからの応答がなくなる
case.2
case.2 executorからの応答がなくなる
Sparkでジョブを実行すると、タスクはdriverによって複数
個に分割されてexecutorで実行されます。
内容
分割タスクが完了するとexecutorはdriverにレスポンスを返
します。
driver
executor
executor
executor
driver
タスク 結果
case.2 executorからの応答がなくなる
ところが、GCなどのためにいつまで待ってもレスポンスを返
さないexecutorがたまにいます。
内容
driverは全てのexecutorのレスポンスを待ち受けるので(fail
しない限り)、半永久的にジョブが完了しません。
driver
executor
executor
executor
driver
タスク 結果
a a
case.2 executorからの応答がなくなる
• 完了しないジョブがSparkクラスタ内のメモリ資源を確保し続け
てしまいました。
• 別のジョブが開始されると、クラスタ内のメモリ解放を待ち続
けるという負の待ち行列が発生してしまいました。
問題
ジョブAが確保したメモリ 空きメモリ
ジョブBが必要なメモリ
クラスタの総メモリ
不足!
メモリに空きができるまで待つ
ジョブCが必要なメモリ
case.2 executorからの応答がなくなる
•spark.network.timeout: 120s
spark.network.timeoutに設定した値は、ほとんど全ての通信系タ
イムアウト(下記)のデフォルト値になります。
* spark.core.connection.ack.wait.timeout
* spark.akka.timeout
* spark.storage.blockManagerSlaveTimeoutMs
* spark.shuffle.io.connectionTimeout
* spark.rpc.askTimeout
* spark.rpc.lookupTimeout
Try
まずはタイムアウト関連の設定を見直しました。
case.2 executorからの応答がなくなる
•spark.dynamicAllocation.executorIdleTimeout: 60s
ダイナミック・アロケーションが有効な場合のexecutorのアイドル
時間です。
※ダイナミック・アロケーションを有効にしていないので関係あり
ませんでした。
Try
タイムアウトの設定ではなさそうです。
その他のタイムアウト設定。
case.2 executorからの応答がなくなる
遅延タスクを再起動するspark.speculationを設定しました。
spark.speculationがtrueに設定されていると、遅いタスクの
再起動を実施します。
※DatabicksのMatei Zahariaがここ↓で回答しているように、stragglersをkill
するような仕組みはないようです。
http://apache-spark-user-list.1001560.n3.nabble.com/Does-Spark-always-wait-for-
stragglers-to-finish-running-td14298.html
解決.1
spark.speculation true
spark.speculation.multiplier 1.5
spark.speculation.quantile 0
case.2 executorからの応答がなくなる
更に、OSのtimeoutコマンドで終了しないジョブを強
制タイムアウトさせました。
タスクの強制再起動で予想外に時間がかかってしまっ
たジョブは、強制終了させます。
解決.2
timeout 600 $SPARK_HOME/bin/spark-submit job.jar
CIツール(Jenkins)でジョブの
sbtテストがfailする
case.3
case. ジョブのsbtテストがfailする
各テスト内でSparkコンテキストを生成してテストを実施し
ていました。
内容
sc = new SparkContext( conf )
val rdd = sc.parallelize( Seq( 1, 2 ) ).map( id =>
Row( id, 0d, "", "http://example.com/" )
)
val df = sqlContext.createDataFrame( rdd, schema )
case. ジョブのsbtテストがfailする
• sbt>=0.10.0からタスクの並列実行機能が入ったた
め。
• SparkContextは1つのJVMプロセスで複数生成できな
い。
SPARK-2243: Support multiple SparkContexts in the same JVM
https://issues.apache.org/jira/browse/SPARK-2243
原因
case. ジョブのsbtテストがfailする
• テスト実行時のタスク並列実行をやめました。
• build.sbtに下記を追加したところ、正常に実行さ
れるように・・・!
解決
parallelExecution in Test := false
まとめ
solv 1.
Spark1.5系ではHiveContextを使ったほうが幸せ
solv 2.
executorから応答がなくなって困ったときは
spark.speculationを使おう
timeout付きでジョブを実行すると安心
solv 3.
sbt testの前にparallelExecutionの設定を!

More Related Content

PDF
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
NTT DATA OSS Professional Services
 
PPTX
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
NTT DATA Technology & Innovation
 
PDF
Apache Kafka 0.11 の Exactly Once Semantics
Yoshiyasu SAEKI
 
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
 
PPTX
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
Daiyu Hatakeyama
 
PDF
Vacuum徹底解説
Masahiko Sawada
 
PDF
Akkaとは。アクターモデル とは。
Kenjiro Kubota
 
PDF
Azure Database for PostgreSQL 入門 (PostgreSQL Conference Japan 2021)
Keisuke Takahashi
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
NTT DATA OSS Professional Services
 
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
NTT DATA Technology & Innovation
 
Apache Kafka 0.11 の Exactly Once Semantics
Yoshiyasu SAEKI
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
Daiyu Hatakeyama
 
Vacuum徹底解説
Masahiko Sawada
 
Akkaとは。アクターモデル とは。
Kenjiro Kubota
 
Azure Database for PostgreSQL 入門 (PostgreSQL Conference Japan 2021)
Keisuke Takahashi
 

What's hot (20)

PDF
SQL大量発行処理をいかにして高速化するか
Shogo Wakayama
 
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
NTT DATA OSS Professional Services
 
PPTX
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...
Holden Karau
 
PPTX
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
NTT DATA Technology & Innovation
 
PDF
SQream DB, GPU-accelerated data warehouse
NAVER Engineering
 
PDF
Oracle GoldenGate入門
オラクルエンジニア通信
 
PDF
Javaのログ出力: 道具と考え方
Taku Miyakawa
 
PPT
インフラエンジニアのためのcassandra入門
Akihiro Kuwano
 
PDF
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
 
KEY
PyOpenCLによるGPGPU入門
Yosuke Onoue
 
PDF
SparkとCassandraの美味しい関係
datastaxjp
 
PDF
Apache Spark の紹介(前半:Sparkのキホン)
NTT DATA OSS Professional Services
 
PPTX
PostgreSQL共有バッファと関連ツール
Masahiko Sawada
 
PPTX
Azure Api Management 俺的マニュアル 2020年3月版
貴志 上坂
 
PDF
Apache Arrow - データ処理ツールの次世代プラットフォーム
Kouhei Sutou
 
PPTX
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
NTT DATA Technology & Innovation
 
PPTX
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
NTT DATA Technology & Innovation
 
PPTX
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
NTT DATA Technology & Innovation
 
PPTX
これがCassandra
Takehiro Torigaki
 
PDF
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
NTT DATA Technology & Innovation
 
SQL大量発行処理をいかにして高速化するか
Shogo Wakayama
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
NTT DATA OSS Professional Services
 
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...
Holden Karau
 
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
NTT DATA Technology & Innovation
 
SQream DB, GPU-accelerated data warehouse
NAVER Engineering
 
Oracle GoldenGate入門
オラクルエンジニア通信
 
Javaのログ出力: 道具と考え方
Taku Miyakawa
 
インフラエンジニアのためのcassandra入門
Akihiro Kuwano
 
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
 
PyOpenCLによるGPGPU入門
Yosuke Onoue
 
SparkとCassandraの美味しい関係
datastaxjp
 
Apache Spark の紹介(前半:Sparkのキホン)
NTT DATA OSS Professional Services
 
PostgreSQL共有バッファと関連ツール
Masahiko Sawada
 
Azure Api Management 俺的マニュアル 2020年3月版
貴志 上坂
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Kouhei Sutou
 
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
NTT DATA Technology & Innovation
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
NTT DATA Technology & Innovation
 
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
NTT DATA Technology & Innovation
 
これがCassandra
Takehiro Torigaki
 
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
NTT DATA Technology & Innovation
 
Ad

Similar to 本当にあったApache Spark障害の話 (20)

PDF
Sparkを用いたビッグデータ解析 〜 前編 〜
x1 ichi
 
PPTX
Jjug ccc
Tanaka Yuichi
 
PPTX
Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築
Junichi Noda
 
PPTX
Big datauniversity
Tanaka Yuichi
 
PDF
ビッグじゃなくても使えるSpark Streaming
chibochibo
 
PDF
Spark Streamingで作る、つぶやきビッグデータのクローン (2015-11.10版)
Junichi Noda
 
PPTX
BigDataUnivercity 2017年改めてApache Sparkとデータサイエンスの関係についてのまとめ
Tanaka Yuichi
 
PPTX
Hue Notebook
Tatsuo Kawasaki
 
PDF
State of the art Stream Processing #hadoopreading
Yahoo!デベロッパーネットワーク
 
PDF
個人的にAmazon EMR5.0.0でSpark 2.0を使ってZeppelinでSQL集計してみる
Eiji Shinohara
 
PDF
Apache Spark + Arrow
Takeshi Yamamuro
 
PDF
20160127三木会 RDB経験者のためのspark
Ryuji Tamagawa
 
PDF
20170111 macnica networks-nohara_rancher_usecase
Minehiko Nohara
 
PPTX
Apache sparkでつぶやきビッグデータ クローンをつくってみた
Junichi Noda
 
PDF
Spark 2.0 What's Next (Hadoop / Spark Conference Japan 2016 キーノート講演資料)
Hadoop / Spark Conference Japan
 
PDF
[Oracle big data jam session #1] Apache Spark ことはじめ
Kenichi Sonoda
 
PDF
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
NTT DATA OSS Professional Services
 
PDF
Spark Streamingで作る、つぶやきビッグデータのクローン(Hadoop Spark Conference Japan 2016版)
Junichi Noda
 
PPTX
OpenStack Saharaを使ったデータ分析基板を作った話 - OpenStack最新情報セミナー(2016年7月)
VirtualTech Japan Inc.
 
PDF
はてなのサービスの開発環境
ast_j
 
Sparkを用いたビッグデータ解析 〜 前編 〜
x1 ichi
 
Jjug ccc
Tanaka Yuichi
 
Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築
Junichi Noda
 
Big datauniversity
Tanaka Yuichi
 
ビッグじゃなくても使えるSpark Streaming
chibochibo
 
Spark Streamingで作る、つぶやきビッグデータのクローン (2015-11.10版)
Junichi Noda
 
BigDataUnivercity 2017年改めてApache Sparkとデータサイエンスの関係についてのまとめ
Tanaka Yuichi
 
Hue Notebook
Tatsuo Kawasaki
 
State of the art Stream Processing #hadoopreading
Yahoo!デベロッパーネットワーク
 
個人的にAmazon EMR5.0.0でSpark 2.0を使ってZeppelinでSQL集計してみる
Eiji Shinohara
 
Apache Spark + Arrow
Takeshi Yamamuro
 
20160127三木会 RDB経験者のためのspark
Ryuji Tamagawa
 
20170111 macnica networks-nohara_rancher_usecase
Minehiko Nohara
 
Apache sparkでつぶやきビッグデータ クローンをつくってみた
Junichi Noda
 
Spark 2.0 What's Next (Hadoop / Spark Conference Japan 2016 キーノート講演資料)
Hadoop / Spark Conference Japan
 
[Oracle big data jam session #1] Apache Spark ことはじめ
Kenichi Sonoda
 
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
NTT DATA OSS Professional Services
 
Spark Streamingで作る、つぶやきビッグデータのクローン(Hadoop Spark Conference Japan 2016版)
Junichi Noda
 
OpenStack Saharaを使ったデータ分析基板を作った話 - OpenStack最新情報セミナー(2016年7月)
VirtualTech Japan Inc.
 
はてなのサービスの開発環境
ast_j
 
Ad

More from x1 ichi (9)

PDF
リアルタイムにデータ分析してWebサービスの面白さを伝えたい
x1 ichi
 
PDF
逆引き!Scala x ビッグデータ
x1 ichi
 
PDF
競馬の格言を地方競馬で検証してみた
x1 ichi
 
PDF
あなたのScalaを爆速にする7つの方法(日本語版)
x1 ichi
 
PDF
あなたのScalaを爆速にする7つの方法
x1 ichi
 
PDF
MillWheel Fault-Tolerant Stream Processing at Internet Scaleの意訳
x1 ichi
 
PDF
広告配信現場で使うSpark機械学習
x1 ichi
 
PDF
女性エンジニアの1週間
x1 ichi
 
PDF
解説: a semantic approach to recommending text advertisements for images
x1 ichi
 
リアルタイムにデータ分析してWebサービスの面白さを伝えたい
x1 ichi
 
逆引き!Scala x ビッグデータ
x1 ichi
 
競馬の格言を地方競馬で検証してみた
x1 ichi
 
あなたのScalaを爆速にする7つの方法(日本語版)
x1 ichi
 
あなたのScalaを爆速にする7つの方法
x1 ichi
 
MillWheel Fault-Tolerant Stream Processing at Internet Scaleの意訳
x1 ichi
 
広告配信現場で使うSpark機械学習
x1 ichi
 
女性エンジニアの1週間
x1 ichi
 
解説: a semantic approach to recommending text advertisements for images
x1 ichi
 

本当にあったApache Spark障害の話