by shigemk2

当面は技術的なことしか書かない

EMRのnannyプロセス

amalgjose.com

各ノードを監視するデーモンで、OOMとかでなんかのプロセスが死んだら、即座に自動で再起動してくれる。

tail -f /emr/service-nanny/log/service-nanny-yyyy-mm-dd しつつinstance-controllerなどのプロセスをキルすると、service-nannyのログにinstance-controller再起動のログが書き込まれているのが分かる。

nannyのプロセスをキルしてからinstance-controllerのプロセスをキルすると、instance-controllerが再起動しないのがわかる。

YARNとかDataNodeとかNameNodeとか

クラスタリソース管理フレームワーク。次世代MapReduceとかいう雑なイメージは捨てろ。

YARN構成

  • Resource Manager クラスター全体のリソース管理をするマネージャー。Application Masterからの要請を受けてNode Managerにコンテナーのリソースを付与する(常時起動)
  • Application Master Resource ManagerとNode Managerを仲介する(都度起動)
  • Node Manager 実際にアプリケーションを実行するワーカー(常時起動)

DataNodeとかNameNodeとか

  • DataNode データを保存するノード
  • NameNode メタデータを管理するノード

qiita.com

codezine.jp

Digdag EMR

emr>: Amazon Elastic Map Reduce — Digdag 0.9.5 documentation

typeのところから一部抜粋。spark/hive/script/commandが使えると思う

- type: hive
  script: queries/hive-query.q
  vars:
    INPUT: s3://my-bucket/data/
    OUTPUT: s3://my-bucket/output/
  hiveconf:
    hive.support.sql11.reserved.keywords: false

- type: spark
  application: spark/pi.scala

- type: spark
  application: s3://my-bucket/spark/hello.py
  args: [foo, bar]

- type: spark
  application: spark/hello.jar
  class: com.example.Hello
  jars:
    - libhello.jar
    - s3://td-spark/td-spark-assembly-0.1.jar
  conf:
    spark.locality.wait: 5s
    spark.memory.fraction: 0.5
  args: [foo, bar]

- type: spark-sql
  query: spark/query.sql
  result: s3://my-bucket/results/${session_uuid}/

- type: script
  script: s3://my-bucket/scripts/hello.sh
  args: [hello, world]

- type: script
  script: scripts/hello.sh
  args: [world]

- type: command
  command: echo
  args: [hello, world]