SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
本当にあった
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の設定を!

Contenu connexe

Tendances

Tendances (20)

Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
 
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデートAmazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
 
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
 
Apache NiFi の紹介 #streamctjp
Apache NiFi の紹介  #streamctjpApache NiFi の紹介  #streamctjp
Apache NiFi の紹介 #streamctjp
 
いまさら、AWSのネットワーク設計
いまさら、AWSのネットワーク設計いまさら、AWSのネットワーク設計
いまさら、AWSのネットワーク設計
 
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法  ※講演は翻訳資料にて行います。 - Getting the Best...PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法  ※講演は翻訳資料にて行います。 - Getting the Best...
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...
 
Presto ベースのマネージドサービス Amazon Athena
Presto ベースのマネージドサービス Amazon AthenaPresto ベースのマネージドサービス Amazon Athena
Presto ベースのマネージドサービス Amazon Athena
 
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
 
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
 
Kinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみたKinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみた
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
 
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
 
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
 
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
ちょっと理解に自信がないなという皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)ちょっと理解に自信がないなという皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
 
S3 整合性モデルと Hadoop/Spark の話
S3 整合性モデルと Hadoop/Spark の話S3 整合性モデルと Hadoop/Spark の話
S3 整合性モデルと Hadoop/Spark の話
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
 
Amazon Redshiftによるリアルタイム分析サービスの構築
Amazon Redshiftによるリアルタイム分析サービスの構築Amazon Redshiftによるリアルタイム分析サービスの構築
Amazon Redshiftによるリアルタイム分析サービスの構築
 
A5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えしますA5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えします
 

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

Similaire à 本当にあったApache Spark障害の話 (20)

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

Plus de x1 ichi

Plus de x1 ichi (9)

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

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