Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Presto on YARNの導入・運用

1.170 Aufrufe

Veröffentlicht am

2017/12/22(金)開催
「Data Engineering and Data Analysis Workshop #3」登壇資料

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

Presto on YARNの導入・運用

  1. 1. 2017 Dec 22 CyberAgent, Inc. All Rights Reserved Presto on YARNの導入・運用
  2. 2. 飯島 賢志 ● 2012年3月入社 ● 技術本部 秋葉原ラボ ● データ解析基盤Patriotまわりの開発・運用 ● 運用してきたOSS ○ Hadoop, Spark, Presto, Hive, HBase, Flume, Ignite, Zeppelin, Elasticsearch etc... 自己紹介
  3. 3. ● データ解析基盤Patriotの紹介 ● Presto on YARN ○ 概要 ○ 構成要素 (Presto, Slider) ○ 導入・設定 ○ 運用 ● 今回紹介しなかった取り組み 本日の内容
  4. 4. ● データ解析基盤Patriotの紹介 ● Presto on YARN ○ 概要 ○ 構成要素 (Presto, Slider) ○ 導入・設定 ○ 運用 ● 今回紹介しなかった取り組み 本日の内容
  5. 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. 6. クラウド機械学習基盤 システム構成 Patriot データ転送管理 リアルタイム処理基盤 HTTP API / WebUIMySQL etc.. Logs
  7. 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. 8. ● データ解析基盤Patriotの紹介 ● Presto on YARN ○ 概要 ○ 構成要素 (Presto, Slider) ○ 導入・設定 ○ 運用 ● 今回紹介しなかった取り組み 本日の内容
  9. 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
  10. 10. ● YARNの上にのってるだけで動作はnativeなPrestoと同じ Architecture HDFS YARN Presto Coordinator Presto Worker : Presto Worker Presto Worker User
  11. 11. ● リソース管理 ○ Spark, Hiveなど含めYARNで一元管理できる ● デプロイ ○ Ansibleなどで何十台に設定反映が不要 ○ コンテナの起動と同時にパッケージ配布するので アップグレードも容易 ● オペレーション ○ 一斉再起動が手軽にできる ● 自動再起動 ○ プロセスが落ちてもリトライする なぜ Presto YARN か
  12. 12. ● データ解析基盤Patriotの紹介 ● Presto on YARN ○ 概要 ○ 構成要素 (Presto, Slider) ○ 導入・設定 ○ 運用 ● 今回紹介しなかった取り組み 本日の内容
  13. 13. ● Facebookが開発した分散SQLエンジ ン ● インメモリ ○ 中間データをディスクに書かないので高速 ● コネクター ○ 色々な外部データソースに接続できる ■ e.g. Hive, Kafka, Accumulo, Cassandra ● バージョン ○ 最新 v0.191 Presto
  14. 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. 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
  16. 16. ● データ解析基盤Patriotの紹介 ● Presto on YARN ○ 概要・構成要素 (Presto, Slider) ○ 導入・設定 ○ 運用 ● 今回紹介しなかった取り組み 本日の内容
  17. 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. 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. 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. 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. 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. 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. 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>
  24. 24. ● データ解析基盤Patriotの紹介 ● Presto on YARN ○ 概要・構成要素 (Presto, Slider) ○ 導入・設定 ○ 運用 ● 今回紹介しなかった取り組み 本日の内容
  25. 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. 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. 27. ● Grafana/OpenTSDB ○ JVMメトリクスを可視化 ■ PrestoのREST API ■ データはHBaseに保存 モニタリング
  28. 28. ● 利用者を広げる ● 利用状況の統計などもっと取る ○ System Connector ● 稀に一部Workerが動かなくなる事象 ○ チューニングして解消した(?) ■ https://github.com/prestodb/presto/issues/4292 ● exchange.http-client.request-timeout=120sなど ○ 引き続き確認 今後のタスク
  29. 29. ● データ解析基盤Patriotの紹介 ● Presto on YARN ○ 概要・構成要素 (Presto, Slider) ○ 導入・設定 ○ 運用 ● 今回紹介しなかった取り組み 本日の内容
  30. 30. 今回紹介しなかった取り組み ● Kudu ○ Fast Data 処理向けに検証中 ● Zeppelin ○ Sparkなど分散処理環境へのアクセシビリティ向上 ○ 解析方法・結果の共有を容易に ● TensorFlow ○ GPUマシン環境 ○ Hadoop環境 - TensorFlow on Spark
  31. 31. ● Kafka ○ ストリーム処理のハブとして ● Hadoopクラスタ管理ツールの開発 ○ 各プロセスの開始・停止、Rolling Restart/Upgrade ○ Zookeeper経由でGitと連携し設定変更など ● Prometeus ○ 監視まわりの置き換えで検証中 今回紹介しなかった取り組み

×