Weitere ähnliche Inhalte Ähnlich wie Presto on YARNの導入・運用 (20) Kürzlich hochgeladen (10) Presto on YARNの導入・運用2. 飯島 賢志
● 2012年3月入社
● 技術本部 秋葉原ラボ
● データ解析基盤Patriotまわりの開発・運用
● 運用してきたOSS
○ Hadoop, Spark, Presto, Hive, HBase, Flume,
Ignite, Zeppelin, Elasticsearch etc...
自己紹介
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
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!
9. ● 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
11. ● リソース管理
○ Spark, Hiveなど含めYARNで一元管理できる
● デプロイ
○ Ansibleなどで何十台に設定反映が不要
○ コンテナの起動と同時にパッケージ配布するので
アップグレードも容易
● オペレーション
○ 一斉再起動が手軽にできる
● 自動再起動
○ プロセスが落ちてもリトライする
なぜ Presto YARN か
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 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
17. ビルド例 - 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
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
※別途 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>
25. ● 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
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の構造
28. ● 利用者を広げる
● 利用状況の統計などもっと取る
○ System Connector
● 稀に一部Workerが動かなくなる事象
○ チューニングして解消した(?)
■ https://github.com/prestodb/presto/issues/4292
● exchange.http-client.request-timeout=120sなど
○ 引き続き確認
今後のタスク
30. 今回紹介しなかった取り組み
● Kudu
○ Fast Data 処理向けに検証中
● Zeppelin
○ Sparkなど分散処理環境へのアクセシビリティ向上
○ 解析方法・結果の共有を容易に
● TensorFlow
○ GPUマシン環境
○ Hadoop環境 - TensorFlow on Spark
31. ● Kafka
○ ストリーム処理のハブとして
● Hadoopクラスタ管理ツールの開発
○ 各プロセスの開始・停止、Rolling Restart/Upgrade
○ Zookeeper経由でGitと連携し設定変更など
● Prometeus
○ 監視まわりの置き換えで検証中
今回紹介しなかった取り組み