[[Hadoop]] #contents * Hadoop/VMware [#eb81870e] Hadoopの環境をVMwareイメージ(OS:CentOS5.5-x86_64)上に作成し[[Sourcefoge.jp>http://sourceforge.jp/projects/bc-hadoop-dev/releases/51679/note]]にイメージを公開しています。その作成手順について記載しています。VMware Player3.1.4 build-385536で作成しています。VMwareイメージのバージョンとしてはWorkstation6.5-7.xです。イメージを動作させるために対応したバージョンのVMwarePlayerなどのソフトウェアが必要です。VMware Playerは[[こちら>http://www.vmware.com/jp/products/player/overview.html]]からダウンロードすることができます。イメージが圧縮ファイルを解凍すると約3.1GBの容量になります。 ~VMware playerの詳細については[[VMware Player に関する FAQ>http://www.vmware.com/jp/products/player/faqs.html]]をご覧ください。 ~ :Note|本手順ではHadoopテスト環境を構築しHDFS、MapReduceのローカルモード、擬似分散モードでの動作確認をする事を主な目的としています。セキュリティ設定への考慮など不足している箇所がありますのでご了承ください。~ * Hadoop について [#u4c3fd3b] Hadoopは大規模分散システムのOpen Source Projectの1つです。主な特徴はHDFS、MapReduceがあります。HDFSはブロックサイズがデフォルトで64MBと非常に大きく(ex3のデフォルトブロックサイズは4096バイト)、テラバイトからペタバイトのデータサイズを扱う分散ファイルシステムです。MapReduceは並列分散処理のためのフレームワークです。HDFS、MapReduceにはMasterサーバとSlaveサーバが存在しそれぞれにノードがあります。またHDFSではデータをメタデータで管理し実データの複製管理などを行っています。MapReduceではjobの並列分散管理などを行っています。~ ~ またMapReduceはMap処理、Shuffle&Sort処理、Reduce処理に分けることができます。それぞれの処理の大まかな役割は以下のとおりです順に入力処理、中間処理、出力処理です。 ~ ただし大量の小さいファイルの書き込みやファイルの更新には向いていません。この点についてはHBase(Hadoopの関連プロジェクト)や従来のRDBMSと組み合わせることで補うことも可能です。詳細については[[hadoop.apache.org>http://hadoop.apache.org/]]や、[[HBase>http://hbase.apache.org/]]をご覧ください。~ ~ HadoopのソフトウェアはCommon、HDFS、MapReduceから構成されています。CommonはHadoopプロジェクトのサポートユーティリティです。HDFS、MapReduceの役割とそれぞれのMasterサーバ、Slaveサーバの各ノード名称を以下に記載します。~ |名称|役割|Master|Slave|h |HDFS|Hadoop Distributed File System の略称、分散、複製の機能を備えた大規模ファイルシステム|NameNode|DataNode| |MapReduce|大規模分散システム上でのプロセス並列化のフレームワーク|JobTracker|TaskTracker| ~ HDFS、MapReduceそれぞれのノードについての名称と概略を以下に記載します。~ - HDFS~ |名称|概略|Master or Slave|h |NameNode|DataNode上の情報をメタデータで管理、複製の配置や整合性の管理|Master| |DataNode|実データの保存、状態の報告|Slave| |Secondarynamenode|障害対策の1つ、一定の間隔でNamenodeのバックアップを取得|Master| ~ :Note|本手順では実行していませんがHadoopではMasterが単一障害点になるため、その対策として一定の間隔でNamenodeのバックアップを取るためのサービスSecondarynamenodeがあります。~ ~ - MapReduce~ |名称|概略|Master or Slave|h |JobTracker|jobの受付、処理の割当、管理|Master| |TaskTracker|JobTrackerから割当てられた処理を実行するワーカー|Slave| ~ それぞれの詳細については[[Common>http://hadoop.apache.org/common/]]、[[HDFS>http://hadoop.apache.org/hdfs/]]、[[MapReduce>http://hadoop.apache.org/mapreduce/]]をご覧ください。~ ~ また動作モードとしてローカルモード、擬似分散モード(pseudo)、完全分散モードがあります。ここではローカルモードと擬似分散モードについて記載しています。それぞれの概略は以下のとおりです。~ |名称|概略|h |ローカルモード|1台での実行、Hadoopとしての機能は使わずJavaの機能を使用| |擬似分散モード|1台でMasterとSlaveの実行| |完全分散モード|複数台でMasterとSlaveの実行| 各動作モードの詳細については[[Getting Started>http://hadoop.apache.org/common/docs/current/]]をご覧ください。 ** CDHについて [#vce83e19] CDHはCloudera社提供されている『Cloudera Distribution for apache Hadoop』の略称です。CDHではHadoopとHadoopの関連プロジェクト(以降、コンポーネントと記載)であるHbase、Pig、Hiveなどとの整合性をある程度とりリリースされています。このためHadoopおよびコンポーネントの導入が比較的容易になっています。~ ~ 本手順ではCDH3beta4(2011年4月1日当時の最新)で記載しています。2011年4月14日にCDH3がリリースされました。詳細については[[CDH3+Installation>https://docs.cloudera.com/display/DOC/CDH3+Installation]]、[[Distribution Details>http://www.cloudera.com/hadoop-details/]]をご覧ください。 *** Hadoopのバージョンについて [#c390c224] CDH3beta4に含まれるhadoop-0.20.2を使用しています。また[[hadoop.apache.org>http://hadoop.apache.org/]]で公開されているHadoopの最新版は0.21.0です。0.20.xと0.21.xでは機能やAPIなどに変更があります。詳細については[[release 0.21.0 available >http://hadoop.apache.org/common/releases.html#23+August%2C+2010%3A+release+0.21.0+available]]をご覧ください。 ~ * Hadoop/VMwareについて[#uab5ce76] VMware Player3.1.4 build-385536の仮想マシン上にCentOS5.5-x86_64をインストールし設定を行います。CentOSのインストール後CDH3beta4のリポジトリを追加しHadoopと主要コンポーネントをインストール、設定を行い、ローカルモードと擬似分散モードでの動作確認をしています。 :Note|本手順でのHadoopと主要コンポーネントとはCommon、HDFSとMapReduceのコンポーネントを指しています。 また今回は使用していませんが、Cloudera社からVMwareイメージも公開されています。詳細については[[こちら>>http://www.cloudera.com/downloads/]]をご覧ください。 * VMware Settings [#o828e939] ** VMware Hardware Settings [#m484df54] VMware ハードウェア構成は以下のように設定しています。~ CPU:2 Memory:1GB HDD:20GB(split 2GB、事前にGB使用しています。) Network:bridge 主なアカウント情報を以下に記載します。~ ユーザー :beat パスワード :beatcraft rootパスワード :beatcraft ** Install Centos5.5-x86_64 [#w03f2248] - インストール設定~ このVMイメージではほぼデフォルト設定のままインストールしています。設定した項目は以下のものがあります。 日本語、日本語キーボードを選択しネットワークはDHCP、IPv4enable、IPv6disableにしています。またインストール元をHTTPに設定します。『web site name:』に『ftp.riken.jp』、『CentOS directory:』に『Linux/centos/5.5/os/x86_64』を入力します。(他の配布サイトでも問題ありません)また、『USE Text Mode』を選択し適宜設定します。~ - rootのパスワードは『beatcraft』としています。~ - インストールパッケージ~ インストールパッケージはSERVERを選択しカスタムをし、以下のパッケージを選択しています。~ 『Base、DevelopmentTools、Editors、FTP Server、Legacy Network Server、Network Servers、Server Configuration Tools、Text-based Internet、Web Server、Windows File Server』 ~ Firewall SELinux は共にDisableに設定しています。その他はHDDパーティニング等はデフォルトインストールにしています。 ** Update [#t9aee4b5] インストール完了後、アップデートを実行します。~ # yum install yum-fastestmirror (導入されていますがリポジトリのチェックのため実行しています。) ...<略> Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: www.ftp.ne.jp * extras: www.ftp.ne.jp * updates: www.ftp.ne.jp # yum update ** ntpの設定 [#l6d47b36] 標準インストールで日本時間を選んでも正しい時刻を取得できていないことがあります。まず時刻を確認し日本ntpサーバと時刻あわせをします。またその情報をハードウェアに書き込みntpの設定に日本のntpサーバが含まれていない場合追加します。また起動時にntpdが起動するように設定しています。~ # yum install ntp (注:ntpがインストールされていない場合のみ実行します) # date # ntpdate -s ntp.nict.jp # clock -w ntp/step-tickersに以下の3つの国内ntpサーバを追加します。~ # vi /etc/ntp/step-tickers ntp.nict.jp ntp.jst.mfeed.ad.jp ntp.ring.gr.jp 完了後ntpを再起動し、時刻の確認をします。あわせてサービス登録をしておきます。~ # /etc/init.d/ntpd restart # date # chkconfig ntpd on :Note|標準インストールで日本時間を選んでも正しい時刻を取得していないことがあります。その際にファイルの時間が未来を指しているなどの問題がでるのを防ぐためにntpを設定しています。~ ** 環境変数設定 [#dbd80223] 予め/etc/bashrcにJAVA_HOME、HADOOP_HOMEとPATHに/sbin、/usr/sbinを追加します。/sbinと/usr/sbinにPATHを追加しているのはコマンド(ifconfig、alternatives)などのタイプ数を減らすためです。~ # tail -n 5 /etc/bashrc fi # vim:ts=4:sw=4 export JAVA_HOME=/usr/java/latest export HADOOP_HOME=/usr/lib/hadoop export PATH=/sbin:/usr/sbin:$HADOOP_HOME/bin:$PATH :Note|JAVAの実行時およびHadooのサービス起動時および実行時にエラーが発生した場合はJAVA_HOME、HADOOP_HOMEが正しく設定されているかの確認をしてください。~ ** ユーザ追加とvisudo設定 [#x6bdd6f9] 一般ユーザにbeatとhadoopを追加します。beatは一般ユーザ用、hadoopはCDHインストール時にhdfsというユーザ名に変更されます。hdfs(hadoop)ユーザはHadoopでの作業用として作成しています。またhadoopはpassword無しの設定をしています。ご使用の環境に合わせて適宜変更してください。 - beatユーザの作成~ useraddコマンドとpasswdコマンドでbeatユーザ、パスワードbeatcraftを作成します。~ # useradd beat # passwd beat - visudo設定~ sudoコマンドを実行できるユーザにbeatとhdfsユーザを追加します。~ # visudo ...<略> ## Allow root to run any commands anywhere root ALL=(ALL) ALL beat ALL=(ALL) ALL hdfs ALL=(ALL) ALL - hadoopユーザの作成~ useraddコマンドとpasswd -d コマンドでhadoopユーザ、パスワードなしを追加します。~ # useradd hadoop # passwd -d hadoop beatユーザからhadoopユーザへの切り替え $ su hadoop ** SSH設定 [#d3cb99e0] 本VMwareイメージではrootでのログイン許可をしています。またhadoopユーザにて鍵作成をしていますが、空PASSWORDも許可しています。ご使用の環境に合わせて適宜設定を変更してください。 - hadoopユーザの鍵作成~ ssh-keygenコマンドで鍵タイプrsa、パスワードなしのrsa鍵を/home/hadoop/.ssh/id_rsaに作成します。~ $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa Generating public/private rsa key pair. Created directory '/home/hadoop/.ssh'. Your identification has been saved in /home/hadoop/.ssh/id_rsa. Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub. The key fingerprint is: xx:xx:xx:zz:zz:<略>:xx hadoop@localhost.localdomain $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys - sshd設定~ 擬似分散モードや別マシンからのログインするためにsshd_configの設定をしsshdを再起動します。sshd_configでは rootでのログイン許可、RSA認証許可、公開鍵認証許可、空パスワード許可、パスワード認証許可としています。お使いの環境に合わせて 適宜設定を変更してください。~ # vi /etc/ssh/sshd_config #LoginGraceTime 2m PermitRootLogin yes #StrictModes yes #MaxAuthTries 6 RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #RhostsRSAAuthentication no # similar for protocol version 2 #HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # RhostsRSAAuthentication and HostbasedAuthentication #IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes # To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes PermitEmptyPasswords yes PasswordAuthentication yes **JDKのインストール [#l36907f3] JDKのインストールをします。以下のサイトから最新版JDK (jdk-6u24-linux-x64-rpm.bin)をダウンロードしここでは/home/beat/jdkディレクトリに配置しました。またインストールの際はrootで実行します。~ http://www.oracle.com/technetwork/java/javase/downloads/index.html~ $ mkdir jdk $ cd jdk/ $ ls jdk-6u24-linux-x64-rpm.bin $ chmod +x jdk-6u24-linux-x64-rpm.bin $ su パスワード: # ./jdk-6u24-linux-x64-rpm.bin Unpacking... Checksumming... Extracting... <略> # ls -l /usr/java/ 合計 4 lrwxrwxrwx 1 root root 16 4月 12 13:03 default -> /usr/java/latest drwxr-xr-x 9 root root 4096 4月 12 13:03 jdk1.6.0_24 lrwxrwxrwx 1 root root 21 4月 12 13:03 latest -> /usr/java/jdk1.6.0_24 /etc/bashrcで設定したJAVA_HOMEとディレクトリ位置があっているかを確認してください。~ # tail -n 5 /etc/bashrc fi # vim:ts=4:sw=4 export JAVA_HOME=/usr/java/latest export HADOOP_HOME=/usr/lib/hadoop export PATH=/sbin:/usr/sbin:$HADOOP_HOME/bin:$PATH ** 不要なサービスの停止と起動について [#u4fe3462] 不要なサービスの停止をします。起動しているサービス一覧をみるには chkconfig --listを使用します。本VMwareイメージではrunlevel3で起動しています。ご使用の環境に合わせて不必要なサービスがあれば停止もしくは起動をしてください。~ # chkconfig --list NetworkManager 0:off 1:off 2:off 3:off 4:off 5:off 6:off acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off anacron 0:off 1:off 2:on 3:on 4:on 5:on 6:off atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off ...<略> sendmail 0:off 1:off 2:on 3:off 4:on 5:on 6:off ...<略> サービスの停止、起動の書式については chkconfig --level <name> <off|on>で実行してください。chkconfigだけで実行するとオプションの説明メッセージが表示されます、またはman chkconfigを参照してください。ここではiptablesをoffに設定します。~ - サービスの確認~ # chkconfig --list ...<略> iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off - iptablesをoffに設定~ # chkconfig iptables off - 再度サービスの確認~ # chkconfig --list iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off 以上でCentOS上での基本的な設定は完了です。~ ** CentOS-5.5-x86_64設定の制限事項 [#idc0d456] - 本VMwareイメージでは意識してセキュリティに関する事象を除外しています(sshdのrootログインなど)。 * CDH3beta4 [#x584f3d8] ** CDH3beta4のインストール [#n16b2d43] CDH3beta4のリポジトリを追加しCDHを導入します。以下のようにリポジトリを追加します。~ # vi /etc/yum.repos.d/cloudera-cdh3.repo [cloudera-cdh3] name=Cloudera's Distribution for Hadoop, Version 3 mirrorlist=http://archive.cloudera.com/redhat/cdh/3/mirrors gpgkey = http://archive.cloudera.com/redhat/cdh/RPM-GPG-KEY-cloudera gpgcheck = 0 リポジトリを追加後yumの更新をします。~ # yum update yum ** Install Hadoop [#gb08de57] Hadoopの主要コンポーネントと擬似分散モード用設定のインストールをします。 yum searchコマンドを使って、Hadoop-0.20.2に対応する主要コンポーネントを確認しインストールします。yum install コマンドは文書中改行をしていますが、実コマンドはyumから-yまで1行で実行しています。またそれぞれのコンポーネントの関係は以下のとおりです。secondarynamenodeは一定の間隔でNamenodeのバックアップを取るためのサービスです。本VMwareイメージではこのサービスは使用していません。またyumコマンドの末尾『-y』はyum実行中のすべての質問に『y(yes)』と返すオプションです。~ # yum install hadoop-0.20 hadoop-0.20-namenode hadoop-0.20-datanode hadoop- 0.20-secondarynamenode hadoop-0.20-jobtracker hadoop-0.20-tasktracker hadoop- 0.20-conf-pseudo -y 各コンポーネントの関係を以下に記載します。~ |名称|HDFS or MapReduce|Master or Slave|概略|h |hadoop-0.20-namenode|HDFS|Master|DataNode上の情報をメタデータで管理、複製の配置や整合性の管理| |hadoop-0.20-datanode|HDFS|Slave|実データの保存、Namenodeへの状態報告| |hadoop-0.20-secondarynamenode|HDFS|Master|障害対策の1つ、一定の間隔でNamenodeのバックアップを取得| |hadoop-0.20-jobtracker|MapReduce|Master|jobの受付、処理の割当、管理| |hadoop-0.20-tasktracker|MapReduce|Slave|JobTrackerから割当てられた処理を実行するワーカー| ~ hadoopをインストール完了後、mapred,hdfsユーザが追加されていることを確認します。 またCDH3beta4を導入した際、作成していたhadoopユーザがhdfsユーザに切り替わります(パスワードは空のまま引き継がれます)。~ # tail -n 4 /etc/passwd beat:x:500:500::/home/beat:/bin/bash ntp:x:38:38::/etc/ntp:/sbin/nologin mapred:x:101:157:Hadoop MapReduce:/usr/lib/hadoop-0.20:/bin/bash hdfs:x:501:501:Hadoop HDFS:/home/hadoop:/bin/bash ** hadoop-0.20-confの切り替えについて [#l6d6d49a] Hadoopの動作モードにはローカルモード、擬似分散モード、完全分散モードがあります。まずローカルモード用の設定を使用します。本VMwareイメージでは設定をしませんが追加設定として設定ファイル(conf.bc_cluster)を追加しています。~ ~ hadoopでは/etc/hadoop-0.20/以下にconf、conf.empty、conf.pseudo(擬似分散用設定ディレクトリ)があります。またconfはhadoop-0.20-conf-pseudo(擬似分散モード用設定)のsymlinkに設定されています。このsymlinkをalternativesコマンドで変更しローカルモード、擬似分散モード、完全分散モードなど各設定でのHadoopの起動が可能になります。~ ~ ここではローカルモード用の設定conf.localと完全分散用の設定conf.bc_clusterを作成します。各コピー元ファイルはconf.emptyとしconf.emptyは削除しないようにします。conf.emptyにはほぼ設定が記載されていないためです。~ ~ 設定の切り替えにはalternativesを実行し切り替えを行います。alternativesを用いてhadoop-0.20-confのステータスとバージョン(symlinkの優先度)の確認をします。~ # cd /etc/hadoop-0.20/ # ls -l 合計 8 lrwxrwxrwx 1 root root 34 4月 12 13:14 conf -> /etc/alternatives/hadoop-0.20-conf drwxr-xr-x 2 root root 4096 4月 12 13:14 conf.empty drwxr-xr-x 2 root root 4096 4月 12 13:14 conf.pseudo # cp -r conf.empty conf.local # cp -r conf.empty conf.bc_cluster - hadoop-0.20-confの設定確認 ~ alternatives --displayコマンドで現在のhadoop-0.20-confのsymlinkの確認をします。~ # alternatives --display hadoop-0.20-conf hadoop-0.20-conf -ステータスは自動です。 リンクは現在 /etc/hadoop-0.20/conf.pseudo を指しています。 /etc/hadoop-0.20/conf.empty - 優先項目 10 /etc/hadoop-0.20/conf.pseudo - 優先項目 30 現在の「最適」バージョンは /etc/hadoop-0.20/conf.pseudo です。 - 設定変更例~ conf.bc_clusterの優先度を60と設定しconf.bc_clusterがhadoop-0.20-confのリンクになるかを確認します。 alternatives --installコマンドで設定を変更し、再度hadoop-0.20-confの設定を表示しconf.bc_clusterを指していることを 確認します。~ # alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf /etc/hadoop-0.20/conf.bc_cluster 60 # alternatives --display hadoop-0.20-conf hadoop-0.20-conf -ステータスは自動です。 リンクは現在 /etc/hadoop-0.20/conf.bc_cluster を指しています。 /etc/hadoop-0.20/conf.empty - 優先項目 10 /etc/hadoop-0.20/conf.pseudo - 優先項目 30 /etc/hadoop-0.20/conf.bc_cluster - 優先項目 60 現在の「最適」バージョンは /etc/hadoop-0.20/conf.bc_cluster です。 :Note|使用法は『 alternatives --install <リンク> <名前> <パス> <優先度> 』です。その他にも明示的にパスを指定しその設定を反映させることもできます。 ~ 本VMwareイメージではローカルモードはconf.localを使用します。conf.localにhadoop-0.20-confを設定するために以下のように実行します。alternatives --setを使用するとステータスが自動から手動に切り替わります。~ # alternatives --set hadoop-0.20-conf /etc/hadoop-0.20/conf.local # alternatives --display hadoop-0.20-conf hadoop-0.20-conf - ステータスは手動です。 リンクは現在 /etc/hadoop-0.20/conf.local を指しています。 /etc/hadoop-0.20/conf.empty - 優先項目 10 /etc/hadoop-0.20/conf.pseudo - 優先項目 30 ...<略> * ローカルモード [#b7f344ff] 1台で擬似的なmaster、slaveを設定せずにMapReduceのアプリケーションのdebugなどに使用します。 ** conf.localの設定 [#q5df15bd] ローカルモード用のconf.localに必要な設定を記載します。 - hadoop-env.sh~ Hadoopの環境変数設定が記載されているファイルです。HADOOP_IDENT_STRINGを『$USER』からbclocalと変更しています。 またHadoopのheapサイズはデフォルトの1000MBのまま変更していません。ご使用の環境に合わせて適宜変更してください。~ # tail -n 5 hadoop-env.sh ...<略> # A string representing this instance of hadoop. $USER by default. export HADOOP_IDENT_STRING=bclocal # The scheduling priority for daemon processes. See 'man nice'. # export HADOOP_NICENESS=10 - core-site.xml~ core-site.xmlにはHadoopの共通設定を記載します。hadoop.tmp.dirを/tmp/hadooplocalに設定します。hadoop.tmp.dirのディレクトリ指定は 適宜変更してください。~ # cat core-site.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>hadoop.tmp.dir</name> <!-- Local Disk Directory for hadoop data --> <value>/tmp/hadooplocal</value> <!-- its value --> </property> </configuration> - hdfs-site.xml~ dfs-site.xmlにはHDFSに関する設定を記載するふぁいるです。ローカルモードではhdfs-site.xmlは設定の必要はありません。~ - mapred-site.xml ~ mapred-site.xmlはMapReduceに関する設定を記載しています。ローカルモードではmapreduce.jobtracker.addressをlocalと設定します。~ # cat mapred-site.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>mapreduce.jobtracker.address</name> <!-- JobTracker Address --> <value>local</value> <!-- its value --> </property> </configuration> - hadoop.tmp.dirの作成 ~ 上記で設定したhadoop.tmp.dir(/tmp/hadooplocalと設定)を作成します。~ # cd tmp/ # mkdir hadooplocal # chmod -R 777 hadooplocal/ - HADOOP_CLASSPATHの設定 ローカルモードとして動作するための設定をします。ローカルモードの実行ユーザをhdfsユーザに変更します。ローカルモードではHDFSを使用せずにローカルのファイルシステムを利用します。またJAVAのみでの実行になります。HADOOP_CLASSPATHは実行するファイルの存在するディレクトリを指定します。今回は/usr/lib/hadoop-0.20/hadoop-0.20.2-CDH3B4-examples.jarを実行するので/usr/lib/hadoop-0.20/を指定します。~ # su hdfs $ export HADOOP_CLASSPATH=/usr/lib/hadoop-0.20/ ** Examplesの実行 [#n99b3937] hadoop-0.20.2-CDH3B4-examples.jarを実行します。この際にjavaについてのエラーが発生した場合は、JAVA_HOMEの設定を確認してください。~ $ hadoop-0.20 jar /usr/lib/hadoop-0.20/hadoop-0.20.2-CDH3B4-examples.jar An example program must be given as the first argument. Valid program names are: aggregatewordcount: An Aggregate based map/reduce program that counts the words in the input files. ...<略> hadoop-0.20.2-CDH3B4-examples.jarに含まれるpiを実行します。このExamplesの引数はmap数10、100回施行するExamplesになります。~ $ hadoop-0.20 jar /usr/lib/hadoop-0.20/hadoop-0.20.2-CDH3B4-examples.jar pi 10 100 Number of Maps = 10 Samples per Map = 100 11/04/12 17:20:07 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Wrote input for Map #0 ...<略> 11/04/12 17:20:12 INFO mapred.JobClient: SPLIT_RAW_BYTES=1090 11/04/12 17:20:12 INFO mapred.JobClient: Reduce input records=20 Job Finished in 4.704 seconds Estimated value of Pi is 3.14800000000000000000 以上でローカルモードの動作確認は終了です。 * 擬似分散モード [#z04f2d8e] 1台のVMwareイメージ上で擬似的にMasterとSlaveを設定しそれぞれのサービスの起動を行うモードです。上記インストール済みの擬似分散用設定ファイルconf.pseudoを用います。また端末上でのブラウジングをする場合テキストブラウザを適宜インストールしてください。~ # yum install w3m -y ** hadoop-0.20-confの切り替え [#ca4ffd4d] ローカルモード後に実行する場合は擬似分散モードへhadoop-0.20-confを切り替える必要があります。alteranativesを用いてhadoop-0.20-confの設定確認をします。(下記ではconf.localの優先項目も60に設定しています)~ # alternatives --display hadoop-0.20-conf hadoop-0.20-conf - ステータスは手動です。 リンクは現在 /etc/hadoop-0.20/conf.local を指しています。 /etc/hadoop-0.20/conf.empty - 優先項目 10 /etc/hadoop-0.20/conf.pseudo - 優先項目 30 /etc/hadoop-0.20/conf.bc_cluster - 優先項目 60 /etc/hadoop-0.20/conf.local - 優先項目 60 現在の「最適」バージョンは /etc/hadoop-0.20/conf.bc_cluster です。 hadoop-0.20-confはconf.localに設定されていますので、先ほどの手順同様『alternatives --set』を用いてhadoop-0.20-confをcond.pseudoに変更します。alternatives --display hadoop-0.20-confを実行しhadoop-0.20-confはconf.pseudoに設定されていることが確認します。~ # alternatives --set hadoop-0.20-conf /etc/hadoop-0.20/conf.pseudo # alternatives --display hadoop-0.20-conf hadoop-0.20-conf - ステータスは手動です。 リンクは現在 /etc/hadoop-0.20/conf.pseudo を指しています。 /etc/hadoop-0.20/conf.empty - 優先項目 10 /etc/hadoop-0.20/conf.pseudo - 優先項目 30 /etc/hadoop-0.20/conf.bc_cluster - 優先項目 60 /etc/hadoop-0.20/conf.local - 優先項目 60 現在の「最適」バージョンは /etc/hadoop-0.20/conf.bc_cluster です。 ** 擬似分散モード設定 [#dc555179] conf.pseudoに既に設定値が記載されていますので、変更を加える必要はありません。ご使用の環境に応じて適宜設定を変更してください。~ # cd /etc/hadoop-0.20/conf.pseudo/ - hadoop-env.sh~ Hadoopの環境変数設定が記載されているファイルです。HADOOP_IDENT_STRINGをbcpseudoに変更しています。~ # tail -n 5 hadoop-env.sh ...<略> # A string representing this instance of hadoop. $USER by default. export HADOOP_IDENT_STRING=bcpseudo # The scheduling priority for daemon processes. See 'man nice'. # export HADOOP_NICENESS=10 - core-site.xml ~ core-site.xmlにはHadoopの共通設定を記載します。core-site.xmlはデフォルトから変更していません。hadoop.tmp.dirが/var/lib/hadoop-0.20/cache/${user.name}に設定されています。ご使用の環境に合わせて適宜変更してください。~ # cat core-site.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/var/lib/hadoop-0.20/cache/${user.name}</value> </property> <!-- OOZIE proxy user setting --> <property> <name>hadoop.proxyuser.oozie.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.oozie.groups</name> <value>*</value> </property> </configuration> - hdfs-site.xml~ hdfs-site.xmlにはHDFSに関する設定を記載します。擬似分散モードのhdfs-site.xmlはslaveが1台のためdfs.replicationは1に設定されています。dfs.permissionsをfalseに設定することでhdfsユーザ以外のHDFSへの書き込みが可能になります。dfs.name.dirは/var/lib/hadoop-0.20/cache/hadoop/dfs/nameと設定されています。ご使用の環境にあわせて適宜変更してください。~ # cat hdfs-site.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> <property> <!-- specify this so that running 'hadoop namenode -format' formats the right dir --> <name>dfs.name.dir</name> <value>/var/lib/hadoop-0.20/cache/hadoop/dfs/name</value> </property> <!-- Enable Hue Plugins --> <property> <name>dfs.namenode.plugins</name> <value>org.apache.hadoop.thriftfs.NamenodePlugin</value> <description>Comma-separated list of namenode plug-ins to be activated. </description> </property> <property> <name>dfs.datanode.plugins</name> <value>org.apache.hadoop.thriftfs.DatanodePlugin</value> <description>Comma-separated list of datanode plug-ins to be activated. </description> </property> <property> <name>dfs.thrift.address</name> <value>0.0.0.0:10090</value> </property> </configuration> - mapred-site.xml mapred-site.xmlはMapReduceに関する設定を記載しています。mapred.job.trackerはlocalhost:8021です、WEBUIで閲覧んする際はlocalhost:50030で閲覧することができます。この値は変更する必要はありません。~ # cat mapred-site.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>mapred.job.tracker</name> <value>localhost:8021</value> </property> <!-- Enable Hue plugins --> <property> <name>mapred.jobtracker.plugins</name> <value>org.apache.hadoop.thriftfs.ThriftJobTrackerPlugin</value> <description>Comma-separated list of jobtracker plug-ins to be activated. </description> </property> <property> <name>jobtracker.thrift.address</name> <value>0.0.0.0:9290</value> </property> </configuration> ** サービスの起動前に [#o543c7bc] hdfsユーザに切り替え各サービスを起動する前に既に起動しているHadoopのサービスがあれば停止します。ここでは一括でhadoop-0.20-の関連サービスを停止しています。~ # su hdfs $ for service in /etc/init.d/hadoop-0.20-*; do sudo $service stop; done *** HDFS Format [#g4eca100] HDFSを正常に起動させるために、hdfsユーザでHDFSをFormatします。~ $ sudo -u hdfs hadoop-0.20 namenode -format 11/04/12 18:55:07 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = localhost.localdomain/127.0.0.1 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 0.20.2-CDH3B4 STARTUP_MSG: build = -r 3aa7c91592ea1c53f3a913a581dbfcdfebe98bfe; compiled by 'root' on Mon Feb 21 17:31:12 EST 2011 ************************************************************/ Re-format filesystem in /var/lib/hadoop-0.20/cache/hadoop/dfs/name ? (Y or N) Y 11/04/12 18:55:09 INFO util.GSet: VM type = 64-bit <略> 11/04/12 18:55:10 INFO common.Storage: Storage directory /var/lib/hadoop-0.20/cache/hadoop/dfs/name has been successfully formatted. 11/04/12 18:55:10 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at localhost.localdomain/127.0.0.1 ************************************************************/ ** サービスの起動 [#w9ced8eb] 先ほど一括でサービスを停止したコマンドと同様に一括でサービスを起動します。~ $ for service in /etc/init.d/hadoop-0.20-*; do sudo $service start; done Starting Hadoop datanode daemon (hadoop-datanode): starting datanode, logging to /usr/lib/hadoop-0.20/logs/hadoop-bcpseudo-datanode-localhost.localdomain.out [ OK ] Starting Hadoop jobtracker daemon (hadoop-jobtracker): starting jobtracker, logging to /usr/lib/hadoop-0.20/logs/hadoop-bcpseudo-jobtracker-localhost.localdomain.out [ OK ] Starting Hadoop namenode daemon (hadoop-namenode): starting namenode, logging to /usr/lib/hadoop-0.20/logs/hadoop-bcpseudo-namenode-localhost.localdomain.out [ OK ] Starting Hadoop secondarynamenode daemon (hadoop-secondarynamenode): starting secondarynamenode, logging to /usr/lib/hadoop-0.20/logs/hadoop-bcpseudo-secondarynamenode-localhost.localdomain.out [ OK ] Starting Hadoop tasktracker daemon (hadoop-tasktracker): starting tasktracker, logging to /usr/lib/hadoop-0.20/logs/hadoop-bcpseudo-tasktracker-localhost.localdomain.out [ OK ] 各サービスごとの起動は以下のとおりです。~ - namenode(Master)~ $ sudo /etc/init.d/hadoop-0.20-namenode start - datanode(Slave)~ $ sudo /etc/init.d/hadoop-0.20-datanode start - jobtracker(Master)~ $ sudo /etc/init.d/hadoop-0.20-jobtracker start - tasktracker(Slave)~ $ sudo /etc/init.d/hadoop-0.20-tasktracker start 起動後以下のURLでNameNodeとMap/Reduce AdministrationのWebUIが閲覧できます。~ - NameNode ~ $ w3m http://localhost:50070 - Map/Reduce Administration~ $ w3m http://localhost:50070 ** Examples [#oa6d340e] ローカルモード同様、hadoop-0.20.2-CDH3B4-examples.jarを実行します。この際にjavaについてのエラーが発生した場合は、JAVA_HOMEの設定を確認してください。~ $ hadoop-0.20 jar /usr/lib/hadoop-0.20/hadoop-0.20.2-CDH3B4-examples.jar An example program must be given as the first argument. Valid program names are: aggregatewordcount: An Aggregate based map/reduce program that counts the words in the input files. ...<略> ローカルモードと同じExamplesのhadoop-0.20.2-CDH3B4-examples.jarに含まれるpiを実行します。このExamplesの引数はmap数10、100回施行するExamplesです。~ $ hadoop-0.20 jar /usr/lib/hadoop-0.20/hadoop-0.20.2-CDH3B4-examples.jar pi 10 100 Number of Maps = 10 Samples per Map = 100 Wrote input for Map #0 Wrote input for Map #1 Wrote input for Map #2 ...<略> 11/04/12 19:55:03 INFO mapred.FileInputFormat: Total input paths to process : 10 11/04/12 19:55:04 INFO mapred.JobClient: Running job: job_201104121855_0001 ...<略> 11/04/12 19:55:51 INFO mapred.JobClient: Map output records=20 11/04/12 19:55:51 INFO mapred.JobClient: SPLIT_RAW_BYTES=1160 11/04/12 19:55:51 INFO mapred.JobClient: Reduce input records=20 Job Finished in 48.321 seconds Estimated value of Pi is 3.14800000000000000000 この際Map/Reduce AdministrationのWebUI「Completed Jobs」にjob_201104121855_0001が表示されます。~ #ref(localmapreduce.jpg);~ ** サービスの停止 [#ka11513d] 一括でのサービス停止は以下のように実行します。~ $ for service in /etc/init.d/hadoop-0.20-*; do sudo $service stop; done もしくは各サービスごとの停止は以下のとおりです。 - namenode(Master) ~ $ sudo /etc/init.d/hadoop-0.20-namenode stop - datanode(Slave)~ $ sudo /etc/init.d/hadoop-0.20-datanode stop - jobtracker(Master)~ $ sudo /etc/init.d/hadoop-0.20-jobtracker stop - tasktracker(Slave)~ $ sudo /etc/init.d/hadoop-0.20-tasktracker stop 以上で擬似分散モードの動作確認は終了です。 * CDH3beta4:Hadoop関連プロジェクト [#qfd90596] CDH3beta4ではHadoopの主要コンポーネントの他に以下のHadoopの関連プロジェクトをサポートしています。CDH3 beta4から入手できるコンポーネントとインストール時のパッケージ名の対応は以下の通りです。~ |コンポーネント名|パッケージ名|概略|参照URL|h |Flume|Flume|データローディングインフラ|http://archive.cloudera.com/cdh/3/flume/Cookbook/index.html| |Sqoop|Sqoop|MySQLからHadoopへのデータインポートツール|http://archive.cloudera.com/cdh/3/sqoop/SqoopDevGuide.html| |Hue|Hue|Hadoop User Experience(HadoopのUI)|http://archive.cloudera.com/cdh/3/hue/| |Pig|hadoop-pig|データセットを探索するための対話的インターフェース|http://archive.cloudera.com/cdh/3/pig/| |Hive|hadoop-hive|SQLライクな言語|http://hive.apache.org/| |HBase|hadoop-hbase|Bigtable Storage System。HDFSとは逆に細かい大量のデータを扱うためのHDFS上に作成するFile System|http://hbase.apache.org/| |ZooKeeper|hadoop-zookeeper|設定情報、名前付けなどの設定、保守サービス|http://zookeeper.apache.org/| |Oozie server|Oozie|ワークフローエンジン|http://archive.cloudera.com/cdh/3/oozie/| |Oozie client|oozie-client|ワークフローエンジン|http://archive.cloudera.com/cdh/3/oozie/| |Whirr|Whirr|AmazonEC2のようなクラウドとの連携API|http://archive.cloudera.com/cdh/3/whirr/index.html|