OSC Tokyo fall LT~Dockerで分散処理をやってみた

34
Docker で でででででででででで TIS でででで でででで * ででで slideshare でででででででで でででででで : atk1234

Transcript of OSC Tokyo fall LT~Dockerで分散処理をやってみた

Page 1: OSC Tokyo fall LT~Dockerで分散処理をやってみた

Docker で分散処理をやってみたTIS 株式会社 安達貴志

* 資料は slideshare に公開しています アカウント名 : atk1234

Page 2: OSC Tokyo fall LT~Dockerで分散処理をやってみた

自己紹介• 名前 安達貴志 ( あだち たかし )       ( 新弟子と呼ばれています )

• 所属 TIS 株式会社    入社1年目• 興味があるもの     Zabbix,Docker,Hadoop,Ansible,WebGL, AngularJS,DQN,Machine-Lerning ・・・ 節操がない      某キャラクタといい勝負

Page 3: OSC Tokyo fall LT~Dockerで分散処理をやってみた

ライブラリ

サーバホスト OS

Docker エンジンライブラリ

アプリケーション

アプリケーション

アプリケーション

アプリケーション

アプリケーション

コンテナ毎にカーネルを持たないため・早い・軽い・手軽

牛丼のような特徴がある

Page 4: OSC Tokyo fall LT~Dockerで分散処理をやってみた

一方で、たくさんのコンテナの使い道に困る ライブラリDocker エンジン

ライブラリ

アプリケーションC

アプリケーションA

アプリケーションB

アプリケーションE

アプリケーションD

アプリケーションF

コンテナ間で分散処理をしてみる

Page 5: OSC Tokyo fall LT~Dockerで分散処理をやってみた

Hadoop で分散処理するコンテナC

コンテナA

コンテナB

コンテナEコンテナD

Big Data

新情報!?

Hadoop

Page 6: OSC Tokyo fall LT~Dockerで分散処理をやってみた

やってみたこと

コンテナC

コンテナA

コンテナB

コンテナE

コンテナD

Big Data

新情報!?もしかして :google

Docker でコンテナ立てて、Hadoop で分散処理する

Page 7: OSC Tokyo fall LT~Dockerで分散処理をやってみた

環境

AWS 上の EC2 インスタンス 1台(t2.large)

Page 8: OSC Tokyo fall LT~Dockerで分散処理をやってみた

構築手順環境構築 •Dockerのインストール

•Docker-Composeのインストール

Hadoop •Hadoopを入れたコンテナの作成•コンテナ間の連携(Docker-Compose)

分析 •分析データの入手•分析

Page 9: OSC Tokyo fall LT~Dockerで分散処理をやってみた

環境構築 ~ Docker と Docker-Composeyum で Docker をインストールDocker

curl コマンドでバイナリをダウンロードし、実行権限を付与するDocker-Compose

簡単です

Page 10: OSC Tokyo fall LT~Dockerで分散処理をやってみた

Hadoop  ~コンテナの作成とコンテナ間の連携コンテナの作成

コンテナ間の連携Docker-Compose で各コンテナ間にリンクを貼り、クラスタを構築する

Java のインストールHadoop のインストール

分散処理の設定 長いため、詳細は省略

Page 11: OSC Tokyo fall LT~Dockerで分散処理をやってみた

分析 ~データの入手と分析・公開されている 130 万件のパスワード・使われているワードを集計する

データの入手

・パスワードを分割し、各コンテナで集計する・集計後、結果を統合する分析

https://github.com/danielmiessler/SecLists/blob/master/Passwords/10k_most_common.txthttps://github.com/danielmiessler/SecLists/blob/master/Passwords/darkc0de.txthttps://github.com/danielmiessler/SecLists/blob/master/Passwords/Ashley_Madison.txthttp://area51archives.com/index.php?title=Ultimate_Password_List

Page 12: OSC Tokyo fall LT~Dockerで分散処理をやってみた

処理時間の比較と分析結果

順位 ワード1 123456

2 password

3 12345

処理マシン 処理時間 (s)Hadoop 49.6

Python による単独処理

27.9

Hadoop と通常のマシンによる処理時間の比較

処理があまりにも単調だったためジョブの分割に時間がかかり、単独処理のほうが早くなった・・・多く使われていたパスワード TOP3

分析結果

処理時間の比較

Page 13: OSC Tokyo fall LT~Dockerで分散処理をやってみた

まとめ結論• 仮想マシンでクラスタを組むよりも手軽に実施できる    -> 開発やテスト環境向けを作るときに楽   -> バージョンをイメージで管理できる次の目標• Spark と連携したい• VM のクラスタの処理時間と比較したい

Page 14: OSC Tokyo fall LT~Dockerで分散処理をやってみた

最後に・・・TIS では、OSS に関するサポートやシステムの設計、構築などを行っています興味がある方はぜひ TIS ブースまでお立ち寄りください

Page 15: OSC Tokyo fall LT~Dockerで分散処理をやってみた

ご清聴ありがとうございました

Page 16: OSC Tokyo fall LT~Dockerで分散処理をやってみた

補足 : 構築方法

Page 17: OSC Tokyo fall LT~Dockerで分散処理をやってみた

構築手順環境構築 • Docker のインストール

• Dokcer-compose のインストール

ファイルの作成と配置• Dockerfile• Docker-compose.yml• Hadoop 用の xml ファイル• Rpm ファイル

イメージの作成

• Hadoop を入れたイメージの作成• 上記のイメージからマスタサーバとスレーブサーバのイメー

ジを作成する

起動とテスト• イメージからマスタサーバとスレーブを立ち上げる• 各初期設定• テスト用プログラムの実行

Page 18: OSC Tokyo fall LT~Dockerで分散処理をやってみた

Docker のインストール① yum –y install docker② service docker start

下記の表示がでれば OK$dockerUsage: docker [OPTIONS] COMMAND [arg...]

A self-sufficient runtime for linux containers.

Options:・・・

Page 19: OSC Tokyo fall LT~Dockerで分散処理をやってみた

Docker-compose のインストール① curl -L

https://github.com/docker/compose/releases/download/1.4.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

② chmod +x /usr/local/bin/docker-compose

下記の表示がでれば OK$docker-compose –versiondocker-compose version: 1.4.2

Page 20: OSC Tokyo fall LT~Dockerで分散処理をやってみた

ファイルの作成と配置

rpm ファイルは以下から事前にダウンロードしておく・ cloudera-cdh-5.0.x86_64.rpmcurl -LO http://archive.cloudera.com/cdh5/one-click-install/redhat/6/x86_64/cloudera-cdh-5-0.x86_64.rpm

・ oracle jdkcurl -LO -b "oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.rpm

左図のようなファイル構造を作成する

Page 21: OSC Tokyo fall LT~Dockerで分散処理をやってみた

DockerfileFROM centos:latest

USER root

RUN yum -y update

RUN yum -y install sudo wget

ADD rpm /tmp/rpm/

RUN rpm -ivh /tmp/rpm/jdk-7u79-linux-x64.rpm

RUN rm /tmp/rpm/jdk-7u79-linux-x64.rpm

ENV JAVA_HOME /usr/java/default

ENV PATH $PATH:$JAVA_HOME/bin

RUN mv /tmp/rpm/cloudera-cdh-5-0.x86_64.rpm /usr/local/src/

RUN rpm -ivh /usr/local/src/cloudera-cdh-5-0.x86_64.rpm

RUN rpm --import http://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera

RUN yum -y install hadoop-conf-pseudo

RUN rm -rf /tmp/rpm

Page 22: OSC Tokyo fall LT~Dockerで分散処理をやってみた

Dockerfile( 続き )

RUN sed -ri 's/Defaults requiretty/#Defaults requiretty/g' /etc/sudoers

ADD xml /tmp/xml/

ENTRYPOINT /sbin/init

EXPOSE 50010 50020 50070 50075 50090EXPOSE 19888EXPOSE 8020 8030 8031 8032 8033 8040 8042 8088EXPOSE 49707 2112

Page 23: OSC Tokyo fall LT~Dockerで分散処理をやってみた

docker-compose.ymlmaster:

build: ./master

hostname: master

ports:

- "50070:50070"

privileged: true

links:

- "slave1"

- "slave2"

slave1:

build: ./slave

hostname: slave1

links:

- "slave2"

privileged: true

slave2:

build: ./slave

hostname: slave2

privileged: true

Page 24: OSC Tokyo fall LT~Dockerで分散処理をやってみた

master/dockerfile

FROM hadoop:1.0

USER rootADD init-master.sh /tmp/init-master.shRUN chown root:root /tmp/init-master.shRUN chmod 700 /tmp/init-master.shCMD ["tmp/init-master.sh","-d"]

Page 25: OSC Tokyo fall LT~Dockerで分散処理をやってみた

master/init-master.sh#!/bin/bash

sudo cp -prL /etc/hadoop/conf /etc/hadoop/conf.distribute.mr1

sudo alternatives --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.distribute.mr1 50

sudo mv -f /tmp/xml/core-site.xml /etc/hadoop/conf/core-site.xml

sudo mv -f /tmp/xml/hdfs-site.xml /etc/hadoop/conf/hdfs-site.xml

sudo mv -f /tmp/xml/mapred-site.xml /etc/hadoop/conf/mapred-site.xml

sudo service hadoop-hdfs-namenode start

sudo -u hdfs hdfs namenode -format

sudo useradd hadoop_exec

sudo -u hdfs hadoop fs -mkdir -p /user/hadoop_exec

sudo -u hdfs hadoop fs -chown hadoop_exec /user/hadoop_exec

sudo -u hdfs hadoop fs -chmod -R 777 /

sudo service hadoop-yarn-resourcemanager start

sudo service hadoop-mapreduce-historyserver start

Page 26: OSC Tokyo fall LT~Dockerで分散処理をやってみた

slave/Dockerfile

FROM hadoop:1.0

USER rootADD init-slave.sh /tmp/init-slave.shRUN chown root:root /tmp/init-slave.shRUN chmod 700 /tmp/init-slave.shCMD ["/tmp/init-slave.sh","-d"]

Page 27: OSC Tokyo fall LT~Dockerで分散処理をやってみた

slave/init-slave.sh#!/bin/bash

sudo cp -prL /etc/hadoop/conf /etc/hadoop/conf.distribute.mr1

sudo alternatives --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.distribute.mr1 50

sudo mv -f /tmp/xml/core-site.xml /etc/hadoop/conf/core-site.xml

sudo mv -f /tmp/xml/hdfs-site.xml /etc/hadoop/conf/hdfs-site.xml

sudo mv -f /tmp/xml/mapred-site.xml /etc/hadoop/conf/mapred-site.xml

sudo service hadoop-hdfs-datamode start

sudo useradd hadoop_exec

sudo service hadoop-yarn-nodemanager start

Page 28: OSC Tokyo fall LT~Dockerで分散処理をやってみた

xml/core-site.xml ( 変更箇所のみ )

<property> <name>fs.defaultFS</name> <value>hdfs://master:8020</value> </property>

Page 29: OSC Tokyo fall LT~Dockerで分散処理をやってみた

xml/hdfs-site.xml ( 変更箇所のみ ) <property>

<name>dfs.replication</name>

<value>3</value>

</property>

<property>

<name>dfs.namenode.name.dir</name>

<value>/var/lib/hadoop-hdfs/cache/${user.name}/dfs/name</value>

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value>/var/lib/hadoop-hdfs/cache/${user.name}/dfs/data</value>

</property>

Page 30: OSC Tokyo fall LT~Dockerで分散処理をやってみた

xml/mapred-site.xml ( 変更箇所のみ ) <property>

<name>mapred.job.tracker</name>

<value>master:8021</value>

</property>

<property>

<name>mapreduce.jobhistory.address</name>

<value>master:10020</value>

</property>

<property>

<name>mapreduce.jobhistory.webapp.address</name>

<value>master:19888</value>

</property>

Page 31: OSC Tokyo fall LT~Dockerで分散処理をやってみた

イメージの作成Centos から Hadoop 用イメージを作成する   $docker build –t Hadoop:1.0 .

Hadoop イメージからマスタ / スレーブ用のイメージを作成する   $docker-compose build

Page 32: OSC Tokyo fall LT~Dockerで分散処理をやってみた

master サーバの設定• docker exec -it XXXX_master_1 /bin/bash

• 初期設定を行う  /tmp/init-master.sh

Page 33: OSC Tokyo fall LT~Dockerで分散処理をやってみた

slave サーバの設定 (2 台とも )• docker exec -it XXXX_slave_1 /bin/bash

・初期設定を行う  /tmp/init-slave.sh

・ hosts ファイルに、各コンテナの FQDN を記述する・記述後、 datanode を再起動するService Hadoop-hdfs-datanode restart

Page 34: OSC Tokyo fall LT~Dockerで分散処理をやってみた

テスト用プログラムの実行sudo -u hdfs hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples-2.X.X-cdh5.1.2.jar pi 10 300

無事、円周率が表示されれば成功