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
PrestoCoordinator
PrestoWorker
:PrestoWorker
PrestoWorkerUser
● リソース管理○ 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
SliderClient
① LaunchHDFS
YARN Resource Manager②
Container (Application Master)
HDFSYARN Node Manager
Slider App Master
③
Zookeeper
YARNService Registry
⑤
Container
HDFSYARN Node Manager
App SliderAgent
:④
Container
HDFSYARN Node Manager
App SliderAgent
● データ解析基盤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○ 監視まわりの置き換えで検証中
今回紹介しなかった取り組み
Top Related