適当に・・・

何の目的も無くブログを立ち上げてみました。更新は不定期ですね。

hadoop インストール

2010年04月18日 23時20分42秒 | Weblog
大昔 Googleを支える技術

と言う本ではじめてhadoopと言う名前にであう。

月日が流れてインストールをすることになった。

※像の絵が描いてあるがこれは
開発者の子供が持っている
黄色い象のぬいぐるみの名前に由来しているそうだ

必要なもの
jdk-6u20-linux-i586-rpm.bin
hadoop-0.20.2.tar.gz
(yumでもClouderaってのが提供されているらしい。)

まずJDKをインストールするがこれは割愛。

useradd hadoop

mkdir -p /opt/hadoop/

chown -R hadoop:hadoop /opt/hadoop/

tar xvzf hadoop-0.20.2.tar.gz
mv hadoop-0.20.2 /opt/hadoop

hadoop ユーザで

vi ~/.bashrc

export JAVA_HOME=/usr/java/jdk1.6.0_20/
export HADOOP_INSTALL=/opt/hadoop/hadoop-0.20.2
export PATH=$HADOOP_INSTALL/bin:$JAVA_HOME/bin:$PATH

を追記して保存

source ~/.bashrc

ssh-keygen -t rsa
(何を聞かれてもEnter)

cd ~/.ssh/
cat id_rsa.pub >> authorized_keys

chmod 600 authorized_keys

(authorized_keysはスペルやパーミッションが
間違ってるとログインできないので要注意)

vi /opt/hadoop/hadoop-0.20.2/conf/core-site.xml

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://diamond:39399</value>
<description>primary NameNode configration</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/data</value>
<description>hadoop data dir</description>
</property>
</configuration>

を記述して保存

※<value>hdfs://diamond:39399</value>
の 39399 はport番号なので好きなように。(サンキューサンキュッキュー)

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
diamondはサーバ名で名前解決できるようにしておく
ハマッタ事hadoopには
スタンドアローンモード
疑似分散モード
完全分散モード
と3つのモードがあるが、解説は大体、疑似分散モードでやってる。

/etc/hostsに

127.0.0.1 diamondとかやってるからAmazon EC2で完全分散モードをやった時に

Slave側のログで
INFO org.apache.hadoop.ipc.Client: Retrying connect to server: dia
mond/xx.xxx.xx.xxx:39399. Already tried 0 time(s).
みたいなログがずっと出ている。

で書かなければならないのは待機するマスターIPを/etc/hostsに
書いて名前解決できるようにしないといけない罠。

xxx.xxx.xxx.xxx diamond
xxxは10.xxx.xxx.xxxのIPアドレス

ifconfigで確認して出てくる奴ですな

マスターの50030にアクセスしてnodeの数が一致してればOKかと。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

vi conf/hdfs-site.xml

<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>

として保存

※slaveサーバの台数をvalueに設定する。
今回はサーバ1台でmaster slaveを補うので1に指定
ちなみに master slave構成の時には
conf/master
conf/slave
のしたにマシンを登録しなくちゃいけない予感

$ vi conf/mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>diamond:39400</value>
</property>
</configuration>

として保存

※0.20.0から、hadoop-site.xmlは3つのxmlファイルに分割された。
1つ目は、hadoop.tmp.dir, fs.default.nameを設定するcore-site.xml。
2つ目は、dfs.replicationを編集するhdfs-site.xml。
3つ目は、mapred.job.trackerを設定するmapred-site.xml
古い記事を読むとhadoop-site.xmlの設定が出てる。

マスターノードで

hadoop namenode -format
すると・・・

hadoop.tmp.dirで指定したディレクトリ配下に
(今回は/opt/hadoop/data)
dfsと言うディレクトリが作成されその配下にも
色々と作られている

dfs
`-- name
|-- current
| |-- VERSION
| |-- edits
| |-- fsimage
| `-- fstime
`-- image
`-- fsimage

3 directories, 5 files

マスターノードと
スレーブノードで起動するものが違うが今回は
1台にすべてをインストールしたので全部起動する。

bin/start-all.sh

呼ばれてるのは
hadoop namenode start
hadoop jobtracker start
(マスターノードで必要)

hadoop datanode start
hadoop tasktracker start
(スレーブノードで必要)

起動すると
$hadoop_installdir/logs/の配下に色々なログが出る。
エラーの場合ももちろん出る。

ちなみに
netstat -an | grep 39399

等でもListenしてるのが確認できる。

インストールはここまで。

次 分散ファイルシステム
HDFSを使ってみる。

hadoop fs

よくわからないなw

わかるのは ls mkdir とか
見慣れたコマンドぐらいだな。

hadoop fs -ls とかで使う

で HDFSとMapReduceは
それぞれ
50070番と50030番でブラウザで確認できる模様

hadoop fs -mkdir /log

で HDFS のファイルシステム上に
log ディレクトリ作成と言うふうな感じ

ローカルのファイルシステムから
HDFS上にファイルをコピーするのは

hadoop fs -copyFromLocal コピー元 コピー先

って言う感じ。

次 MapReduceのサンプルを動かす。

どこでもやってるのはHTTPの

ログを解析するって言う感じですなーw

まあ、サンプルにくっついてるからだな。

まずHTTPのログをHDFS上に配置する

さっきlogと言うのを作ったのはそのためw

hadoop fs -copyFromLocal /var/log/httpd/access_log /log/access_log

hadoop fs -ls /log

-rw-r--r-- 1 hadoop supergroup 157164610 2010-04-19 01:45 /log/access_log

こんな感じの出力が出るはず。

アクセスの多いページを見つけましょ。

hadoop jar /opt/hadoop/hadoop-0.20.2/hadoop-0.20.2-examples.jar grep /log/access_log /log/output "Get (S+)" 1

とかやると /log/outputに結果出力される。

10/04/19 10:14:55 INFO mapred.FileInputFormat: Total input paths to process : 1
10/04/19 10:14:56 INFO mapred.JobClient: Running job: job_201004190338_0001
10/04/19 10:14:57 INFO mapred.JobClient: map 0% reduce 0%
10/04/19 10:15:11 INFO mapred.JobClient: map 23% reduce 0%
10/04/19 10:15:14 INFO mapred.JobClient: map 31% reduce 0%
10/04/19 10:15:17 INFO mapred.JobClient: map 66% reduce 0%
10/04/19 10:15:23 INFO mapred.JobClient: map 100% reduce 0%
10/04/19 10:15:36 INFO mapred.JobClient: map 100% reduce 100%
10/04/19 10:15:38 INFO mapred.JobClient: Job complete: job_201004190338_0001
10/04/19 10:15:38 INFO mapred.JobClient: Counters: 18
10/04/19 10:15:38 INFO mapred.JobClient: Job Counters
10/04/19 10:15:38 INFO mapred.JobClient: Launched reduce tasks=1
10/04/19 10:15:38 INFO mapred.JobClient: Launched map tasks=3
10/04/19 10:15:38 INFO mapred.JobClient: Data-local map tasks=3
10/04/19 10:15:38 INFO mapred.JobClient: FileSystemCounters
10/04/19 10:15:38 INFO mapred.JobClient: FILE_BYTES_READ=6
10/04/19 10:15:38 INFO mapred.JobClient: HDFS_BYTES_READ=157172804
10/04/19 10:15:38 INFO mapred.JobClient: FILE_BYTES_WRITTEN=120
10/04/19 10:15:38 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=86
10/04/19 10:15:38 INFO mapred.JobClient: Map-Reduce Framework
10/04/19 10:15:38 INFO mapred.JobClient: Reduce input groups=0
10/04/19 10:15:38 INFO mapred.JobClient: Combine output records=0
10/04/19 10:15:38 INFO mapred.JobClient: Map input records=1455557
10/04/19 10:15:38 INFO mapred.JobClient: Reduce shuffle bytes=18
10/04/19 10:15:38 INFO mapred.JobClient: Reduce output records=0
10/04/19 10:15:38 INFO mapred.JobClient: Spilled Records=0
10/04/19 10:15:38 INFO mapred.JobClient: Map output bytes=0
10/04/19 10:15:38 INFO mapred.JobClient: Map input bytes=157164610
10/04/19 10:15:38 INFO mapred.JobClient: Combine input records=0
10/04/19 10:15:38 INFO mapred.JobClient: Map output records=0
10/04/19 10:15:38 INFO mapred.JobClient: Reduce input records=0
10/04/19 10:15:38 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
10/04/19 10:15:38 INFO mapred.FileInputFormat: Total input paths to process : 1
10/04/19 10:15:39 INFO mapred.JobClient: Running job: job_201004190338_0002
10/04/19 10:15:40 INFO mapred.JobClient: map 0% reduce 0%
10/04/19 10:15:49 INFO mapred.JobClient: map 100% reduce 0%
10/04/19 10:16:01 INFO mapred.JobClient: map 100% reduce 100%
10/04/19 10:16:03 INFO mapred.JobClient: Job complete: job_201004190338_0002
10/04/19 10:16:03 INFO mapred.JobClient: Counters: 17
10/04/19 10:16:03 INFO mapred.JobClient: Job Counters
10/04/19 10:16:03 INFO mapred.JobClient: Launched reduce tasks=1
10/04/19 10:16:03 INFO mapred.JobClient: Launched map tasks=1
10/04/19 10:16:03 INFO mapred.JobClient: Data-local map tasks=1
10/04/19 10:16:03 INFO mapred.JobClient: FileSystemCounters
10/04/19 10:16:03 INFO mapred.JobClient: FILE_BYTES_READ=6
10/04/19 10:16:03 INFO mapred.JobClient: HDFS_BYTES_READ=86
10/04/19 10:16:03 INFO mapred.JobClient: FILE_BYTES_WRITTEN=44
10/04/19 10:16:03 INFO mapred.JobClient: Map-Reduce Framework
10/04/19 10:16:03 INFO mapred.JobClient: Reduce input groups=0
10/04/19 10:16:03 INFO mapred.JobClient: Combine output records=0
10/04/19 10:16:03 INFO mapred.JobClient: Map input records=0
10/04/19 10:16:03 INFO mapred.JobClient: Reduce shuffle bytes=6
10/04/19 10:16:03 INFO mapred.JobClient: Reduce output records=0
10/04/19 10:16:03 INFO mapred.JobClient: Spilled Records=0
10/04/19 10:16:03 INFO mapred.JobClient: Map output bytes=0
10/04/19 10:16:03 INFO mapred.JobClient: Map input bytes=0
10/04/19 10:16:03 INFO mapred.JobClient: Combine input records=0
10/04/19 10:16:03 INFO mapred.JobClient: Map output records=0
10/04/19 10:16:03 INFO mapred.JobClient: Reduce input records=0

こんな感じの出力が出て終わった。

hadoop fs -ls /log

Found 2 items
-rw-r--r-- 1 hadoop supergroup 157164610 2010-04-19 01:45 /log/access_log
drwxr-xr-x - hadoop supergroup 0 2010-04-19 10:16 /log/output

で結果をローカルマシンに持ってくる

hadoop fs -copyToLocal /log/output ./output

cd output/

cat part-00000
(part-00000ってのが解析結果らしい。)

まあ1日分のログの解析なんか
AWStatsとかにやらせるからなw

テラ級のログを解析しろって言ったら早いのかも。

単純に分散処理のシステム部分を自分で考えなくて
良いという事はすごい事

だって考えられないものw

最新の画像もっと見る

コメントを投稿