Hadoopとは?Hadoopを触ってみる
ビッグデータ処理を支えるJavaフレームワーク
「Hadoop」とは?
もともと、Googleが検索エンジン用に開発したバッチ処理システムを参考に作られたもので、数千ものノードを用いて、PB(ペタバイト)クラスのデータ処理ができる。
検索システムを紹介する論文中で、データ処理のMapReduce、分散ファイルシステムのGoogle File Systemを解説。この論文を見たエンジニアが、Yahoo!社内で利用するシステムとしてHadoopの開発を進めていたものだ
現在Hadoopは、Apache Software Foundation(ASF)に移管され、オープンソースソフトとして開発が進められている。
【インタビュー】ビッグデータを支えるCloudera、その役割とは? 共同創業者兼CTOのAwadallah氏に聞く - クラウド Watch
Hadoopは、主にHDFSとMapReduceの技術で構成されています。 HDFSは分散したストーレージを一つのストーレージとして扱う技術で、MapReduceはデータ解析のためのプログラムになります。これらは元々のGoogleの着想だったのですが、今はApacheFoundationでオープンソース化されているようです。DWH(データウェアハウス)やBI(ビジネスインテリジェンス)と呼ばれる領域で良く使用されていますが、以前から気になっていたので、少し触ってみます。
では、さっそくVagrantで作成したVMにHadoopをインストールしてみます。
VMを作成する記事は下記参照です。
今回はHadoopを利用する環境として、HadoopのディストリビューションのCDH(Cloudera’s Distribution including Apache Hadoop)を使用します。 まずはJDKが必要なので、OpeanJDKをインストールします。今回はJava8をインストールします。
[vagrant@vagrant-centos64 ~]$ java -version -bash: java: command not found [vagrant@vagrant-centos64 ~]$ yum search openjdk <略> java-1.8.0-openjdk-devel.x86_64 : OpenJDK Development Environment <略> [vagrant@vagrant-centos64 ~]$ su Password: [root@vagrant-centos64 vagrant]# yum install java-1.8.0-openjdk-devel.x86_64 <略> [root@vagrant-centos64 vagrant]# java -version openjdk version "1.8.0_31" OpenJDK Runtime Environment (build 1.8.0_31-b13) OpenJDK 64-Bit Server VM (build 25.31-b07, mixed mode) [root@vagrant-centos64 vagrant]#
OpenJDKがインストールされました。しかし後で知ったのですが今回使用するClouderaは Oracle製のJDKでないといけないようです。
そこで、インストールしたOpenJDKをアンインストールします。
[vagrant@vagrant-centos64 ~]$ yum list installed | grep jdk [vagrant@vagrant-centos64 ~]$ su Password: [root@vagrant-centos64 vagrant]# yum remove -y java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-headless.x86_64 <略> [root@vagrant-centos64 vagrant]# java -version bash: java: command not found
OpenJDKのアンインストールが完了しました。 次にOracle製のJDKのrpmをwgetでダウンロードします。 *wgetする前にOracleのJDKダウンロードページで同意にチェックが必要です。
まずは、wgetをインストールします。
[root@vagrant-centos64 vagrant]# wget bash: wget: command not found [root@vagrant-centos64 vagrant]# yum install wget <略>
Oracle製のJDKのrpmをwgetでダウンロードします。
[root@vagrant-centos64 vagrant]# wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u25-b17/jdk-8u25-linux-x64.rpm <略>
rpmからJDKをインストールします。
[root@vagrant-centos64 vagrant]# rpm -ivh jdk-8u25-linux-x64.rpm <略> [root@vagrant-centos64 vagrant]# java -version java version "1.8.0_25" Java(TM) SE Runtime Environment (build 1.8.0_25-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
次にHadoopをインストールします。
[root@vagrant-centos64 vagrant]# cd /etc/yum.repos.d [root@vagrant-centos64 yum.repos.d]# wget http://archive.cloudera.com/redhat/6/x86_64/cdh/cloudera-cdh3.repo [root@vagrant-centos64 yum.repos.d]# rpm --import http://archive.cloudera.com/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera [root@vagrant-centos64 yum.repos.d]# yum search hadoop <略> [root@vagrant-centos64 yum.repos.d]# yum install hadoop-0.20 <略>
Hadoopをインストールすることができました。次に1台でHadoopのサンプルプログラムを触ってみます。 ますはHadoopを1台で動かす設定を入れます。
[root@vagrant-centos64 yum.repos.d]# yum install hadoop-0.20-conf-pseudo <略>
各サービスを起動します。
[root@vagrant-centos64 yum.repos.d]# service hadoop-0.20-namenode start <略> [root@vagrant-centos64 yum.repos.d]# [ OK ] [root@vagrant-centos64 yum.repos.d]# service hadoop-0.20-jobtracker start <略> [root@vagrant-centos64 yum.repos.d]# [ OK ] [root@vagrant-centos64 yum.repos.d]# service hadoop-0.20-datanode start <略> datanode (pid 8512) is running... [ OK ] [root@vagrant-centos64 yum.repos.d]# service hadoop-0.20-tasktracker start <略> [root@vagrant-centos64 yum.repos.d]# [ OK ]
いよいよサンプルプログラムを動かしてみます。その前に、Hadoopはサーバをホスト名で指定するようになってるようなので、/etc/hostsファイルに記載して名前解決できるようにしておきます(これをしないとUnknownHostExceptionが吐かれます)。また、サービス起動直後はHDFSはセーフモードになっており、書き込みを行おうとすると、SafeModeExceptionが吐かれます。なのでセーフモードをOFFにします。
[root@vagrant-centos64 hadoop]# hadoop dfsadmin -safemode get Safe mode is ON [root@vagrant-centos64 hadoop]# hadoop dfsadmin -safemode leave Safe mode is OFF
円周率を計算するサンプルプログラムを動かしてみます。
[root@vagrant-centos64 lib]# hadoop jar /usr/lib/hadoop-0.20/hadoop-examples.jar pi 4 1000 Number of Maps = 4 Samples per Map = 1000 Wrote input for Map #0 Wrote input for Map #1 Wrote input for Map #2 Wrote input for Map #3 Starting Job <略> Job Finished in 88.588 seconds Estimated value of Pi is 3.40000000000000000000
ちゃんと動作しましたね。
今後は複数台のサーバにHadoopを入れてデータ解析をやってみたいです。
- 作者: 太田一樹,下垣徹,山下真一,猿田浩輔,藤井達朗,岩崎正剛
- 出版社/メーカー: 翔泳社
- 発売日: 2013/08/28
- メディア: Kindle版
- この商品を含むブログ (3件) を見る