Tag Archives: hadoop

[メモ] FreeBSD10にhadoopインストール

Pocket

素の状態のFreeBSD 10にpkgngでhadoopをインストールしたときのメモ。

2014/7/4時点でのpkgにはhadoop-1.2.1が入ってる。

pkgのインストール

pkgの初回インストールに成功した試しがない。
pkgのpackageをダウンロードしてインストール。
具体的には、pkg-staticを取り出し、pkg-staticでpkgのpackageをインストール。

pkg update。

シェルとか、sudoとか、必要なものがあればインストールする。

hadoopのインストール

OpenJDKのための設定

hadoopについてくるOpenJDKのためにfstabに設定を加える。
OpenJDKインストール時のメッセージに沿って進める。

fstabに以下に行を追加。区切りはtab。

mount。
mountと叩いてmountされていることを確認。

以上。
続きはこちら

Hadoopフレンドリーなデータとは

Pocket

 

ログは1行1イベントに

何を言っとるんだお前はという感じであるが、つまりこういう事である。

通常、ログは1行が1イベントである。
たとえばapacheのログやらなにやら、みんなそうである。
少なくともUNIX系のシステムであれば、これは常識である。
しかし、この世の中、UNIX系の常識が通用しないログだって山ほどあるのである。

1イベントが複数行にわたるログがなぜいけないか。

たとえば以下の様な擬似ログを考えてみよう。

まったく関係のない話だが、以下のデータは手元にあるLIFEのノートから適当にでっち上げた。
冒頭にタイムスタンプがあり、イベントの内容が記される、典型的なログである。

しかしこれが、以下のように複数行にわたって記録(あるいは表示)される、こういうログを相手にすることだってあるのだ。

 

これは主に可読性を意識したせいであろうが、こういったログをHadoopで扱うのは難しい。

Hadoopのデータの扱い方

というのも、Hadoopは分散処理のためにログを分割するからだ(デフォルトでは64MBごと)。

しかもその分割は、単純にサイズのみで判断され、文脈は考慮されない。
上のログで言えば、Nobleの手前で切られてしまってログとして意味がなくなってしまうことだってある。

これを避けるには、Hadoopにファイルそのものではなくて、ファイルリストを与える手があるけれども、それではHadoopの長所を活かせない。
ファイルリストは綺麗に分割されるけど、ファイルの大きさはまちまちだから。

ログの整形

というわけで、こういったログを扱う前に、下準備として1行1イベントにまとめてしまおう。

まとめ自体もHadoopで処理してしまえば楽である。
Hadoopの象本Appendix Cに良い例があるのでこれを使う。
ここでfiles.txtは処理するログファイルをリストしたものとする。
また、concat.shは1行1イベントにまとめるスクリプトとする。

 

reduceは必要ないのでmapred.reduce.tasks=0。
重複して書き込んでほしくないのでmapred.map.tasks.speculative.execution=false。
タイムアウトは長めに。
mapが一回に処理するファイルはひとつにしたいので、-inputformat org.apache.hadoop.mapred.lib.NLineInputFormat 。

以上

hadoopのsafemodeとfsck

Pocket

 

Hadoopのnamenode兼datanodeが電源瞬断のせいで壊れてしもうた。
勉強用のHadoopなのでダメージはないのだが、せっかくなのでfsckなどを試した結果を記す。
hadoop-1.0.0。
OS側でもfsckはしておいた。

サマリ

  • HDFSにもfsckがある。
  • hadoop fsckでチェック、修正できる。
  • hadoop fsckと叩けば使い方の簡単な説明が表示される。
  • namenodeがsafemodeのためにHDFSが読み取り専用になっていることがある。
  • 読み取り専用ではfsckで修正できないので、safemodeから出る必要がある。

 

HDFSでのfsck

hadoop fsck <path>と指定すればよい。
CORRUPT!とのことで、壊れておりますなあ。

 

壊れている場合の対処:消去か移動

壊れている場合には対処が二つ。
壊れているブロックを消すか、lost+foundに移すか。
消す場合には-delete, 移す場合には-moveを指定する。
以下は消した場合の例….なのだが、namenodeがsafemodeにいるので変更が出来ないとのこと。

 

safemodeとは

そもそもnameodeは通常の動作として、起動時には状態がsafemodeである。
safenodeのまま待機をしているうちに、datanodeが起動し、保管しているブロックの報告をnamenodeに行う。
namenodeは、充分なブロックの確認ができれば自動的にsafemodeを出る。
「充分なブロック」がどれくらいか、は設定できる。

safemodeのときは読み取り専用になり、複製や消去もできないが、手動でsafemodeに入ったり出たりすることができる。

以下、公式からの引用

Safe mode is entered automatically at Namenode startup, and leaves safe mode automatically when the configured minimum percentage of blocks satisfies the minimum replication condition. Safe mode can also be entered manually, but then it can only be turned off manually as well.
Safe mode maintenance command. Safe mode is a Namenode state in which it
1. does not accept changes to the name space (read-only)
2. does not replicate or delete blocks.

今回、問題の発生したnamenodeはdatanodeも兼ねている。
電源瞬断でブロックが壊れているからブロックの報告はできないし、そもそもnamenodeが保管しているメタデータも壊れている。
ボロボロである。
したがって、いつまで待ってもsafemodeから出るはずがない。
そこで手動でsafemodeを解除する。

safemodeの操作

safemodeの操作はhadoop dfsadmin -safemodeに続けて行う。
getで状態を得る。
enterでsafemodeに入る。
leaveでsafemodeから出る。
面白いのは、wait。
safemodeから出たらコマンド実行する、というもの。

以下、実際の例。
safe modeがONになっているので、OFFに。

改めてfsck / -delete
blockが2000個くらい消えた。ま、まあ勉強用だし(震え声)

HEALTYになったので、これでhadoopが使える状態に戻った。
以上。