スポンサーリンク

【簡単】Apache Hadoopを7ステップでインストールする方法

★悩み★
・Apache Hadoopをインストールする方法が分からない。
・Apache Hadoopの使い方が分からない。
・スクリプト言語でApache Hadoopを使う方法が分からない。

こういった「悩み」に答えます。

★本記事の内容★
(1) Apache Hadoopを7ステップでインストールする方法をご紹介
(2) Apache Hadoopの使い方をご紹介【運用方法】
(3) RubyでApache Hadoopを使う方法をご紹介

この記事を書いている筆者は、4年間、データエンジニアとして従事しています。

データエンジニアとして、システムの運用保守であったり、Hadoopを代表とする様々なソフトウェアの提案や導入をしたりしてきました。

また、趣味として様々なソフトウェア(例:Spark)を自宅のマシンに導入し、SNS分析も行なっています。
分析内容に興味がある方は、下記の記事を参照してみてください。

普段からHadoopを使い続けている筆者が、「【簡単】Apache Hadoopを7ステップでインストールする方法」に関して分かりやすく解説していきます。

Apache Hadoopを7ステップでインストールする方法

まず、Apache Hadoopを完全分散モードでインストールする流れをご紹介します。

以下の7ステップで、Apache Hadoopをインストールできます。

★インストールの流れ★
ステップ1:JDKのインストール
ステップ2:Hadoopの管理ユーザを作成
ステップ3:hostsファイルの設定
ステップ4:SSHの設定
ステップ5:SELinuxを無効
ステップ6:Hadoopのインストール
ステップ7:Hadoopのセットアップ

Hadoopを利用できる状態にするまでに上記7つのステップがあります。

各ステップに関して、説明していきます。

また、マシン構成は以下を前提とします。

★マシン構成★
・マスタサーバ
 →OS:CentOS7
 →台数:1
 →1コア
 →4GBのメモリ
 →ホスト名:master1
 →IPアドレス:192.168.10.150
・スレーブサーバ
 →OS:CentOS7
 →台数:2
 →1コア
 →4GBのメモリ
 →ホスト名:slave1、slave2
 →IPアドレス:192.168.10.151と192.168.10.152

ステップ1:JDKのインストール

Hadoopを使うためには、JDKが必要です。

全サーバで以下のコマンドを実行し、JDKをインストールします。

# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel

ステップ2:Hadoopの管理ユーザを作成

次に、Hadoopを管理するユーザを作成します。

今回は、Hadoopを管理するユーザとして、「hadoop」ユーザを作成します。

全サーバで以下のコマンドを実行しましょう。

# useradd hadoop
# passwd hadoop

ステップ3:hostsファイルの設定

指定したホスト名を使いHadoopを運用したいため、hostsファイルを修正します。

全サーバで以下のコマンドを順番に実行しましょう。

# echo "192.168.10.150 master1" >> /etc/hosts
# echo "192.168.10.151 slave1" >> /etc/hosts
# echo "192.168.10.152 slave2" >> /etc/hosts

ステップ4:SSHの設定

Hadoopは、マスタサーバとスレーブサーバ間でSSHを利用して、データのやりとりをします。

そのため、マスタサーバとスレーブサーバ間において、SSHパスワードなし認証が必要です。

全サーバで以下のコマンドを順番に実行しましょう。

# su - hadoop
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ ssh-copy-id hadoop@master1
$ ssh-copy-id hadoop@slave1
$ ssh-copy-id hadoop@slave2

ステップ5:SELinuxを無効

Hadoopを使うためには、SELinuxを無効にする必要があります。

全サーバで以下のコマンドを順番に実行します。

# vi /etc/selinux/config 
# → SELINUX=disabledに修正します
# reboot

ステップ6:Hadoopのインストール

次に、Hadoopの資材をダウンロードし展開します。

全サーバで以下のコマンドを順番に実行しましょう。

# wget http://ftp.kddilabs.jp/infosystems/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
# mv hadoop-3.2.1.tar.gz /var/tmp
# mkdir /opt/oss
# chmod -R 777 /opt/oss/
# su - hadoop
$ tar -xvf /var/tmp/hadoop-3.2.1.tar -C /opt/oss/

ステップ7:Hadoopのセットアップ

最後に、Hadoopのセットアップをします。

まずは、Hadoopの環境変数を追加するために、全サーバで以下のコマンドを順番に実行します。

# su - hadoop
$ echo "export HADOOP_HOME=/opt/oss/hadoop-3.2.1/" >> ~/.bash_profile
$ echo "export HADOOP_HOME=/opt/oss/hadoop-3.2.1/" >> ~/.bash_profile
$ echo "export JAVA_HOME=/usr/" >> ~/.bash_profile
$ echo "export HADOOP_PREFIX=/opt/oss/hadoop-3.2.1/" >> ~/.bash_profile
$ echo "export HADOOP_COMMON_HOME=/opt/oss/hadoop-3.2.1/" >> ~/.bash_profile
$ echo "export HADOOP_HDFS_HOME=/opt/oss/hadoop-3.2.1/" >> ~/.bash_profile
$ echo "export HADOOP_MAPRED_HOME=/opt/oss/hadoop-3.2.1/" >> ~/.bash_profile
$ echo "export HADOOP_YARN_HOME=/opt/oss/hadoop-3.2.1/" >> ~/.bash_profile
$ echo "export HADOOP_CONF_DIR=/opt/oss/hadoop-3.2.1/etc/hadoop" >> ~/.bash_profile
$ echo 'export YARN_CONF_DIR=$HADOOP_PREFIX/etc/hadoop' >> ~/.bash_profile

続いて、HDFSの設定をするために、マスタサーバで以下のコマンドを順番に実行します。

# su - hadoop
$ vi /opt/oss/hadoop-3.2.1/etc/hadoop/core-site.xml 
$ cat /opt/oss/hadoop-3.2.1/etc/hadoop/core-site.xml 
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
   <property>
      <name>fs.defaultFS</name>
      <value>hdfs://master1:9000</value>
   </property>
</configuration>
$ vi /opt/oss/hadoop-3.2.1/etc/hadoop/hdfs-site.xml 
$ cat /opt/oss/hadoop-3.2.1/etc/hadoop/hdfs-site.xml 
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
   <property>
      <name>dfs.replication</name>
      <value>1</value>
   </property>
   <property>
      <name>dfs.data.dir</name>
      <value>/var/opt/oss/hadoop/data</value>
   </property>
   <property>
      <name>dfs.name.dir</name>
      <value>/var/opt/oss/hadoop/name</value>
   </property>
   <property>
      <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
      <value>false</value>
   </property>
</configuration>
$ scp -pr /opt/oss/hadoop-3.2.1/etc/hadoop/core-site.xml slave1:/opt/oss/hadoop-3.2.1/etc/hadoop
$ scp -pr /opt/oss/hadoop-3.2.1/etc/hadoop/core-site.xml slave2:/opt/oss/hadoop-3.2.1/etc/hadoop
$ scp -pr /opt/oss/hadoop-3.2.1/etc/hadoop/hdfs-site.xml slave1:/opt/oss/hadoop-3.2.1/etc/hadoop
$ scp -pr /opt/oss/hadoop-3.2.1/etc/hadoop/hdfs-site.xml slave2:/opt/oss/hadoop-3.2.1/etc/hadoop

次にHDFSの初期化をするために、マスタサーバで以下のコマンドを順に実行します。

# su - hadoop
$ mkdir -p /var/opt/oss/hadoop/name
$ ssh slave1 mkdir -p /var/opt/oss/hadoop/data
$ ssh slave2 mkdir -p /var/opt/oss/hadoop/data
$ /opt/oss/hadoop-3.2.1/bin/hdfs namenode -format

続いて、並列分散処理時のリソースを管理するYarnの設定をします。

マスタサーバで以下のコマンドを順番に実行します。

# su - hadoop
$ vi /opt/oss/hadoop-3.2.1/etc/hadoop/yarn-site.xml 
$ cat /opt/oss/hadoop-3.2.1/etc/hadoop/yarn-site.xml 
<?xml version="1.0"?>
<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master1</value>
    </property>
</configuration>
$ scp -pr /opt/oss/hadoop-3.2.1/etc/hadoop/yarn-site.xml slave1:/opt/oss/hadoop-3.2.1/etc/hadoop
$ scp -pr /opt/oss/hadoop-3.2.1/etc/hadoop/yarn-site.xml slave2:/opt/oss/hadoop-3.2.1/etc/hadoop

以上の7ステップでApache Hadoopのインストールが完了します。

Apache Hadoopの使い方をご紹介【運用方法】

Apache Hadoopの起動/状態確認/停止に関してご紹介します。

Hadoopの起動方法

Hadoopを起動するために、マスタサーバで以下のコマンドを順番に実行します。

# su - hadoop
$ /opt/oss/hadoop-3.2.1/sbin/hadoop-daemon.sh start namenode
$ ssh slave1
$ /opt/oss/hadoop-3.2.1/sbin/hadoop-daemon.sh start datanode
$ exit
$ ssh slave2 
$ /opt/oss/hadoop-3.2.1/sbin/hadoop-daemon.sh start datanode
$ exit
$ /opt/oss/hadoop-3.2.1/sbin/yarn-daemon.sh start resourcemanager
$ ssh slave1 
$ /opt/oss/hadoop-3.2.1/sbin/yarn-daemon.sh start nodemanager
$ exit
$ ssh slave2 
$ /opt/oss/hadoop-3.2.1/sbin/yarn-daemon.sh start nodemanager
$ exit

Hadoopの状態確認方法

Hadoopが起動しているかを確認するために、マスタサーバで以下のコマンドを順番に起動します。

# Hadoopが起動している場合
# su - hadoop
$ jps
2392 ResourceManager
22942 Jps
2223 NameNode
$ ssh slave1 jps
2258 NodeManager
32356 Jps
2095 DataNode
$ ssh slave2 jps
1012 Jps
2220 DataNode
2383 NodeManager

# Hadoopが起動していない場合
$ jps
22942 Jps
$ ssh slave1 jps
32356 Jps
$ ssh slave2 jps
1012 Jps

Hadoopの停止方法

Hadoopを停止するために、マスタサーバで以下のコマンドを順番に実行します。

# su - hadoop
$ ssh slave1 /opt/oss/hadoop-3.2.1/sbin/hadoop-daemon.sh stop datanode
$ ssh slave2 /opt/oss/hadoop-3.2.1/sbin/hadoop-daemon.sh stop datanode
$ /opt/oss/hadoop-3.2.1/sbin/hadoop-daemon.sh stop namenode
$ ssh slave1 /opt/oss/hadoop-3.2.1/sbin/yarn-daemon.sh stop nodemanager
$ ssh slave2 /opt/oss/hadoop-3.2.1/sbin/yarn-daemon.sh stop nodemanager
$ /opt/oss/hadoop-3.2.1/sbin/yarn-daemon.sh stop resourcemanager

RubyでApache Hadoopを使う方法【ソースコードあり】

Apache Hadoopを使うことで、スクリプト言語である「Ruby」を用いて分散処理をすることができます。

今回は、「Ruby」を使った「テキスト内の単語を集計する」分散処理アプリをご紹介します。

以下の4ステップで分散処理アプリを実行することができます。

★分散処理アプリ実行までの流れ★
ステップ1:集計対象となるテキストを作成
ステップ2:mapperの作成
ステップ3:reducerの作成
ステップ4:Hadoopで実行

各ステップに関して簡単に説明します。

ステップ1:集計対象となるテキストを作成

今回は、「テキスト内の単語を集計する」分散処理アプリを作成します。

そのため、以下のような集計対象となるsample.txtを作成しましょう。

a
b
c
a

sample.txt作成後、HDFS上に格納する必要があります。

HDFS上に格納するためにマスタサーバで以下のコマンドを順に実行します。

# su - hadoop
$ hadoop fs -mkdir blog
$ hadoop fs -put sample.txt blog

ステップ2:mapperの作成

以下のmapper.rbを作成しましょう。

mapper.rbでテキスト内に記載された単語を抽出します。

#!/usr/bin/env ruby

STDIN.each_line do |line|
  words = line.chomp.split(",")
  words.each do |word|
    puts "#{word}\t1"
  end
end

ステップ3:reducerの作成

以下のreducer.rbを作成しましょう。

reducer.rbで、単語の集計を行います。

#!/usr/bin/env ruby
word_map = {}
STDIN.each_line do |line|
  word_data = line.chomp.split("\t")
  word = word_data[0]
  value = word_data[1]

  if word_map.has_key?(word)
    word_map[word] += value.to_i
  else
    word_map[word] = value.to_i
  end
end
puts word_map

ステップ4:Hadoopで実行

最後に作成したmapper.rbとreducer.rbをHadoop上で実行します。

Hadoop上で実行するために、マスタサーバで以下のコマンドを実行します。

# su - hadoop
$ ls
$ ls
mapper.rb  reducer.rb
$/opt/oss/hadoop-3.2.1/bin/hadoop jar /opt/oss/hadoop-3.2.1/share/hadoop/tools/lib/hadoop-streaming-3.2.1.jar  \
      -files mapper.rb,reducer.rb \
      -mapper mapper.rb \
      -reducer reducer.rb \
      -input blog \
      -output blog_output

「テキスト内の単語を集計する」分散処理アプリの実行結果を確認するために、マスタサーバで以下のコマンドを実行します。

$ hadoop fs -cat blog_output/part-00000
{"a"=>2, "b"=>1, "c"=>1}

以上により、「Ruby」を使った「テキスト内の単語を集計する」分散処理アプリを作成し実行することができます。
 

ちなみに、「Hadoopの仕組み」や「Hadoopの基礎知識」を学びたい方は、以下の教材がオススメです。

Hadoop入門@udemy

 

【まとめ】Apache Hadoopを7ステップでインストールする方法

今回の記事を通して、「Apache Hadoopを7ステップでインストールする方法」をご紹介することで、以下の悩みを解消しました。

★悩み★
・Apache Hadoopをインストールする方法が分からない。
・Apache Hadoopの使い方が分からない。
・スクリプト言語でApache Hadoopを使う方法が分からない。

Apache Hadoopを利用するには?と悩んでいるあなた」にこの記事が少しでも役に立てれば幸いです。

コメント

タイトルとURLをコピーしました