双六工場日誌

平凡な日常を淡々と綴ります。

Hadoop Conference Japan 2014 参加メモ(個別セッション②) #hcj2014

Hadoop Conference Japan 2014 参加メモ(キーノート) #hcj2014Hadoop Conference Japan 2014 参加メモ(個別セッション①) #hcj2014 の続きです。

長くなったので、最後のセッションはさらに分割します。

A Deeper Understanding of Spark Internals

  • Patrick Wendell (Databricks)

f:id:sechiro:20140708144951j:plain

  • Agenda

    • How spark runs, focus on performance

    • Major core components

      • Excecution model
      • The suffule
      • Caching <- not cover in this session
  • Scala example

最初の文字の出現頻度を数える

sc.textFile("hdfs://names")
    .map(name =x> (name.charAt(0), name))
    .groupByKey()
    .mapValues(names => names.toSet.size)
    .collect()
  • Excecution model

    1. Create DAG/RDDs

      • HadoopRDD
        • map()
        • groupby()
        • mapValues()
        • collect()
    2. Create execution plan

      • pipeline as much as possible
      • Split into "stages" based on need to reorganize data
    3. Schedule tasks

      • split each stage into tasks
      • schedule tasks
  • The shuffle

    • Redistribution data
    • Pull-based
    • write intermediate file to disk

      • network bound
    • パーティションごとにHash mapを構築する

      • 一つのキーと値のペアはメモリ上に収まる必要がある
  • What went wrong?

    • Too few partition to get good
    • Large per key groupby()
    • shipped data accross the cluster

    • Ensure enough partitions

      • Minimize memory
      • minimize shuffled
      • Know the standard library
    • too few partitions/too many partitions

      • reasonable number of partitions
  • Fix the problem

    .repartition(6) .distinct()

  • Low level performance

    • jps | grep Executor
    • jstack
    • jmap -histo:live
  • QA

    • Does spark support JOIN?

      • yes
    • Hive, Shark or SparkSQL

      • SparkSQLに統合しようとしている
        • Sharkは新しいプロジェクトでは使うな

LT

LTを見に行きましたが、こちらのメモはカオスなので、一旦割愛で。

Evolution of Impala - Hadoop 上の高速SQLエンジン、最新情報

  • 嶋内 翔(Cloudera)
    • 今日はこのために来たと行ってもいい

f:id:sechiro:20140708154949j:plain

  • Impalaとは、HadoopクラスタのためのMPPクエリエンジン

    • C++/OSS
    • Clouderaが開発
    • Cloudera/MapR/Amazonがサポートを提供
    • 2013/04に1.0リリース
    • スキーマはHiveメタストアに保存
    • SELECTとバルクインサートのみ
    • 相関サブクエリは未実装
  • Impalaのサービス

    • impalad

      • クエリを実行する
      • どのデーモンもクエリを受け付けられる。
      • 受け付けたノードがコーディネータ
    • statestore

      • ネームサービス
      • impaladの簡単な死活監視のみ
      • このサービス自体は死んでいても動作はする
    • catalogd

  • 実行計画

    • シングルノードプランの作成
    • プランフラグメントに分割
  • インメモリの実行

    • 右側にJOINするものは、すべてメモリ上にキャッシュする
    • 左のテーブルはHDFSから読み出す
    • データはストリームで送信され、ディスクには書かれない
    • メタデータは最初だけ読んでキャッシュする
    • クエリが複雑な場合は、デーモン同士が結果を交換する
    • LLVMを使って、クエリのランタイム依存の部分をコンパイルする
      • クエリのカスタムコーディングと同等の内容
  • メタデータ管理

    • catalogd
      • Impala SQLからクラスタ内の全ノードにメタデータの変更をリレーする
      • Hiveで実行したあとにはRefreshが必要だが、基本的に必要ない
  • UDF、UDAF C++Java Python UDFも開発中

  • HBase連携

    • 1行インサート可能
    • 高速にインクリメントするカウンタをHBaseに持つ等のユースケースが可能
  • リソース管理

    • 1.3からアドミッションコントロールが入った
    • リソースの過剰使用を抑える。
    • 設定は以下から
      • Cloudera Manager
      • fair-scheduler.xml/llama-site.xml
    • ソフトリミットなので、高頻度でクエリが来ると場合によってはリソース上限を超えうることに注意
  • Llama

    • 低レイテンシ用のアプリケーションマスタ
      • YARNのスケジューリングを細かくするためのサービス
      • YARNのリソース配分をキャッシュ
      • 1.4でプロダクションレディ
  • Sentry

    • データベース、テーブル、ビュー、列、行の単位でアクセス制御
    • エコシステム全体で利用可能
  • パフォーマンスと最適化

    • HDFSショートサーキットリード

    • HDFSキャッシング

    • Parquet

      • パーケと読む
      • カラムナー
        • ストレージ効率が高い
        • スキャン効率が高い
    • Compute stats

      • ETL処理の終わりに必ずやるべき
        • データの統計情報を取ることで高速化する
    • 並列性

      • マルチユーザ、並列に強い
        • Prestoと比較して早い
          • I/Oを削減するアプローチではなく、CPU時間が重要
          • PrestoはCPU時間が長い
  • スケーラビリティ

    • Impalaはリニアスケーラビリティがある。

    • HWを倍

      • クエリによるがおおよそ倍の性能
    • 倍のクラスタで、倍のユーザ
      • 同じか良くなる傾向
  • ロードマップ

    • 1.4

f:id:sechiro:20140708170622j:plain

  • 下半期に2.0を出す

    • LAG
    • LEAD
    • 相関サブクエリ
    • Nested Data(JSONとか)を入れる
  • Impala本からPDFが無償公開されているので読むと良い

  • QA

    • Impalaバージョン同士の比較は?

      • バージョンの差異はすぐにはデータがない
    • UDTFは?

      • 望んでいるというのは認識している。プライオリティが高いがまだロードマップに載ってきていない。