osc tokyo fall lt~dockerで分散処理をやってみた
TRANSCRIPT
![Page 1: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/1.jpg)
Docker で分散処理をやってみたTIS 株式会社 安達貴志
* 資料は slideshare に公開しています アカウント名 : atk1234
![Page 2: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/2.jpg)
自己紹介• 名前 安達貴志 ( あだち たかし ) ( 新弟子と呼ばれています )
• 所属 TIS 株式会社 入社1年目• 興味があるもの Zabbix,Docker,Hadoop,Ansible,WebGL, AngularJS,DQN,Machine-Lerning ・・・ 節操がない 某キャラクタといい勝負
![Page 3: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/3.jpg)
ライブラリ
サーバホスト OS
Docker エンジンライブラリ
アプリケーション
アプリケーション
アプリケーション
アプリケーション
アプリケーション
コンテナ毎にカーネルを持たないため・早い・軽い・手軽
牛丼のような特徴がある
![Page 4: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/4.jpg)
一方で、たくさんのコンテナの使い道に困る ライブラリDocker エンジン
ライブラリ
アプリケーションC
アプリケーションA
アプリケーションB
アプリケーションE
アプリケーションD
アプリケーションF
コンテナ間で分散処理をしてみる
![Page 5: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/5.jpg)
Hadoop で分散処理するコンテナC
コンテナA
コンテナB
コンテナEコンテナD
Big Data
新情報!?
Hadoop
![Page 6: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/6.jpg)
やってみたこと
コンテナC
コンテナA
コンテナB
コンテナE
コンテナD
Big Data
新情報!?もしかして :google
Docker でコンテナ立てて、Hadoop で分散処理する
![Page 7: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/7.jpg)
環境
AWS 上の EC2 インスタンス 1台(t2.large)
![Page 8: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/8.jpg)
構築手順環境構築 •Dockerのインストール
•Docker-Composeのインストール
Hadoop •Hadoopを入れたコンテナの作成•コンテナ間の連携(Docker-Compose)
分析 •分析データの入手•分析
![Page 9: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/9.jpg)
環境構築 ~ Docker と Docker-Composeyum で Docker をインストールDocker
curl コマンドでバイナリをダウンロードし、実行権限を付与するDocker-Compose
簡単です
![Page 10: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/10.jpg)
Hadoop ~コンテナの作成とコンテナ間の連携コンテナの作成
コンテナ間の連携Docker-Compose で各コンテナ間にリンクを貼り、クラスタを構築する
Java のインストールHadoop のインストール
分散処理の設定 長いため、詳細は省略
![Page 11: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/11.jpg)
分析 ~データの入手と分析・公開されている 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で分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/12.jpg)
処理時間の比較と分析結果
順位 ワード1 123456
2 password
3 12345
処理マシン 処理時間 (s)Hadoop 49.6
Python による単独処理
27.9
Hadoop と通常のマシンによる処理時間の比較
処理があまりにも単調だったためジョブの分割に時間がかかり、単独処理のほうが早くなった・・・多く使われていたパスワード TOP3
分析結果
処理時間の比較
![Page 13: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/13.jpg)
まとめ結論• 仮想マシンでクラスタを組むよりも手軽に実施できる -> 開発やテスト環境向けを作るときに楽 -> バージョンをイメージで管理できる次の目標• Spark と連携したい• VM のクラスタの処理時間と比較したい
![Page 14: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/14.jpg)
最後に・・・TIS では、OSS に関するサポートやシステムの設計、構築などを行っています興味がある方はぜひ TIS ブースまでお立ち寄りください
![Page 15: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/15.jpg)
ご清聴ありがとうございました
![Page 16: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/16.jpg)
補足 : 構築方法
![Page 17: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/17.jpg)
構築手順環境構築 • Docker のインストール
• Dokcer-compose のインストール
ファイルの作成と配置• Dockerfile• Docker-compose.yml• Hadoop 用の xml ファイル• Rpm ファイル
イメージの作成
• Hadoop を入れたイメージの作成• 上記のイメージからマスタサーバとスレーブサーバのイメー
ジを作成する
起動とテスト• イメージからマスタサーバとスレーブを立ち上げる• 各初期設定• テスト用プログラムの実行
![Page 18: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/18.jpg)
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で分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/19.jpg)
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で分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/20.jpg)
ファイルの作成と配置
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で分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/21.jpg)
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で分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/22.jpg)
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で分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/23.jpg)
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で分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/24.jpg)
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で分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/25.jpg)
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で分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/26.jpg)
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で分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/27.jpg)
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で分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/28.jpg)
xml/core-site.xml ( 変更箇所のみ )
<property> <name>fs.defaultFS</name> <value>hdfs://master:8020</value> </property>
![Page 29: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/29.jpg)
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で分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/30.jpg)
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で分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/31.jpg)
イメージの作成Centos から Hadoop 用イメージを作成する $docker build –t Hadoop:1.0 .
Hadoop イメージからマスタ / スレーブ用のイメージを作成する $docker-compose build
![Page 32: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/32.jpg)
master サーバの設定• docker exec -it XXXX_master_1 /bin/bash
• 初期設定を行う /tmp/init-master.sh
![Page 33: OSC Tokyo fall LT~Dockerで分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/33.jpg)
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で分散処理をやってみた](https://reader035.vdocuments.mx/reader035/viewer/2022081503/58a3b87f1a28ab62218b547f/html5/thumbnails/34.jpg)
テスト用プログラムの実行sudo -u hdfs hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples-2.X.X-cdh5.1.2.jar pi 10 300
無事、円周率が表示されれば成功