Orgad Kimchi著
2013年10月公開
|
予想される所要時間:180分間
このハンズオン・ラボでは、Oracle Solaris Zones、ZFS、ネットワーク仮想化などのOracle Solaris 11のテクノロジーを使用してApache Hadoopクラスタをセットアップする方法を示す演習を提供します。主要なトピックは、Hadoop分散ファイル・システム(HDFS)、Hadoop MapReduceプログラミング・モデルなどです。
Hadoopのインストール・プロセスとクラスタの構成要素(ネームノード、セカンダリ・ネームノード、データノード)についても説明します。また、Oracle Solaris 11のテクノロジーを組み合わせてスケーラビリティとデータ・セキュリティを向上させる方法や、Hadoopクラスタにデータをロードする方法、MapReduceジョブを実行する方法についても説明します。
このハンズオン・ラボは、本番環境または開発環境でHadoopクラスタのセットアップやメンテナンスを行うシステム管理者を対象としており、LinuxまたはOracle Solarisシステムの基本的な管理の経験があることが前提となっています。Hadoopに関する予備知識は不要です。
このハンズオン・ラボは、Oracle VM VirtualBoxのOracle Solaris 11で実行します。このラボは自己完結型であり、必要なものはすべて、Oracle VM VirtualBoxインスタンスに含まれています。
Oracle OpenWorldでラボに参加する場合は、適切なOracle VM VirtualBoxイメージがラップトップに事前にロードされています。
Oracle OpenWorld以外の場所でこのラボに参加する場合は、Oracle Solaris 11システムが必要です。以下の手順で、マシンをセットアップしてください。
vi
と入力)とEmacs(ターミナル・ウィンドウでemacs
と入力)です。このハンズオン・ラボは、さまざまなOracle SolarisおよびApache Hadoopテクノロジーに関する以下の13の演習で構成されています。
Apache Hadoopソフトウェアは、シンプルなプログラミング・モデルによってコンピュータの複数のクラスタにわたる大規模データセットを分散処理することを可能にするフレームワークです。
データを格納するために、Hadoopでは、Hadoop分散ファイル・システム(HDFS)が使用されます。HDFSは、優れたスループットでのアプリケーション・データへのアクセスを実現するため、大規模なデータセットを持つアプリケーションに適しています。
HadoopおよびHDFSについて詳しくは、http://hadoop.apache.org/を参照してください。
Hadoopクラスタの構成要素は、以下のとおりです。
このラボの例では、Hadoopクラスタのすべての構成要素が、Oracle Solaris Zones、ZFS、およびネットワーク仮想化テクノロジーによってインストールされます。図1は、そのアーキテクチャを示しています。
図1
図2
図3
root
ユーザーに切り替えます。注:Oracle OpenWorldの参加者の場合は、rootパスワードがこのラボに関する要綱に記載されています。Oracle OpenWorld以外の場所でこのラボを実行している場合は、"システム要件"の項の手順で入力したrootパスワードを入力してください。
root@global_zone:~# su - Password: Oracle Corporation SunOS 5.11 11.1 September 2012
注:Oracle OpenWorldの参加者は、この手順をスキップして(事前にロードされたOracle VM VirtualBoxイメージによって、構成済みのVNICが提供されるため)、手順16の"ラボの補助教材へのアクセス"に直接進むことができます。
root@global_zone:~# dladm create-vnic -l net0 vnic0 root@global_zone:~# ipadm create-ip vnic0 root@global_zone:~# ipadm create-addr -T static -a local=192.168.1.100/24 vnic0/addr
root@global_zone:~# ipadm show-addr vnic0 ADDROBJ TYPE STATE ADDR vnic0/addr static ok 192.168.1.100/24
hadoophol
ディレクトリを作成します。このディレクトリは、このラボの補助教材(スクリプト、入力ファイルなど)を格納するために使用します。root@global_zone:~# mkdir -p /usr/local/hadoophol
Bin
ディレクトリを作成します。このディレクトリに、Hadoopバイナリ・ファイルを格納します。root@global_zone:~# mkdir /usr/local/hadoophol/Bin
図4
/usr/local/hadoophol/Bin
にコピーします。root@global_zone:~# cp /export/home/oracle/Downloads/hadoop-1.2.1.tar.gz /usr/local/hadoophol/Bin/
注:デフォルトでは、このファイルは、ユーザーのDownloads
ディレクトリにダウンロードされます。
root@global_zone:~# mkdir /usr/local/hadoophol/Scripts
createzone
スクリプトを作成します。このスクリプトは、Oracle Solaris Zonesをセットアップするために使用します。root@global_zone:~# vi /usr/local/hadoophol/Scripts/createzone
#!/bin/ksh # FILENAME: createzone # Create a zone with a VNIC # Usage: # createzone <zone name> <VNIC> if [ $# != 2 ] then echo "Usage: createzone <zone name> <VNIC>" exit 1 fi ZONENAME=$1 VNICNAME=$2 zonecfg -z $ZONENAME > /dev/null 2>&1 << EOF create set autoboot=true set limitpriv=default,dtrace_proc,dtrace_user,sys_time set zonepath=/zones/$ZONENAME add fs set dir=/usr/local set special=/usr/local set type=lofs set options=[ro,nodevices] end add net set physical=$VNICNAME end verify exit EOF if [ $? == 0 ] ; then echo "Successfully created the $ZONENAME zone" else echo "Error: unable to create the $ZONENAME zone" exit 1 fi |
verifycluster
スクリプトを作成します。このスクリプトは、Hadoopクラスタのセットアップを検証するために使用します。root@global_zone:~# vi /usr/local/hadoophol/Scripts/verifycluster
#!/bin/ksh # FILENAME: verifycluster # Verify the hadoop cluster configuration # Usage: # verifycluster RET=1 for transaction in _; do for i in name-node sec-name-node data-node1 data-node2 data-node3 do cmd="zlogin $i ls /usr/local > /dev/null 2>&1 " eval $cmd || break 2 done for i in name-node sec-name-node data-node1 data-node2 data-node3 do cmd="zlogin $i ping name-node > /dev/null 2>&1" eval $cmd || break 2 done for i in name-node sec-name-node data-node1 data-node2 data-node3 do cmd="zlogin $i ping sec-name-node > /dev/null 2>&1" eval $cmd || break 2 done for i in name-node sec-name-node data-node1 data-node2 data-node3 do cmd="zlogin $i ping data-node1 > /dev/null 2>&1" eval $cmd || break 2 done for i in name-node sec-name-node data-node1 data-node2 data-node3 do cmd="zlogin $i ping data-node2 > /dev/null 2>&1" eval $cmd || break 2 done for i in name-node sec-name-node data-node1 data-node2 data-node3 do cmd="zlogin $i ping data-node3 > /dev/null 2>&1" eval $cmd || break 2 done RET=0 done if [ $RET == 0 ] ; then echo "The cluster is verified" else echo "Error: unable to verify the cluster" fi exit $RET |
Doc
ディレクトリを作成します。このディレクトリに、Hadoop入力ファイルを格納します。root@global_zone:~# mkdir /usr/local/hadoophol/Doc
pg20417.txt
)を/usr/local/hadoophol/Doc
ディレクトリにコピーします。root@global_zone:~# cp ~oracle/Downloads/pg20417.txt /usr/local/hadoophol/Doc/
root@global_zone:~# cd /usr/local/hadoophol
ls -l
コマンドを入力して、ディレクトリの内容を表示します。root@global_zone:~# ls -l total 9 drwxr-xr-x 2 root root 2 Jul 8 15:11 Bin drwxr-xr-x 2 root root 2 Jul 8 15:11 Doc drwxr-xr-x 2 root root 2 Jul 8 15:12 Scripts
以下のディレクトリ構造が表示されます。
Bin
—Hadoopバイナリの格納場所Doc
—Hadoop入力ファイルScripts
—ラボのスクリプト/usr/local
にコピーします。 root@global_zone:~# cp /usr/local/hadoophol/Bin/hadoop-1.2.1.tar.gz /usr/local
root@global_zone:~# cd /usr/local root@global_zone:~# tar -xvfz /usr/local/hadoop-1.2.1.tar.gz
hadoop
グループを作成します。 root@global_zone:~# groupadd hadoop
hadoop
ユーザーを追加します。 root@global_zone:~# useradd -m -g hadoop hadoop
root@global_zone:~# passwd hadoop
root@global_zone:~# ln -s /usr/local/hadoop-1.2.1 /usr/local/hadoop
hadoop
ユーザーに所有権を与えます。root@global_zone:~# chown -R hadoop:hadoop /usr/local/hadoop*
root@global_zone:~# chmod -R 755 /usr/local/hadoop*
この演習では、表1に示すHadoop構成ファイルを編集します。
表1:Hadoop構成ファイルファイル名 | 説明 |
---|---|
hadoop-env.sh |
Hadoopが使用する環境変数設定を指定します。 |
core-site.xml |
すべてのHadoopデーモンおよびクライアントに関連するパラメータを指定します。 |
mapred-site.xml |
MapReduceデーモンおよびクライアントが使用するパラメータを指定します。 |
masters |
セカンダリ・ネームノードを実行するマシンのリストが含まれます。 |
slaves |
デーモンのデータノードとTaskTrackerのペアを実行するマシン名のリストが含まれます。 |
これらの構成ファイルによるHadoopフレームワークの制御方法について詳しくは、http://hadoop.apache.org/docs/r1.2.1/api/org/apache/hadoop/conf/Configuration.htmlを参照してください。
conf
ディレクトリに変更します。 root@global_zone:~# cd /usr/local/hadoop/conf
hadoop-env.sh
スクリプトを変更します。注:クラスタ構成は、複数のゾーンで、Hadoopディレクトリ構造(/usr/local/hadoop
)を読取り専用ファイル・システムとして共有します。すべてのHadoopクラスタ・ノードは、そのログを個別のディレクトリに書き込めるようにする必要があります。各Oracle Solaris Zoneについては、/var/log/hadoop
ディレクトリが最適です。
root@global_zone:~# echo "export JAVA_HOME=/usr/java" >> hadoop-env.sh root@global_zone:~# echo "export HADOOP_LOG_DIR=/var/log/hadoop" >> hadoop-env.sh
masters
ファイルを編集し、localhost
エントリをリスト3に示す行で置き換えます。root@global_zone:~# vi masters
sec-name-node |
slaves
ファイルを編集し、localhost
エントリをリスト4に示す行で置き換えます。root@global_zone:~# vi slaves
data-node1 data-node2 data-node3 |
core-site.xml
ファイルを、リスト5のように編集します。root@global_zone:~# vi core-site.xml
注:fs.default.name
は、そのクラスタのネームノード・アドレス(プロトコル指定子、ホスト名、ポート)を示すURIです。各データノード・インスタンスは、このネームノードに登録され、このネームノードを通じてデータを提供します。さらに、データノードはネームノードにハートビートを送信します。これにより、各データノードが動作していることと、それがホストするブロック・レプリカが使用可能であることが確認されます。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>fs.default.name</name> <value>hdfs://name-node</value> </property> </configuration> |
hdfs-site.xml
ファイルを、リスト6のように編集します。root@global_zone:~# vi hdfs-site.xml
注:
dfs.data.dir
は、ローカル・ファイル・システム上の、データノード・インスタンスのデータが格納される場所のパスです。dfs.name.dir
は、ネームノード・インスタンスのローカル・ファイル・システム上の、ネームノード・メタデータが格納される場所のパスです。これは、ネームノード・インスタンスによって、その情報を検出するためにのみ使用されます。dfs.replication
は、ファイル・システムのデータの各ブロックに関するデフォルトのレプリケーション因子です(本番クラスタの場合は、通常、デフォルト値の3のままにします)。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>dfs.data.dir</name> <value>/hdfs/data/</value> </property> <property> <name>dfs.name.dir</name> <value>/hdfs/name/</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> </configuration> |
mapred-site.xml
ファイルを、リスト7のように編集します。root@global_zone:~# vi mapred-site.xml
注:mapred.job.tracker
は、JobTrackerのRPCアドレスを指定する、ホスト:ポートという文字列です。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>mapred.job.tracker</name> <value>name-node:8021</value> </property> </configuration> |
Hadoopゾーンのシステム・クロックがNetwork Time Protocol(NTP)を使用して同期していることを確認する必要があります。
注:専用の時刻同期ソースとして使用できるNTPサーバーを選択することを推奨します。これにより、マシンを計画保守のために停止しても、他のサービスに悪影響を及ぼすことがなくなります。
以下の例では、大域ゾーンがNTPサーバーとして構成されます。
root@global_zone:~# cd /etc/inet root@global_zone:~# cp ntp.server ntp.conf root@global_zone:~# chmod +w /etc/inet/ntp.conf root@global_zone:~# touch /var/ntp/ntp.drift
root@global_zone:~# vi /etc/inet/ntp.conf
server 127.127.1.0 prefer broadcast 224.0.1.1 ttl 4 enable auth monitor driftfile /var/ntp/ntp.drift statsdir /var/ntp/ntpstats/ filegen peerstats file peerstats type day enable filegen loopstats file loopstats type day enable filegen clockstats file clockstats type day enable keys /etc/inet/ntp.keys trustedkey 0 requestkey 0 controlkey 0 |
root@global_zone:~# svcadm enable ntp
root@global_zone:~# svcs -a | grep ntp online 16:04:15 svc:/network/ntp:default
Oracle Solarisは、データセンター導入に対するニーズの高まりに応じた、安全でスケーラブルな信頼性の高いインフラストラクチャを提供します。Project Crossbowとしても知られるOracle Solarisの強力なネットワーク・スタック・アーキテクチャによって、以下の機能が提供されます。
同じシステム上のOracle Solaris Zonesでは、たとえば1Gbの物理ネットワーク接続を使用するシステムと比較しても、非常に待機時間の短い、非常に優れたネットワークI/Oスループット(最大4倍の速さ)によるメリットが得られます。Hadoopクラスタの場合は、これにより、データノードがHDFSブロックを極めて迅速にレプリケートできます。
ネットワーク仮想化のベンチマークについて詳しくは、"How to Control Your Application's Network Bandwidth"を参照してください。
root@global_zone:~# dladm create-vnic -l net0 name_node1 root@global_zone:~# dladm create-vnic -l net0 secondary_name1 root@global_zone:~# dladm create-vnic -l net0 data_node1 root@global_zone:~# dladm create-vnic -l net0 data_node2 root@global_zone:~# dladm create-vnic -l net0 data_node3
root@global_zone:~# dladm show-vnic LINK OVER SPEED MACADDRESS MACADDRTYPE VID name_node1 net0 1000 2:8:20:c6:3e:f1 random 0 secondary_name1 net0 1000 2:8:20:b9:80:45 random 0 data_node1 net0 1000 2:8:20:30:1c:3a random 0 data_node2 net0 1000 2:8:20:a8:b1:16 random 0 data_node3 net0 1000 2:8:20:df:89:81 random 0
ここでは、5つのVNICがあることを確認できます。図5に、アーキテクチャ・レイアウトを示します。
図5
Oracle Solaris Zonesを使用すると、同じOS上のアプリケーションを相互に分離して、隔離された環境を作成できます。この環境では、ユーザーは、Oracle Solaris Zoneにログインして、そのゾーン内で、ゾーンの外部に影響を与えずに作業を行うことができます。さらに、Oracle Solaris Zonesは、外部からの攻撃や内部の悪意のあるプログラムに対しても安全です。各Oracle Solaris Zoneには、CPU、メモリ、ネットワーク、ストレージなどのリソースを割り当てることができる完全なリソース制御環境が含まれます。
システムを所有する管理者であれば、すべてのOracle Solaris Zonesを厳格に管理することもできますし、特定のOracle Solaris Zonesに関する権限を別の管理者に割り当てることもできます。この柔軟性により、同じOS内で、アプリケーションごとに、そのニーズに合った完全なコンピューティング環境を用意できます。
Oracle Solaris Zonesについて詳しくは、"Oracle Solaris 10ゾーンのOracle Solaris 11への迅速な移行"を参照してください。
このラボ用のHadoopノードはすべて、Oracle Solaris Zonesを使用してインストールされます。
root@global_zone:~# zfs create -o mountpoint=/zones rpool/zones
root@global_zone:~# zfs list rpool/zones NAME USED AVAIL REFER MOUNTPOINT rpool/zones 31K 51.4G 31K /zones
name-node
ゾーンを作成します。root@global_zone:~# zonecfg -z name-node Use 'create' to begin configuring a new zone. Zonecfg:name-node> create create: Using system default template 'SYSdefault' zonecfg:name-node> set autoboot=true zonecfg:name-node> set limitpriv=default,dtrace_proc,dtrace_user,sys_time zonecfg:name-node> set zonepath=/zones/name-node zonecfg:name-node> add fs zonecfg:name-node:fs> set dir=/usr/local zonecfg:name-node:fs> set special=/usr/local zonecfg:name-node:fs> set type=lofs zonecfg:name-node:fs> set options=[ro,nodevices] zonecfg:name-node:fs> end zonecfg:name-node> add net zonecfg:name-node:net> set physical=name_node1 zonecfg:name-node:net> end zonecfg:name-node> verify zonecfg:name-node> exit
(オプション)ゾーン構成ファイルを作成する次のスクリプトを使用して、name-node
ゾーンを作成できます。このスクリプトでは、引数として、たとえばcreatezone <zone name> <VNIC name>
のようにゾーン名とVNIC名を指定する必要があります。
root@global_zone:~# /usr/local/hadoophol/Scripts/createzone name-node name_node1
sec-name-node
ゾーンを作成します。root@global_zone:~# zonecfg -z sec-name-node Use 'create' to begin configuring a new zone. Zonecfg:sec-name-node> create create: Using system default template 'SYSdefault' zonecfg:sec-name-node> set autoboot=true zonecfg:sec-name-node> set limitpriv=default,dtrace_proc,dtrace_user,sys_time zonecfg:sec-name-node> set zonepath=/zones/sec-name-node zonecfg:sec-name-node> add fs zonecfg:sec-name-node:fs> set dir=/usr/local zonecfg:sec-name-node:fs> set special=/usr/local zonecfg:sec-name-node:fs> set type=lofs zonecfg:sec-name-node:fs> set options=[ro,nodevices] zonecfg:sec-name-node:fs> end zonecfg:sec-name-node> add net zonecfg:sec-name-node:net> set physical=secondary_name1 zonecfg:sec-name-node:net> end zonecfg:sec-name-node> verify zonecfg:sec-name-node> exit
(オプション)ゾーン構成ファイルを作成する次のスクリプトを使用して、sec-name-node
ゾーンを作成できます。このスクリプトでは、引数として、たとえばcreatezone <zone name> <VNIC name>
のようにゾーン名とVNIC名を指定する必要があります。
root@global_zone:~: /usr/local/hadoophol/Scripts/createzone sec-name-node secondary_name1
この演習では、Oracle Solarisに組み込まれているOracle Solaris Zones仮想化テクノロジーとZFSファイル・システムの統合を活用します。
表2に、作成するHadoopゾーン構成の概要を示します。
表2:ゾーンの概要機能 | ゾーン名 | ZFSマウント・ポイント | VNIC名 | IPアドレス |
---|---|---|---|---|
ネームノード | name-node |
/zones/name-node |
name_node1 |
192.168.1.1 |
セカンダリ・ネームノード | sec-name-node |
/zones/sec-name-node |
secondary_name1 |
192.168.1.2 |
データノード | data-node1 |
/zones/data-node1 |
data_node1 |
192.168.1.3 |
データノード | data-node2 |
/zones/data-node2 |
data_node2 |
192.168.1.4 |
データノード | data-node3 |
/zones/data-node3 |
data_node3 |
192.168.1.5 |
data-node1
ゾーンを作成します。root@global_zone:~# zonecfg -z data-node1 Use 'create' to begin configuring a new zone. zonecfg:data-node1> create create: Using system default template 'SYSdefault' zonecfg:data-node1> set autoboot=true zonecfg:data-node1> set limitpriv=default,dtrace_proc,dtrace_user,sys_time zonecfg:data-node1> set zonepath=/zones/data-node1 zonecfg:data-node1> add fs zonecfg:data-node1:fs> set dir=/usr/local zonecfg:data-node1:fs> set special=/usr/local zonecfg:data-node1:fs> set type=lofs zonecfg:data-node1:fs> set options=[ro,nodevices] zonecfg:data-node1:fs> end zonecfg:data-node1> add net zonecfg:data-node1:net> set physical=data_node1 zonecfg:data-node1:net> end zonecfg:data-node1> verify zonecfg:data-node1> commit zonecfg:data-node1> exit
(オプション)次のスクリプトを使用して、data-node1
ゾーンを作成できます。
root@global_zone:~# /usr/local/hadoophol/Scripts/createzone data-node1 data_node1
data-node2
ゾーンを作成します。root@global_zone:~# zonecfg -z data-node2 Use 'create' to begin configuring a new zone. zonecfg:data-node2> create create: Using system default template 'SYSdefault' zonecfg:data-node2> set autoboot=true zonecfg:data-node2> set limitpriv=default,dtrace_proc,dtrace_user,sys_time zonecfg:data-node2> set zonepath=/zones/data-node2 zonecfg:data-node2> add fs zonecfg:data-node2:fs> set dir=/usr/local zonecfg:data-node2:fs> set special=/usr/local zonecfg:data-node2:fs> set type=lofs zonecfg:data-node2:fs> set options=[ro,nodevices] zonecfg:data-node2:fs> end zonecfg:data-node2> add net zonecfg:data-node2:net> set physical=data_node2 zonecfg:data-node2:net> end zonecfg:data-node2> verify zonecfg:data-node2> commit zonecfg:data-node2> exit
(オプション)次のスクリプトを使用して、data-node2
ゾーンを作成できます。
root@global_zone:~# /usr/local/hadoophol/Scripts/createzone data-node2 data_node2
data-node3
ゾーンを作成します。root@global_zone:~# zonecfg -z data-node3 Use 'create' to begin configuring a new zone. zonecfg:data-node3> create create: Using system default template 'SYSdefault' zonecfg:data-node3> set autoboot=true zonecfg:data-node3> set limitpriv=default,dtrace_proc,dtrace_user,sys_time zonecfg:data-node3> set zonepath=/zones/data-node3 zonecfg:data-node3> add fs zonecfg:data-node3:fs> set dir=/usr/local zonecfg:data-node3:fs> set special=/usr/local zonecfg:data-node3:fs> set type=lofs zonecfg:data-node3:fs> set options=[ro,nodevices] zonecfg:data-node3:fs> end zonecfg:data-node3> add net zonecfg:data-node3:net> set physical=data_node3 zonecfg:data-node3:net> end zonecfg:data-node3> verify zonecfg:data-node3> commit zonecfg:data-node3> exit
(オプション)次のスクリプトを使用して、data-node3
ゾーンを作成できます。
root@global_zone:~# /usr/local/hadoophol/Scripts/createzone data-node3 data_node3
name-node
ゾーンをインストールします。後で、このゾーンをクローン化することにより、ゾーン作成時間を短縮します。root@global_zone:~# zoneadm -z name-node install The following ZFS file system(s) have been created: rpool/zones/name-node Progress being logged to /var/log/zones/zoneadm.20130106T134835Z.name-node.install Image: Preparing at /zones/name-node/root.
name-node
ゾーンを起動します。 root@global_zone:~# zoneadm -z name-node boot
root@global_zone:~# zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / solaris shared 1 name-node running /zones/name-node solaris excl - sec-name-node configured /zones/sec-name-node solaris excl - data-node1 configured /zones/data-node1 solaris excl - data-node2 configured /zones/data-node2 solaris excl - data-node3 configured /zones/data-node3 solaris excl
name-node
ゾーンにログインします。root@global_zone:~# zlogin -C name-node
name-node
ゾーンに関する以下の構成を使用して、ゾーン・ホスト情報を提供します。name-node
を使用します。name_node1
のIPアドレスが192.168.1.1、ネットマスクが255.255.255.0であることを確認します。/etc/hosts
を使用します。このため、ホスト名解決用のDNSはセットアップしません。「Do not configure DNS」を選択します。root
ユーザーとしてゾーンにログインします。name-node console login: root Password:
root@name-node:~# pkg install jdk-6
root@name-node:~# which java /usr/bin/java root@name-node:~# java -version java version "1.6.0_35" Java(TM) SE Runtime Environment (build 1.6.0_35-b10) Java HotSpot(TM) Client VM (build 20.10-b01, mixed mode)
name-node
ゾーン内にHadoopユーザーを作成します。root@name-node:~# groupadd hadoop root@name-node:~# useradd -m -g hadoop hadoop root@name-node:~# passwd hadoop
注:このパスワードは、演習1の手順22でユーザーのHadoopパスワードを設定したときに入力したものと同じである必要があります。
root@name-node:~# mkdir /var/log/hadoop root@name-node:~# chown hadoop:hadoop /var/log/hadoop
root@name-node:~# pkg install ntp
root@name-node:~# cd /etc/inet root@name-node:~# cp ntp.client ntp.conf root@name-node:~# chmod +w /etc/inet/ntp.conf root@name-node:~# touch /var/ntp/ntp.drift
root@name-node:~# vi /etc/inet/ntp.conf
注:このラボでは、大域ゾーンをタイム・サーバーとして使用するので、その名前(global-zone
など)を/etc/inet/ntp.conf
に追加します。
server global-zone prefer driftfile /var/ntp/ntp.drift statsdir /var/ntp/ntpstats/ filegen peerstats file peerstats type day enable filegen loopstats file loopstats type day enable |
/etc/hosts
に追加します。root@name-node:~# vi /etc/hosts
::1 localhost 127.0.0.1 localhost loghost 192.168.1.1 name-node 192.168.1.2 sec-name-node 192.168.1.3 data-node1 192.168.1.4 data-node2 192.168.1.5 data-node3 192.168.1.100 global-zone |
root@name-node:~# svcadm enable ntp
root@name-node:~# svcs ntp STATE STIME FMRI online 11:15:59 svc:/network/ntp:default
root@name-node:~# ntpq -p
name_node
ゾーンでのHadoopユーザー用のSSH鍵ベース認証をセットアップします。root@name-node:~# su - hadoop hadoop@name-node $ ssh-keygen -t dsa -P "" -f ~/.ssh/id_dsa hadoop@name-node $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$HOME/.profile
を編集して、ファイルの最後に、リスト11に示す行を追加します。hadoop@name-node $ vi $HOME/.profile
# Set JAVA_HOME export JAVA_HOME=/usr/java # Add Hadoop bin/ directory to PATH export PATH=$PATH:/usr/local/hadoop/bin |
ここで、次のコマンドを実行します。
hadoop@name-node $ source $HOME/.profile
hadoop@name-node:~$ hadoop version Hadoop 1.2.1 Subversion https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152 Compiled by mattf on Mon Jul 22 15:23:09 PDT 2013 From source with checksum 6923c86528809c4e7e6f493b6b413a9a
注:~.
を入力すると、name-node
コンソールが終了して、大域ゾーンに戻ります。
zonename
コマンドを使用すると、大域ゾーンに戻っていることを確認できます。
root@global_zone:~# zonename global
sec-name-node
ゾーンをname-node
のクローンとして作成します。root@global_zone:~# zoneadm -z name-node shutdown root@global_zone:~# zoneadm -z sec-name-node clone name-node
sec-name-node
ゾーンを起動します。root@global_zone:~# zoneadm -z sec-name-node boot root@global_zone:~# zlogin -C sec-name-node
sec-name-node
ゾーンの最終的な構成を実行します。注:すべてのゾーンで、タイムゾーン構成とrootパスワードが同じである必要があります。
図6
sec-name-node
を使用します。secondary_name1
を使用します。注:~.
を入力すると、sec-name-node
コンソールが終了して、大域ゾーンに戻ります。
data-node1
、data-node2
、data-node3
について、同様の手順を実行します。data-node1
については、以下のように構成します。root@global_zone:~# zoneadm -z data-node1 clone name-node root@global_zone:~# zoneadm -z data-node1 boot root@global_zone:~# zlogin -C data-node1
data-node1
を使用します。data_node1
を使用します。data-node2
については、以下のように構成します。root@global_zone:~# zoneadm -z data-node2 clone name-node root@global_zone:~# zoneadm -z data-node2 boot root@global_zone:~# zlogin -C data-node2
data-node2
を使用します。data_node2
を使用します。data-node3
については、以下のように構成します。root@global_zone:~# zoneadm -z data-node3 clone name-node root@global_zone:~# zoneadm -z data-node3 boot root@global_zone:~# zlogin -C data-node3
data-node3
を使用します。data_node3
を使用します。name_node
ゾーンを起動します。root@global_zone:~# zoneadm -z name-node boot
root@global_zone:~# zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / solaris shared 10 sec-name-node running /zones/sec-name-node solaris excl 12 data-node1 running /zones/data-node1 solaris excl 14 data-node2 running /zones/data-node2 solaris excl 16 data-node3 running /zones/data-node3 solaris excl 17 name-node running /zones/name-node solaris excl
name_node
から、SSHを使用してname-node
(つまり、それ自体)にログインします。root@global_zone:~# zlogin name-node root@name-node:~# su - hadoop hadoop@name-node $ ssh name-node The authenticity of host 'name-node (192.168.1.1)' can't be established. RSA key fingerprint is 04:93:a9:e0:b7:8c:d7:8b:51:b8:42:d7:9f:e1:80:ca. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'name-node,192.168.1.1' (RSA) to the list of known hosts.
sec-name-node
およびデータノード(data-node1
、data-node2
、data-node3
)へのログインを試みます。sec-name-node
およびデータノード内の/etc/hosts
ファイルを編集し、name-node
エントリを追加します。 root@global_zone:~# zlogin sec-name-node 'echo "192.168.1.1 name-node" >> /etc/hosts' root@global_zone:~# zlogin data-node1 'echo "192.168.1.1 name-node" >> /etc/hosts' root@global_zone:~# zlogin data-node2 'echo "192.168.1.1 name-node" >> /etc/hosts' root@global_zone:~# zlogin data-node3 'echo "192.168.1.1 name-node" >> /etc/hosts'
/etc/hosts
にリスト12のようなホスト・エントリがあることを確認します。# cat /etc/hosts
::1 localhost 127.0.0.1 localhost loghost 192.168.1.1 name-node 192.168.1.2 sec-name-node 192.168.1.3 data-node1 192.168.1.4 data-node2 192.168.1.5 data-node3 192.168.1.100 global-zone |
注:大域ゾーンをNTPサーバーとして使用している場合は、そのホスト名とIPアドレスも/etc/hosts
に追加する必要があります。
verifycluster
スクリプトを使用してクラスタを検証します。 root@global_zone:~# /usr/local/hadoophol/Scripts/verifycluster
クラスタが正常にセットアップされていれば、cluster is verified
というメッセージが表示されます。
注:verifycluster
スクリプトが失敗してエラー・メッセージが表示される場合は、手順12で説明したように各ゾーンの/etc/hosts
ファイルにすべてのゾーン名が含まれていることを確認してから、verifiability
スクリプトを再実行してください。
HDFSは、スケーラブルな分散ファイル・システムです。HDFSでは、メタデータがネームノードに格納されます。アプリケーション・データはデータノードに格納され、各データノードが、HDFS固有のブロック・プロトコルを使用してネットワーク経由でデータのブロックを提供します。このファイル・システムは、TCP/IPレイヤーを使用して通信します。クライアントは、リモート・プロシージャ・コール(RPC)を使用して相互に通信します。
データノードは、データを永続化させるためにRAIDなどのデータ保護メカニズムを使用しません。代わりに、ファイルの内容を複数のデータノードにレプリケートすることで、信頼性を向上させます。
hdfs-site.xml
ファイルで設定されるレプリケーション値がデフォルトの3の場合、データが3つのノードに格納されます。データノードは、相互に通信して、データを再調整し、コピーを移動し、データのレプリケーションを高レベルに維持します。図7は、レプリケーション値に基づいて各データ・ブロックが3つのデータノードにレプリケートされることを示しています。
HDFSを使用するメリットは、JobTrackerとTaskTrackerの間でのデータ認識です。JobTrackerは、データのある場所を認識することで、TaskTrackerに対してMapまたはReduceジョブをスケジュール設定します。例として、データ(x、y、z)を含むノードAとデータ(a、b、c)を含むノードBがあるとします。JobTrackerは、(a、b、c)に関するMapまたはReduceタスクを実行するようにノードBをスケジュール設定し、(x、y、z)に関するMapまたはReduceタスクを実行するようにノードAをスケジュール設定します。これにより、ネットワーク経由で送信されるトラフィックの総量が削減され、不要なデータ転送が抑制されます。このデータ認識は、ジョブが完了するまでの時間に大きな影響を与える可能性があり、データを多用するジョブを実行する場合は、その影響が実証されています。
Hadoop HDFSについて詳しくは、https://en.wikipedia.org/wiki/Hadoopを参照してください。
図7
root@global_zone:~# zlogin name-node root@name-node:~# mkdir -p /hdfs/name root@name-node:~# chown -R hadoop:hadoop /hdfs root@name-node:~# su - hadoop hadoop@name-node:$ /usr/local/hadoop/bin/hadoop namenode -format 13/10/13 09:10:52 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = name-node/192.168.1.1 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 1.2.1 STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152; compiled by 'mattf' on Mon Jul 22 15:23:09 PDT 2013 STARTUP_MSG: java = 1.6.0_35 ************************************************************/ hadoop@name-node:$ Re-format filesystem in /hdfs/name ? (Y or N) Y
data-node1
、data-node2
、data-node3
)で、HDFSブロックを格納するためのHadoopデータ・ディレクトリを作成します。 root@global_zone:~# zlogin data-node1 root@data-node1:~# mkdir -p /hdfs/data root@data-node1:~# chown -R hadoop:hadoop /hdfs root@global_zone:~# zlogin data-node2 root@data-node2:~# mkdir -p /hdfs/data root@data-node2:~# chown -R hadoop:hadoop /hdfs root@global_zone:~# zlogin data-node3 root@data-node3:~# mkdir -p /hdfs/data root@data-node3:~# chown -R hadoop:hadoop /hdfs
表3で、起動スクリプトについて説明します。
表3:起動スクリプトファイル名 | 説明 |
---|---|
start-dfs.sh |
HDFSデーモン、ネームノード、およびデータノードを起動します。これは、start-mapred.sh の前に使用します。 |
stop-dfs.sh |
Hadoop DFSデーモンを停止します。 |
start-mapred.sh |
Hadoop MapReduceデーモン、JobTracker、およびTaskTrackerを起動します。 |
stop-mapred.sh |
Hadoop MapReduceデーモンを停止します。 |
name-node
ゾーンから、次のコマンドを使用して、Hadoop DFSデーモン、ネームノード、およびデータノードを起動します。root@global_zone:~# zlogin name-node root@name-node:~# su - hadoop hadoop@name-node:$ start-dfs.sh starting namenode, logging to /var/log/hadoop/hadoop--namenode-name-node.out data-node2: starting datanode, logging to /var/log/hadoop/hadoop-hadoop-datanode-data-node2.out data-node1: starting datanode, logging to /var/log/hadoop/hadoop-hadoop-datanode-data-node1.out data-node3: starting datanode, logging to /var/log/hadoop/hadoop-hadoop-datanode-data-node3.out sec-name-node: starting secondarynamenode, logging to /var/log/hadoop/hadoop-hadoop-secondarynamenode-sec-name-node.out
hadoop@name-node:$ start-mapred.sh starting jobtracker, logging to /var/log/hadoop/hadoop--jobtracker-name-node.out data-node1: starting tasktracker, logging to /var/log/hadoop/hadoop-hadoop-tasktracker-data-node1.out data-node3: starting tasktracker, logging to /var/log/hadoop/hadoop-hadoop-tasktracker-data-node3.out data-node2: starting tasktracker, logging to /var/log/hadoop/hadoop-hadoop-tasktracker-data-node2.out
hadoop@name-node:$ hadoop dfsadmin -report Configured Capacity: 171455269888 (159.68 GB) Present Capacity: 169711053357 (158.06 GB) DFS Remaining: 169711028736 (158.06 GB) DFS Used: 24621 (24.04 KB) DFS Used%: 0% Under replicated blocks: 0 Blocks with corrupt replicas: 0 Missing blocks: 0 ------------------------------------------------- Datanodes available: 3 (3 total, 0 dead) ...
3つのデータノードが利用可能であることが示されるはずです。
注:同じ情報を、ネームノードのWebステータス・ページ(http://<NameNode IP address>:50070/dfshealth.jsp
)でも確認できます(図8を参照)。ネームノードのIPアドレスは、192.168.1.1です。
図8
MapReduceは、コンピュータのクラスタを使用して膨大なデータセットの全体にわたるパラレル化問題に対処するためのフレームワークです。
MapReduceの基本的な考え方は、2つの関数を使用してソースからデータを取得するというものです。Map()
関数を使用してから、Reduce()
関数を使用してコンピュータのクラスタ全体にわたるデータを処理します。具体的には、Map()
がデータセットのすべてのメンバーに関数を適用し、結果セットを通知します。Reduce()
は、この結果セットを照合して解決します。
Map()
とReduce()
は、複数のシステムで並行して実行できます。
MapReduceについて詳しくは、http://en.wikipedia.org/wiki/MapReduceを参照してください。
このラボでは、例として、テキスト・ファイルを読み取って単語の出現回数をカウントするWordCountを使用します。入力と出力はテキスト・ファイルで構成され、テキスト・ファイルの各行には、単語とその単語の出現回数がタブで区切って示されます。WordCountについて詳しくは、http://wiki.apache.org/hadoop/WordCountを参照してください。
hadoop@name-node:$ hadoop fs -mkdir /input-data
hadoop@name-node:$ hadoop dfs -ls / Found 1 items drwxr-xr-x - hadoop supergroup 0 2013-10-13 23:45 /input-data
pg20417.txt
ファイルをHDFSにコピーします。注:Oracle OpenWorld参加者の場合は、pg20417.txt
ファイルを/usr/local/hadoophol/Doc
ディレクトリから入手できます。
hadoop@name-node:$ hadoop dfs -copyFromLocal /usr/local/hadoophol/Doc/pg20417.txt /input-data
hadoop@name-node:$ hadoop dfs -ls /input-data Found 1 items -rw-r--r-- 3 hadoop supergroup 674570 2013-10-13 10:20 /input-data/pg20417.txt
hadoop@name-node:$ hadoop fs -mkdir /output-data
hadoop@name-node:$ hadoop jar /usr/local/hadoop/hadoop-examples-1.2.1.jar wordcount /input-data/pg20417.txt /output-data/output1 13/10/13 10:23:08 INFO input.FileInputFormat: Total input paths to process : 1 13/10/13 10:23:08 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 13/10/13 10:23:08 WARN snappy.LoadSnappy: Snappy native library not loaded 13/10/13 10:23:09 INFO mapred.JobClient: Running job: job_201310130918_0010 13/10/13 10:23:10 INFO mapred.JobClient: map 0% reduce 0% 13/10/13 10:23:19 INFO mapred.JobClient: map 100% reduce 0% 13/10/13 10:23:29 INFO mapred.JobClient: map 100% reduce 33% 13/10/13 10:23:31 INFO mapred.JobClient: map 100% reduce 100% 13/10/13 10:23:34 INFO mapred.JobClient: Job complete: job_201310130918_0010 13/10/13 10:23:34 INFO mapred.JobClient: Counters: 26
このプログラムをクラスタで実行すると、完了するまで約60秒かかります。
入力ディレクトリ(上記のコマンドラインのinput-data
)にあるすべてのファイルが読み取られ、入力の単語の出現回数が出力ディレクトリ(output-data/output1
と呼ばれる)に書き込まれます。
hadoop@name-node:$ hadoop dfs -ls /output-data/output1 Found 3 items -rw-r--r-- 3 hadoop supergroup 0 2013-10-13 10:30 /output-data/output1/_SUCCESS drwxr-xr-x - hadoop supergroup 0 2013-10-13 10:30 /output-data/output1/_logs -rw-r--r-- 3 hadoop supergroup 196192 2013-10-13 10:30 /output-data/output1/part-r-00000
Oracle Solaris 11によって、透過的な暗号化機能がZFSに追加されます。すべてのデータおよびファイル・システム・メタデータ(所有権、アクセス制御リスト、割当て制限情報など)が、ZFSプールに永続的に格納されるときに暗号化されます。
ZFSプールは、暗号化されたZFSデータセットと暗号化されていないZFSデータセット(ファイル・システムおよびZVOL)の混在をサポートできます。このデータ暗号化は、アプリケーションや他のOracle Solarisファイル・サービス(NFS、CIFSなど)に対しては完全に透過的です。暗号化はZFSの最上位機能であるため、圧縮、暗号化、および重複排除を同時にサポートできます。暗号化されたデータセットの暗号鍵の管理は、ユーザーとOracle Solaris Zonesのいずれかまたは両方に委任できます。Oracle SolarisとZFS暗号化により、保管データを保護するための非常に柔軟なシステムが実現されます。また、これには、アプリケーションの変更や動作確認も不要です。
ZFS暗号化について詳しくは、"How to Manage ZFS Data Encryption"を参照してください。
出力データには機密情報が含まれる場合があるため、ZFS暗号化を使用して出力データを保護します。
注:8文字以上のパスフレーズを指定する必要があります。
root@name-node:~# zfs create -o encryption=on rpool/export/output Enter passphrase for 'rpool/export/output': Enter again:
root@name-node:~# zfs get all rpool/export/output | grep encry rpool/export/output encryption on local
root@name-node:~# chown hadoop:hadoop /export/output
root@name-node:~# su - hadoop Oracle Corporation SunOS 5.11 11.1 September 2012 hadoop@name-node:$ hadoop dfs -getmerge /output-data/output1 /export/output
hadoop@name-node:$ head /export/output/output1 "A 2 "Alpha 1 "Alpha," 1 "An 2 "And 1 "BOILING" 2 "Batesian" 1 "Beta 2
root@name-node:~# zfs key -u rpool/export/output
コマンドが正常に実行されると、データセットにアクセスできなくなり、データセットがアンマウントされます。
root@name-node:~# zfs mount rpool/export/output Enter passphrase for 'rpool/export/output':
パスフレーズを使用することにより、パスフレーズを知っているユーザーだけが出力ファイルを参照できるという状態を確保できます。
Oracle Solaris DTraceは、体系的な問題をリアルタイムでトラブルシューティングするための、包括的で高度なトレース・ツールです。管理者、インテグレーター、および開発者は、アプリケーションとオペレーティング・システム自体の両方を含め、DTraceを使って稼働中の本番システムでパフォーマンスの問題を動的かつ安全に監視できます。
DTraceを使用すると、システムを調査してその動作を把握し、多数のソフトウェア・レイヤーにまたがる問題を突き止めて、異常な動作の原因を特定できます。DTraceによって以下のことが可能になり、メモリ使用量やCPU時間などの全体的な概要情報であれ、実行された特定の関数コールなどの詳細情報であれ、運用状況を把握できるようになります。これは、データセンターでは実現されていなかったものです。
DTraceについて詳しくは、http://www.oracle.com/technetwork/server-storage/solaris11/technologies/dtrace-1930301.htmlを参照してください。
hadoop
ユーザーとしてname-node
にログインします。hadoop@name-node:$ hadoop jar /usr/local/hadoop/hadoop-examples-1.2.1.jar wordcount /input-data/pg20417.txt /output-data/output2
ターミナル・ウィンドウで、次のDTraceコマンドを実行します。
root@global-zone:~# dtrace -n 'proc:::exec-success/strstr(zonename,"name-node")>0/ { trace(curpsinfo->pr_psargs); }' dtrace: description 'proc:::exec-success' matched 1 probe CPU ID FUNCTION:NAME 0 4473 exec_common:exec-success /usr/bin/env bash /usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/hadoop-exa 0 4473 exec_common:exec-success bash /usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/hadoop-examples-1.1.2.j 0 4473 exec_common:exec-success dirname /usr/local/hadoop-1.1.2/libexec/-- 0 4473 exec_common:exec-success dirname /usr/local/hadoop-1.1.2/libexec/-- 0 4473 exec_common:exec-success sed -e s/ /_/g 1 4473 exec_common:exec-success dirname /usr/local/hadoop/bin/hadoop 1 4473 exec_common:exec-success dirname -- /usr/local/hadoop/bin/../libexec/hadoop-config.sh 1 4473 exec_common:exec-success basename -- /usr/local/hadoop/bin/../libexec/hadoop-config.sh 1 4473 exec_common:exec-success basename /usr/local/hadoop-1.1.2/libexec/-- 1 4473 exec_common:exec-success uname 1 4473 exec_common:exec-success /usr/java/bin/java -Xmx32m org.apache.hadoop.util.PlatformName 1 4473 exec_common:exec-success /usr/java/bin/java -Xmx32m org.apache.hadoop.util.PlatformName 0 4473 exec_common:exec-success /usr/java/bin/java -Dproc_jar -Xmx1000m -Dhadoop.log.dir=/var/log/hadoop -Dhado 0 4473 exec_common:exec-success /usr/java/bin/java -Dproc_jar -Xmx1000m -Dhadoop.log.dir=/var/log/hadoop -Dhado ^C
注:DTrace出力を表示するには、[Ctrl]+[c]キーを押します。
注:MapReduceジョブが完了したら、異なる出力ディレクトリ(/output-data/output3
など)を使用して別のジョブを実行できます。
例:
hadoop@name-node:$ hadoop jar /usr/local/hadoop/hadoop-examples-1.2.1.jar wordcount /input-data/pg20417.txt /output-data/output3
root@global-zone:~# dtrace -n 'syscall::write:entry/strstr(zonename,"name-node")>0/ {@write[fds[arg0].fi_pathname]=count();}' dtrace: description 'syscall::write:entry' matched 1 probe ^C /zones/name-node/root/tmp/hadoop-hadoop/mapred/local/jobTracker/.job_201307181457_0007.xml.crc 1 /zones/name-node/root/var/log/hadoop/history/.job_201307181457_0007_conf.xml.crc 1 /zones/name-node/root/dev/pts/3 5 /zones/name-node/root/var/log/hadoop/job_201307181457_0007_conf.xml 6 /zones/name-node/root/tmp/hadoop-hadoop/mapred/local/jobTracker/job_201307181457_0007.xml 8 /zones/name-node/root/var/log/hadoop/history/job_201307181457_0007_conf.xml 11 /zones/name-node/root/var/log/hadoop/hadoop--jobtracker-name-node.log 13 /zones/name-node/root/hdfs/name/current/edits.new 25 /zones/name-node/root/var/log/hadoop/hadoop--namenode-name-node.log 45 /zones/name-node/root/dev/poll 207 <unknown> 3131655
注:DTrace出力を表示するには、[Ctrl]+[c]キーを押します。
root@global-zone:~# dtrace -n 'proc:::exec-success/strstr(zonename,"data-node1")>0/ { trace(curpsinfo->pr_psargs); }' dtrace: description 'proc:::exec-success' matched 1 probe CPU ID FUNCTION:NAME 0 8833 exec_common:exec-success dirname /usr/local/hadoop/bin/hadoop 0 8833 exec_common:exec-success dirname /usr/local/hadoop/libexec/-- 0 8833 exec_common:exec-success sed -e s/ /_/g 1 8833 exec_common:exec-success dirname -- /usr/local/hadoop/bin/../libexec/hadoop-config.sh 2 8833 exec_common:exec-success basename /usr/local/hadoop/libexec/-- 2 8833 exec_common:exec-success /usr/java/bin/java -Xmx32m org.apache.hadoop.util.PlatformName 2 8833 exec_common:exec-success /usr/java/bin/java -Xmx32m org.apache.hadoop.util.PlatformName 3 8833 exec_common:exec-success /usr/bin/env bash /usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/hadoop-exa 3 8833 exec_common:exec-success bash /usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/hadoop-examples-1.0.4.j 3 8833 exec_common:exec-success basename -- /usr/local/hadoop/bin/../libexec/hadoop-config.sh 3 8833 exec_common:exec-success dirname /usr/local/hadoop/libexec/-- 3 8833 exec_common:exec-success uname 3 8833 exec_common:exec-success /usr/java/bin/java -Dproc_jar -Xmx1000m -Dhadoop.log.dir=/var/log/hadoop -Dhado 3 8833 exec_common:exec-success /usr/java/bin/java -Dproc_jar -Xmx1000m -Dhadoop.log.dir=/var/log/hadoop -Dhado ^C
(出力は222行でしたが、見やすくするために行を減らしています。)
root@global-zone:~# dtrace -n 'syscall::write:entry/strstr(zonename,"data-node1")>0/ {@write[fds[arg0].fi_pathname]=count();}' dtrace: description 'syscall::write:entry' matched 1 probe ^C /zones/data-node1/root/hdfs/data/blocksBeingWritten/blk_-5404946161781239203 1 /zones/data-node1/root/hdfs/data/blocksBeingWritten/blk_-5404946161781239203_1103.meta 1 /zones/data-node1/root/hdfs/data/blocksBeingWritten/blk_-6136035696057459536 1 /zones/data-node1/root/hdfs/data/blocksBeingWritten/blk_-6136035696057459536_1102.meta 1 /zones/data-node1/root/hdfs/data/blocksBeingWritten/blk_-8420966433041064066 1 /zones/data-node1/root/hdfs/data/blocksBeingWritten/blk_-8420966433041064066_1105.meta 1 /zones/data-node1/root/hdfs/data/blocksBeingWritten/blk_1792925233420187481 1 /zones/data-node1/root/hdfs/data/blocksBeingWritten/blk_1792925233420187481_1101.meta 1 /zones/data-node1/root/hdfs/data/blocksBeingWritten/blk_4108435250688953064 1 /zones/data-node1/root/hdfs/data/blocksBeingWritten/blk_4108435250688953064_1106.meta 1 /zones/data-node1/root/hdfs/data/blocksBeingWritten/blk_8503732348705847964
root@global-zone:~# dtrace -n 'syscall::write:entry / ( strstr(zonename,"data-node1")!=0 || strstr(zonename,"data-node2")!=0 || strstr(zonename,"data-node3")!=0 ) && strstr(fds[arg0].fi_pathname,"hdfs")!=0 && strstr(fds[arg0].fi_pathname,"blocksBeingWritten")>0/ { @write[fds[arg0].fi_pathname]=sum(arg2); }' ^C
このハンズオン・ラボでは、Oracle Solaris Zones、ZFS、ネットワーク仮想化、DTraceなどのOracle Solaris 11のテクノロジーを使用してHadoopクラスタをセットアップする方法について学習しました。
Orgad Kimchiは、Oracle(以前はSun Microsystems)のISVエンジニアリング・チームのPrincipal Software Engineerです。6年間にわたり、仮想化、ビッグ・データ、およびクラウド・コンピューティング・テクノロジーを専門としてきました。
リビジョン1.0、2013年10月21日 |