slides

EmbulkをEMRで実行しスケーラブルにする

@joker1007 (Repro.inc)


self.inspect


Embulk


EMR on embulkでやってること


Hadoop上での実行方法

exec:
  type: mapreduce
  config_files:
    - /etc/hadoop/conf/core-site.xml
    - /etc/hadoop/conf/hdfs-site.xml
    - /etc/hadoop/conf/mapred-site.xml
  config:
    fs.defaultFS: "hdfs://my-hdfs.example.net:8020"
    yarn.resourcemanager.hostname: "my-yarn.example.net"
    dfs.replication: 1
    mapreduce.client.submit.file.replication: 1

in:
  # ...

out:
  # ...

ざっくり仕組み


EMRで実行するために


Hadoopバージョン

現時点でHadoop YARN-2.6.0向けに構築されてる。 2.7系だとログが上手く吐けなくてエラーになった。 解決方法はあるかもしれないが、自分では分からなかった。


configの例

config_filesで基本的なEMR上のYARNの設定を引っ張ってくる。 configで必要な設定をオーバーライド

exec:
  type: mapreduce
  config_files:
    - /etc/hadoop/conf/core-site.xml
    - /etc/hadoop/conf/hdfs-site.xml
    - /etc/hadoop/conf/mapred-site.xml
    - /etc/hadoop/conf/yarn-site.xml
  config:
    mapreduce.task.timeout: 72000000
    mapreduce.map.speculative: false
    mapreduce.map.memory.mb: 2560
    mapreduce.reduce.memory.mb: 16
    mapreduce.map.java.opts: -Xmx1792m
    mapreduce.reduce.java.opts: -Xmx16m

config解説


追加jars

exec:
  type: mapreduce
  config_files:
    # ...
  config:
    # ...
  libjars:
    - /home/hadoop/.m2/repository/ch/qos/logback/logback-core/1.1.3/logback-core-1.1.3.jar
    - /home/hadoop/.m2/repository/ch/qos/logback/logback-classic/1.1.3/logback-classic-1.1.3.jar
  exclude_jars: [log4j-over-slf4j.jar, log4j-core-*, slf4j-log4j12*]

その他、プラグインが必要とする依存関係がちゃんと解決されてない場合があるので別途追加しておく必要がある。


追加jars解説


バッチの実行方法


emrakul


Tips