presto on yarnの導入・運用

31
2017 Dec 22 CyberAgent, Inc. All Rights Reserved Presto on YARNの導入・運用

Upload: cyberagent

Post on 22-Jan-2018

152 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Presto on YARNの導入・運用

2017 Dec 22

CyberAgent, Inc. All Rights Reserved

Presto on YARNの導入・運用

Page 2: Presto on YARNの導入・運用

飯島 賢志

● 2012年3月入社● 技術本部 秋葉原ラボ● データ解析基盤Patriotまわりの開発・運用● 運用してきたOSS

○ Hadoop, Spark, Presto, Hive, HBase, Flume,Ignite, Zeppelin, Elasticsearch etc...

自己紹介

Page 3: Presto on YARNの導入・運用

● データ解析基盤Patriotの紹介● Presto on YARN

○ 概要○ 構成要素 (Presto, Slider)○ 導入・設定○ 運用

● 今回紹介しなかった取り組み

本日の内容

Page 4: Presto on YARNの導入・運用

● データ解析基盤Patriotの紹介● Presto on YARN

○ 概要○ 構成要素 (Presto, Slider)○ 導入・設定○ 運用

● 今回紹介しなかった取り組み

本日の内容

Page 5: Presto on YARNの導入・運用

● 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

Page 6: Presto on YARNの導入・運用

クラウド機械学習基盤

システム構成

Patriot

データ転送管理

リアルタイム処理基盤

HTTP API / WebUIMySQL

etc..

Logs

Page 7: Presto on YARNの導入・運用

● 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!

Page 8: Presto on YARNの導入・運用

● データ解析基盤Patriotの紹介● Presto on YARN

○ 概要○ 構成要素 (Presto, Slider)○ 導入・設定○ 運用

● 今回紹介しなかった取り組み

本日の内容

Page 9: Presto on YARNの導入・運用

● 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

Page 10: Presto on YARNの導入・運用

● YARNの上にのってるだけで動作はnativeなPrestoと同じ

Architecture

HDFS

YARN

PrestoCoordinator

PrestoWorker

:PrestoWorker

PrestoWorkerUser

Page 11: Presto on YARNの導入・運用

● リソース管理○ Spark, Hiveなど含めYARNで一元管理できる

● デプロイ○ Ansibleなどで何十台に設定反映が不要○ コンテナの起動と同時にパッケージ配布するので

アップグレードも容易

● オペレーション○ 一斉再起動が手軽にできる

● 自動再起動○ プロセスが落ちてもリトライする

なぜ Presto YARN か

Page 12: Presto on YARNの導入・運用

● データ解析基盤Patriotの紹介● Presto on YARN

○ 概要○ 構成要素 (Presto, Slider)○ 導入・設定○ 運用

● 今回紹介しなかった取り組み

本日の内容

Page 13: Presto on YARNの導入・運用

● Facebookが開発した分散SQLエンジ ン● インメモリ

○ 中間データをディスクに書かないので高速

● コネクター○ 色々な外部データソースに接続できる

■ e.g. Hive, Kafka, Accumulo, Cassandra● バージョン

○ 最新 v0.191

Presto

Page 14: Presto on YARNの導入・運用

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

Page 15: Presto on YARNの導入・運用

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

Page 16: Presto on YARNの導入・運用

● データ解析基盤Patriotの紹介● Presto on YARN

○ 概要・構成要素 (Presto, Slider)○ 導入・設定○ 運用

● 今回紹介しなかった取り組み

本日の内容

Page 17: Presto on YARNの導入・運用

ビルド例 - 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

Page 18: Presto on YARNの導入・運用

● 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) ※設定ファイルは後述

Page 19: Presto on 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設定

   :

Page 20: Presto on YARNの導入・運用

● 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" },

Page 21: Presto on YARNの導入・運用

● 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

Page 22: Presto on 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

Page 23: Presto on 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>

Page 24: Presto on YARNの導入・運用

● データ解析基盤Patriotの紹介● Presto on YARN

○ 概要・構成要素 (Presto, Slider)○ 導入・設定○ 運用

● 今回紹介しなかった取り組み

本日の内容

Page 25: Presto on YARNの導入・運用

● 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

Page 26: Presto on YARNの導入・運用

カラムナーフォーマット

● 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の構造

Page 27: Presto on YARNの導入・運用

● Grafana/OpenTSDB○ JVMメトリクスを可視化

■ PrestoのREST API■ データはHBaseに保存

モニタリング

Page 28: Presto on YARNの導入・運用

● 利用者を広げる● 利用状況の統計などもっと取る

○ System Connector● 稀に一部Workerが動かなくなる事象

○ チューニングして解消した(?)■ https://github.com/prestodb/presto/issues/4292

● exchange.http-client.request-timeout=120sなど

○ 引き続き確認

今後のタスク

Page 29: Presto on YARNの導入・運用

● データ解析基盤Patriotの紹介● Presto on YARN

○ 概要・構成要素 (Presto, Slider)○ 導入・設定○ 運用

● 今回紹介しなかった取り組み

本日の内容

Page 30: Presto on YARNの導入・運用

今回紹介しなかった取り組み

● Kudu○ Fast Data 処理向けに検証中

● Zeppelin○ Sparkなど分散処理環境へのアクセシビリティ向上○ 解析方法・結果の共有を容易に

● TensorFlow○ GPUマシン環境

○ Hadoop環境 - TensorFlow on Spark

Page 31: Presto on YARNの導入・運用

● Kafka○ ストリーム処理のハブとして

● Hadoopクラスタ管理ツールの開発○ 各プロセスの開始・停止、Rolling Restart/Upgrade○ Zookeeper経由でGitと連携し設定変更など

● Prometeus○ 監視まわりの置き換えで検証中

今回紹介しなかった取り組み