Slide 1

Slide 1 text

Apache Sparkやってみたところ

Slide 2

Slide 2 text

What is Apache Spark ?

Slide 3

Slide 3 text

Sparkとは • BigDataを高速に分散処理を行うフレームワーク Apache Spark Spark SQL Spark Streaming MLlib
 (machine learning) GraphX
 (Graph)

Slide 4

Slide 4 text

データ操作 • RDD • 並行して操作することが可能な要素の耐障害性のあ るコレクション • DataFrame • 1.6から追加された機能でRやPython等のDataFrameと 同等の操作が可能 • SQL • Hive SQLプラスαのDSL記述で操作可能

Slide 5

Slide 5 text

SQL • SELECT • GROUP BY • ORDER BY • 数学関数 • 文字関数 • Window関数 • JOIN • UNION • サブクエリ • etc… https://spark.apache.org/docs/latest/sql-programming- guide.html#supported-hive-features

Slide 6

Slide 6 text

データソース • Hadoop • s3 • RDBMS • ElasticSearch • etc.. Hadoop以外はConnectorを利用する必要がある

Slide 7

Slide 7 text

Spark MLlib(ML)

Slide 8

Slide 8 text

Spark MLlib • 機械学習ライブラリ • MLlib : RDDベース(メンテナンスモードに入ったよう で機能追加は今後は行っていかない) • ML : DataFrameベース(今後こちらが主流になってい く)

Slide 9

Slide 9 text

Spark MLlib APIできること • 基本的な統計 • 分類と回帰 • 協調フィルタリング • クラスタリング • 次元削除 • 特徴量抽出及び変形 • 頻出パターンマイニング • 評価マトリックス • PMML モデル抽出 https://spark.apache.org/docs/latest/ml-guide.html

Slide 10

Slide 10 text

Amazon EMR

Slide 11

Slide 11 text

EMRとは • Amazon EMR は、AWS でビッグデータフレームワーク (Apache Hadoop や Apache Spark など) の実行を簡素 化して、大量のデータを処理および分析するマネージ ド型クラスタープラットフォーム • S3を始め、AWS上のサービスの連携がデフォルトでつい てくる • 1度構築したクラスタは再利用可能(CLIもアウトプット 可能)

Slide 12

Slide 12 text

EMR Command Runner • EMRクラスタのインスタンス内に`command-runner.jar` が置かれ、これを利用してステップを追加していく • spark-submit : Sparkアプリケーションの実行 • s3-dist-cp : 大量のデータをS3からHDFSに分散コピー する http://docs.aws.amazon.com/ja_jp/emr/latest/ ReleaseGuide/emr-commandrunner.html

Slide 13

Slide 13 text

Apache Spark Tuning

Slide 14

Slide 14 text

WebUI • WebUIでは以下のような項目が確認できるので、パフォー マンスネックになっている箇所の特定などに利用する と良さそう • スケジューラのステージおよびタスクのリスト • RDDサイズおよびメモリの使用量の概要 • 環境情報 • 実行中のexecutorの情報

Slide 15

Slide 15 text

キャッシュ • キャッシュ無し4h以上 -> キャッシュ利用 1h程度に短 縮 • DataFrame • SQL df.cache() # キャッシュ利用 df.is_cached # キャッシュ確認 df.unpersist() # キャッシュ廃棄 spark.sql("CACHE [LAZY] TABLE [db_name.]table_name") # キャッシュ利用 spark.sql("UNCACHE TABLE [db_name.]table_name") # キャッシュ廃棄

Slide 16

Slide 16 text

データロード • s3直接ロード -> s3-dist-cpを利用し、一度クラスタ 内HDFSに移してロード 20min程度短縮 • srcPattern : s3のフィルタリング • groupBy : 複数のファイルを結合 • targetSize : groupByにもとづいて作成するファイル のサイズ http://docs.aws.amazon.com/ja_jp/emr/latest/ ReleaseGuide/UsingEMR_s3distcp.html

Slide 17

Slide 17 text

Sparkの設定 • spark.executor.meory、spark.executor.cores、 spark.dynamicAllocation.enabledについてはEMR側でデ フォルトで設定されるので、EMRに任せておいて良さそう http://docs.aws.amazon.com/ja_jp/emr/latest/ ReleaseGuide/emr-spark-configure.html • SQL周りの設定では以下の項目の調整で数分短縮の効果あ り • spark.rdd.compress • spark.sql.shuffle.partitions • spark.sql.inMemoryColumnarStorage.batchSize • spark.sql.broadcastTimeout • spark.sql.files.openCostInBytes

Slide 18

Slide 18 text

参考文献 • Apache Spark SQLリファレンス
 http://x1.inkenkun.com/archives/1114 • Apache Spark MLlibのレコメンドアルゴリズムを使う
 http://kazz.hateblo.jp/entry/2016/02/09/114756 • Apache Spark を使ったシステム構築のための Tips
 https://blog.albert2005.co.jp/2016/06/16/apache-spark- %E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%82%B7%E3%82%B9%E 3%83%86%E3%83%A0%E6%A7%8B%E7%AF%89%E3%81%AE%E3%81%9F%E3% 82%81%E3%81%AE-tips/ • Apache Sparkを使って、メモリ使用量が大きいバッチ処理をス ケールアウト
 http://lab.adn-mobasia.net/?p=4777