2017 Dec 22
CyberAgent, Inc. All Rights Reserved
Presto on YARNの導入・運用
飯島 賢志
● 2012年3月入社
● 技術本部 秋葉原ラボ
● データ解析基盤Patriotまわりの開発・運用
● 運用してきたOSS
○ Hadoop, Spark, Presto, Hive, HBase, Flume,
Ignite, Zeppelin, Elasticsearch etc...
自己紹介
● データ解析基盤Patriotの紹介
● Presto on YARN
○ 概要
○ 構成要素 (Presto, Slider)
○ 導入・設定
○ 運用
● 今回紹介しなかった取り組み
本日の内容
● データ解析基盤Patriotの紹介
● Presto on YARN
○ 概要
○ 構成要素 (Presto, Slider)
○ 導入・設定
○ 運用
● 今回紹介しなかった取り組み
本日の内容
● Hadoopベースのデータ解析基盤
○ HDFS, YARN, Hive, HBase, Flume, Spark, etc
○ Bigtopで内製化したパッケージを使用
● メディアサービスのデータを集約
○ 2.5 PB / 5.0 PB (3 replica)
■ 5〜7 TB / day
○ 約700テーブル、12,000,000パーティション
○ 6000スケジュールジョブ + アドホックジョブ
データ解析基盤Patriot
クラウド機械学習基盤
システム構成
Patriot
データ転送管理
リアルタイム処理基盤
HTTP API
/ WebUIMySQL
etc..
Logs
● Hadoop 2.7.3 + patch → 2.8.1 + patch
● Spark 2.1.0 + patch
● Hive 2.1.1 + patch
● HBase 1.3.0 → 1.3.1 + patch
● Zookeeper 3.4.6
● Flume 1.8.0 (trunk) + patch
● Presto YARN 1.5
○ Presto 0.179 + patch (kafka対応) → 0.190
○ Slider 0.92.0
● Kafka 0.11.0
● Zeppelin 0.7.3
利用中のパッケージ
New!
New!
● データ解析基盤Patriotの紹介
● Presto on YARN
○ 概要
○ 構成要素 (Presto, Slider)
○ 導入・設定
○ 運用
● 今回紹介しなかった取り組み
本日の内容
● Presto YARN Integration
○ Prestoが入ったコンテナをYARN上で起動
○ Patriotでは運用始めて5ヶ月
○ "Presto YARN", "presto-yarn"ともいう
● セットアップ
○ GUI:Ambari Slider Views in HDP
○ 手動:Apache Slider
● Git
○ 最新:v1.5
○ https://github.com/prestodb/presto-yarn
Presto on YARN
● YARNの上にのってるだけで動作はnativeなPrestoと同じ
Architecture
HDFS
YARN
Presto
Coordinator
Presto
Worker
:
Presto
Worker
Presto
Worker
User
● リソース管理
○ Spark, Hiveなど含めYARNで一元管理できる
● デプロイ
○ Ansibleなどで何十台に設定反映が不要
○ コンテナの起動と同時にパッケージ配布するので
アップグレードも容易
● オペレーション
○ 一斉再起動が手軽にできる
● 自動再起動
○ プロセスが落ちてもリトライする
なぜ Presto YARN か
● データ解析基盤Patriotの紹介
● Presto on YARN
○ 概要
○ 構成要素 (Presto, Slider)
○ 導入・設定
○ 運用
● 今回紹介しなかった取り組み
本日の内容
● Facebookが開発した分散SQLエンジ ン
● インメモリ
○ 中間データをディスクに書かないので高速
● コネクター
○ 色々な外部データソースに接続できる
■ e.g. Hive, Kafka, Accumulo, Cassandra
● バージョン
○ 最新 v0.191
Presto
Apache Slider
● YARNに分散Applicationをデプロイできる
○ c.g. HBase, Storm, Accumulo
● HDPだと
○ Ambariから使う方が一般的
● YARNに取り込まれた
○ YARN-4692 [Umbrella] Simplified and first-class support for services in YARN
○ YARN-5079 [Umbrella] Native YARN framework layer for services and beyond
○ Gitの階層だとココ
hadoop-yarn-project > hadoop-yarn > hadoop-yarn-applications >
hadoop-yarn-services > hadoop-yarn-services-core
Slider Deploy App Flow
Slider
Client
① Launch
HDFS
YARN Resource Manager②
Container (Application Master)
HDFS
YARN Node Manager
Slider App Master
③
Zookeeper
YARN
Service Registry
⑤
Container
HDFS
YARN Node Manager
App
Slider
Agent
:
④
Container
HDFS
YARN Node Manager
App
Slider
Agent
● データ解析基盤Patriotの紹介
● Presto on YARN
○ 概要・構成要素 (Presto, Slider)
○ 導入・設定
○ 運用
● 今回紹介しなかった取り組み
本日の内容
ビルド例 - Presto YARN
● Maven
※追加したいプラグイン (jar) あれば下記に追加してビルド
  presto-yarn-package/src/main/slider/package/plugins/
● できたパッケージ
○ Sliderがこれをデプロイする
○ presto-yarn-package/target 配下
$ git clone https://github.com/prestodb/presto-yarn.git
$ cd presto-yarn
$ mvn package -Dpresto.version=0.190 -DskipTests
presto-yarn-package-1.5-0.190.zip
● Slider applicationとして起動
起動 - Presto YARN
$ slider package --install
--name PRESTO
--replacepkg
--package presto-yarn-package-1.5-0.190.zip …… Slider clientの起動 (local)
$ slider create presto-yarn
--template appConfig.json
--resources resources-multinode.json  …………… Presto YARNの起動 (yarn)
※設定ファイルは後述
● AppConfig.json
設定例 - Presto YARN
 ………………………………… ラベル (インスタンスの種類)
     ……………………… 起動の順番
             … 配置ポリシー (ANTI_AFFINITY)
          ………… インスタンス数
    ………………………… コア数
      …………………… メモリ(MB)
"global": {
"site.global.app_user": "yarn",
"site.global.user_group": "hadoop",
"site.global.data_dir": "/var/tmp/presto-yarn/data/", …………… ログなどのパス
"site.global.config_dir": "/var/tmp/presto-yarn/conf/",  ………… 設定ファイルのパス
"site.global.app_name": "presto-server-0.190",
"site.global.singlenode": "false",  ………………………………… 1ホストに共存させるか
"site.global.coordinator_host": "{{ coordinator.host }}",
"site.global.presto_query_max_memory": "800G",  …………… 1クエリの最大メモリ
"site.global.presto_query_max_memory_per_node": "10G", … 1ノードの最大メモリ
"site.global.presto_server_port": "9010",
"site.global.jvm_args": "['-Xmx20G', … ]", ……………………… JVM設定
   :
● AppConfig.json (続き)
設定例 - Presto YARN
"global": {
  :
"site.global.catalog ": "{'hive': ['hive.metastore.uri= … ]}", ………… カタログ設定
"site.global.plugin": "{'patriot': ['patriot-udf.jar', … ]}", ………………… 追加するプラグイン
"site.global.app_pkg_plugin": "${AGENT_WORK_ROOT} …/plugins", …… プラグインのコピー元
"site.global.log_properties":
   "['com.facebook.presto=INFO', … ]", ……………………………… ログレベル
"site.global.additional_config_properties":
   "['query.max-run-time=15m', … ]", …………………………………… プロパティ設定
"application.def":
   ".slider/package/PRESTO/presto-yarn-package-1.5-0.190.zip", … 展開するパッケージ
"java_home": "/usr/java/latest"
},
● resources-multinode.json
"global": {
"yarn.container.failure.threshold" : "0" ……… 失敗のリトライ回数 (無制限)
},
"components": {
"COORDINATOR": {  ………………………… ラベル (インスタンス種類)
"yarn.role.priority": "1", ……………………… 起動の順番
"yarn.component.placement.policy": "4",  … 配置ポリシー (ANTI_AFFINITY)
"yarn.component.instances": "1",  ………… インスタンス数
"yarn.vcores": "8", …………………………… コア数
"yarn.memory": "20480"  …………………… メモリ(MB)
},
:
設定例 - Presto YARN
● resources-multinode.json (続き)
:
"components": {
:
"WORKER": {  ………………………………… ラベル (インスタンス種類)
"yarn.role.priority": "2", ……………………… 起動の順番
"yarn.component.placement.policy": "4",  … 配置ポリシー (ANTI_AFFINITY)
"yarn.component.instances": "84", ………… インスタンス数
"yarn.vcores": "16",  ………………………… コア数
"yarn.memory": "20480"  …………………… メモリ(MB)
}
}
設定例 - Presto YARN
● slider-site.xml
  ※別途 YARN service registry 設定 (yarn-site.xml) も必要
設定例 - Slider
 ………………………………… ラベル (インスタンスの種類)
     ……………………… 起動の順番
             … 配置ポリシー (ANTI_AFFINITY)
          ………… インスタンス数
    ………………………… コア数
      …………………… メモリ(MB)
<configuration>
<property>
<name>yarn.resourcemanager.address</name> … ResourceManagerのホスト
<value>{{ resouceManager.host }}:8088</value>
</property>
<property>
<name>slider.zookeeper.quorum</name> ………… YARN Service RegistryのZookeeper
<value>{{ zookeeper.host1 }}:2181, ...</value>
</property>
</configuration>
● データ解析基盤Patriotの紹介
● Presto on YARN
○ 概要・構成要素 (Presto, Slider)
○ 導入・設定
○ 運用
● 今回紹介しなかった取り組み
本日の内容
● Slider should not allow to allocate twice containers on the same node
○ placement: ANTI_AFFINITYにしても解決せず
■ 現象: CoordinatorとWorkerを同じホストで起動しようとして
どちらかがエラーになる
■ 対応: CoordinatorだけPresto YARNとは別立てにした
Workaround
https://github.com/prestodb/presto-yarn/issues/22
カラムナーフォーマット
● Apache ORC
○ カラムの統計をもちIndexに利用
■ count, min, max, sum…
○ Spark 2.3.0でHive依存のORCから脱却
※SPARK-20682
● Apache Parquet
○ ネスト構造を効率よく扱える
○ 実はIndex headerが実装されてない
(昔からRoadMapにはある)
https://github.com/apache/parquet-format/blob/master/src/main/thrift/parquet.thrift#L505-L507
ORC fileの構造
● Grafana/OpenTSDB
○ JVMメトリクスを可視化
■ PrestoのREST API
■ データはHBaseに保存
モニタリング
● 利用者を広げる
● 利用状況の統計などもっと取る
○ System Connector
● 稀に一部Workerが動かなくなる事象
○ チューニングして解消した(?)
■ https://github.com/prestodb/presto/issues/4292
● exchange.http-client.request-timeout=120sなど
○ 引き続き確認
今後のタスク
● データ解析基盤Patriotの紹介
● Presto on YARN
○ 概要・構成要素 (Presto, Slider)
○ 導入・設定
○ 運用
● 今回紹介しなかった取り組み
本日の内容
今回紹介しなかった取り組み
● Kudu
○ Fast Data 処理向けに検証中
● Zeppelin
○ Sparkなど分散処理環境へのアクセシビリティ向上
○ 解析方法・結果の共有を容易に
● TensorFlow
○ GPUマシン環境
○ Hadoop環境 - TensorFlow on Spark
● Kafka
○ ストリーム処理のハブとして
● Hadoopクラスタ管理ツールの開発
○ 各プロセスの開始・停止、Rolling Restart/Upgrade
○ Zookeeper経由でGitと連携し設定変更など
● Prometeus
○ 監視まわりの置き換えで検証中
今回紹介しなかった取り組み

Presto on YARNの導入・運用

  • 1.
    2017 Dec 22 CyberAgent,Inc. All Rights Reserved Presto on YARNの導入・運用
  • 2.
    飯島 賢志 ● 2012年3月入社 ● 技術本部 秋葉原ラボ ●データ解析基盤Patriotまわりの開発・運用 ● 運用してきたOSS ○ Hadoop, Spark, Presto, Hive, HBase, Flume, Ignite, Zeppelin, Elasticsearch etc... 自己紹介
  • 3.
    ● データ解析基盤Patriotの紹介 ● Prestoon YARN ○ 概要 ○ 構成要素 (Presto, Slider) ○ 導入・設定 ○ 運用 ● 今回紹介しなかった取り組み 本日の内容
  • 4.
    ● データ解析基盤Patriotの紹介 ● Prestoon YARN ○ 概要 ○ 構成要素 (Presto, Slider) ○ 導入・設定 ○ 運用 ● 今回紹介しなかった取り組み 本日の内容
  • 5.
    ● Hadoopベースのデータ解析基盤 ○ HDFS,YARN, Hive, HBase, Flume, Spark, etc ○ Bigtopで内製化したパッケージを使用 ● メディアサービスのデータを集約 ○ 2.5 PB / 5.0 PB (3 replica) ■ 5〜7 TB / day ○ 約700テーブル、12,000,000パーティション ○ 6000スケジュールジョブ + アドホックジョブ データ解析基盤Patriot
  • 6.
  • 7.
    ● Hadoop 2.7.3+ patch → 2.8.1 + patch ● Spark 2.1.0 + patch ● Hive 2.1.1 + patch ● HBase 1.3.0 → 1.3.1 + patch ● Zookeeper 3.4.6 ● Flume 1.8.0 (trunk) + patch ● Presto YARN 1.5 ○ Presto 0.179 + patch (kafka対応) → 0.190 ○ Slider 0.92.0 ● Kafka 0.11.0 ● Zeppelin 0.7.3 利用中のパッケージ New! New!
  • 8.
    ● データ解析基盤Patriotの紹介 ● Prestoon YARN ○ 概要 ○ 構成要素 (Presto, Slider) ○ 導入・設定 ○ 運用 ● 今回紹介しなかった取り組み 本日の内容
  • 9.
    ● Presto YARNIntegration ○ Prestoが入ったコンテナをYARN上で起動 ○ Patriotでは運用始めて5ヶ月 ○ "Presto YARN", "presto-yarn"ともいう ● セットアップ ○ GUI:Ambari Slider Views in HDP ○ 手動:Apache Slider ● Git ○ 最新:v1.5 ○ https://github.com/prestodb/presto-yarn Presto on YARN
  • 10.
  • 11.
    ● リソース管理 ○ Spark,Hiveなど含めYARNで一元管理できる ● デプロイ ○ Ansibleなどで何十台に設定反映が不要 ○ コンテナの起動と同時にパッケージ配布するので アップグレードも容易 ● オペレーション ○ 一斉再起動が手軽にできる ● 自動再起動 ○ プロセスが落ちてもリトライする なぜ Presto YARN か
  • 12.
    ● データ解析基盤Patriotの紹介 ● Prestoon YARN ○ 概要 ○ 構成要素 (Presto, Slider) ○ 導入・設定 ○ 運用 ● 今回紹介しなかった取り組み 本日の内容
  • 13.
    ● Facebookが開発した分散SQLエンジ ン ●インメモリ ○ 中間データをディスクに書かないので高速 ● コネクター ○ 色々な外部データソースに接続できる ■ e.g. Hive, Kafka, Accumulo, Cassandra ● バージョン ○ 最新 v0.191 Presto
  • 14.
    Apache Slider ● YARNに分散Applicationをデプロイできる ○c.g. HBase, Storm, Accumulo ● HDPだと ○ Ambariから使う方が一般的 ● YARNに取り込まれた ○ YARN-4692 [Umbrella] Simplified and first-class support for services in YARN ○ YARN-5079 [Umbrella] Native YARN framework layer for services and beyond ○ Gitの階層だとココ hadoop-yarn-project > hadoop-yarn > hadoop-yarn-applications > hadoop-yarn-services > hadoop-yarn-services-core
  • 15.
    Slider Deploy AppFlow Slider Client ① Launch HDFS YARN Resource Manager② Container (Application Master) HDFS YARN Node Manager Slider App Master ③ Zookeeper YARN Service Registry ⑤ Container HDFS YARN Node Manager App Slider Agent : ④ Container HDFS YARN Node Manager App Slider Agent
  • 16.
    ● データ解析基盤Patriotの紹介 ● Prestoon YARN ○ 概要・構成要素 (Presto, Slider) ○ 導入・設定 ○ 運用 ● 今回紹介しなかった取り組み 本日の内容
  • 17.
    ビルド例 - PrestoYARN ● Maven ※追加したいプラグイン (jar) あれば下記に追加してビルド   presto-yarn-package/src/main/slider/package/plugins/ ● できたパッケージ ○ Sliderがこれをデプロイする ○ presto-yarn-package/target 配下 $ git clone https://github.com/prestodb/presto-yarn.git $ cd presto-yarn $ mvn package -Dpresto.version=0.190 -DskipTests presto-yarn-package-1.5-0.190.zip
  • 18.
    ● Slider applicationとして起動 起動- Presto YARN $ slider package --install --name PRESTO --replacepkg --package presto-yarn-package-1.5-0.190.zip …… Slider clientの起動 (local) $ slider create presto-yarn --template appConfig.json --resources resources-multinode.json  …………… Presto YARNの起動 (yarn) ※設定ファイルは後述
  • 19.
    ● AppConfig.json 設定例 -Presto YARN  ………………………………… ラベル (インスタンスの種類)      ……………………… 起動の順番              … 配置ポリシー (ANTI_AFFINITY)           ………… インスタンス数     ………………………… コア数       …………………… メモリ(MB) "global": { "site.global.app_user": "yarn", "site.global.user_group": "hadoop", "site.global.data_dir": "/var/tmp/presto-yarn/data/", …………… ログなどのパス "site.global.config_dir": "/var/tmp/presto-yarn/conf/",  ………… 設定ファイルのパス "site.global.app_name": "presto-server-0.190", "site.global.singlenode": "false",  ………………………………… 1ホストに共存させるか "site.global.coordinator_host": "{{ coordinator.host }}", "site.global.presto_query_max_memory": "800G",  …………… 1クエリの最大メモリ "site.global.presto_query_max_memory_per_node": "10G", … 1ノードの最大メモリ "site.global.presto_server_port": "9010", "site.global.jvm_args": "['-Xmx20G', … ]", ……………………… JVM設定    :
  • 20.
    ● AppConfig.json (続き) 設定例- Presto YARN "global": {   : "site.global.catalog ": "{'hive': ['hive.metastore.uri= … ]}", ………… カタログ設定 "site.global.plugin": "{'patriot': ['patriot-udf.jar', … ]}", ………………… 追加するプラグイン "site.global.app_pkg_plugin": "${AGENT_WORK_ROOT} …/plugins", …… プラグインのコピー元 "site.global.log_properties":    "['com.facebook.presto=INFO', … ]", ……………………………… ログレベル "site.global.additional_config_properties":    "['query.max-run-time=15m', … ]", …………………………………… プロパティ設定 "application.def":    ".slider/package/PRESTO/presto-yarn-package-1.5-0.190.zip", … 展開するパッケージ "java_home": "/usr/java/latest" },
  • 21.
    ● resources-multinode.json "global": { "yarn.container.failure.threshold": "0" ……… 失敗のリトライ回数 (無制限) }, "components": { "COORDINATOR": {  ………………………… ラベル (インスタンス種類) "yarn.role.priority": "1", ……………………… 起動の順番 "yarn.component.placement.policy": "4",  … 配置ポリシー (ANTI_AFFINITY) "yarn.component.instances": "1",  ………… インスタンス数 "yarn.vcores": "8", …………………………… コア数 "yarn.memory": "20480"  …………………… メモリ(MB) }, : 設定例 - Presto YARN
  • 22.
    ● resources-multinode.json (続き) : "components":{ : "WORKER": {  ………………………………… ラベル (インスタンス種類) "yarn.role.priority": "2", ……………………… 起動の順番 "yarn.component.placement.policy": "4",  … 配置ポリシー (ANTI_AFFINITY) "yarn.component.instances": "84", ………… インスタンス数 "yarn.vcores": "16",  ………………………… コア数 "yarn.memory": "20480"  …………………… メモリ(MB) } } 設定例 - Presto YARN
  • 23.
    ● slider-site.xml   ※別途 YARNservice registry 設定 (yarn-site.xml) も必要 設定例 - Slider  ………………………………… ラベル (インスタンスの種類)      ……………………… 起動の順番              … 配置ポリシー (ANTI_AFFINITY)           ………… インスタンス数     ………………………… コア数       …………………… メモリ(MB) <configuration> <property> <name>yarn.resourcemanager.address</name> … ResourceManagerのホスト <value>{{ resouceManager.host }}:8088</value> </property> <property> <name>slider.zookeeper.quorum</name> ………… YARN Service RegistryのZookeeper <value>{{ zookeeper.host1 }}:2181, ...</value> </property> </configuration>
  • 24.
    ● データ解析基盤Patriotの紹介 ● Prestoon YARN ○ 概要・構成要素 (Presto, Slider) ○ 導入・設定 ○ 運用 ● 今回紹介しなかった取り組み 本日の内容
  • 25.
    ● Slider shouldnot allow to allocate twice containers on the same node ○ placement: ANTI_AFFINITYにしても解決せず ■ 現象: CoordinatorとWorkerを同じホストで起動しようとして どちらかがエラーになる ■ 対応: CoordinatorだけPresto YARNとは別立てにした Workaround https://github.com/prestodb/presto-yarn/issues/22
  • 26.
    カラムナーフォーマット ● Apache ORC ○カラムの統計をもちIndexに利用 ■ count, min, max, sum… ○ Spark 2.3.0でHive依存のORCから脱却 ※SPARK-20682 ● Apache Parquet ○ ネスト構造を効率よく扱える ○ 実はIndex headerが実装されてない (昔からRoadMapにはある) https://github.com/apache/parquet-format/blob/master/src/main/thrift/parquet.thrift#L505-L507 ORC fileの構造
  • 27.
    ● Grafana/OpenTSDB ○ JVMメトリクスを可視化 ■PrestoのREST API ■ データはHBaseに保存 モニタリング
  • 28.
    ● 利用者を広げる ● 利用状況の統計などもっと取る ○System Connector ● 稀に一部Workerが動かなくなる事象 ○ チューニングして解消した(?) ■ https://github.com/prestodb/presto/issues/4292 ● exchange.http-client.request-timeout=120sなど ○ 引き続き確認 今後のタスク
  • 29.
    ● データ解析基盤Patriotの紹介 ● Prestoon YARN ○ 概要・構成要素 (Presto, Slider) ○ 導入・設定 ○ 運用 ● 今回紹介しなかった取り組み 本日の内容
  • 30.
    今回紹介しなかった取り組み ● Kudu ○ FastData 処理向けに検証中 ● Zeppelin ○ Sparkなど分散処理環境へのアクセシビリティ向上 ○ 解析方法・結果の共有を容易に ● TensorFlow ○ GPUマシン環境 ○ Hadoop環境 - TensorFlow on Spark
  • 31.
    ● Kafka ○ ストリーム処理のハブとして ●Hadoopクラスタ管理ツールの開発 ○ 各プロセスの開始・停止、Rolling Restart/Upgrade ○ Zookeeper経由でGitと連携し設定変更など ● Prometeus ○ 監視まわりの置き換えで検証中 今回紹介しなかった取り組み