2011年08月
Hadoop でまた大いに嵌る
- 2011-08-05 (Fri)
- プログラミング
今度の症状は datanode が namenode に接続できないというもの.ログをみると
INFO org.apache.hadoop.ipc.Client: Retrying connect to server: namenode/:8020. Already tried 9 time(s). INFO org.apache.hadoop.ipc.RPC: Server at namenode/ :8020 not available yet, Zzzzz...
とかいうのが延々と……
で,結局のところ conf/core-site.xml で namenode の名前を FQN で書かずにホスト名だけで書いていたので namenode の RPC 受付けポートが 127.0.1.1:8020 とかになっていたというオチ(/etc/hosts に 127.0.1.1 namenode という記述がデフォルトで入ってたから).これじゃあ外から繋がらない.
これに気づくまでに半日かかった.アホだ……
閑話休題.
とりあえず動くようになったので動かしたら並列化の効果ばっちり.数の暴力バンザイ.
- Comments: 0
- TrackBack (Close): -
Hadoop で大いに嵌った
- 2011-08-04 (Thu)
- プログラミング
ほとんど同じパターンで Hadoop を使いまくるので,面倒だから Hoge というクラスに Hadoop を動かす部分を全部書いておいて,それを jar に固めて $HADOOP_HOME/lib に入れておいた.使うときには,下みたいに Hoge にパラメータとなるクラス(例えば Fuga)を引数で渡すという形にする.
bin/hadoop jar Fuga.jar Hoge Fuga
で,Hoge の Hadoop 呼び出し部分を何も考えずに
public static void main(String[] args) throws Exception { //... job.setJarByClass(Hoge.class); //... }
とか書いて動かそうとしたら,Fuga のクラスが見つからねぇと Mapper の初期化時辺りに怒られまくった.しばらく理由も分からず…… 3時間ほど独り Hadoop 読み会をした.
結局のところ,job.setJarByClass の引数に Fuga.class のほうを指定しておかないとそれを含む Fuga.jar をワーカに転送してくれない,というオチ.こんなことそこら辺のドキュメントにちゃんと書いてあるような気もするけど,頭の中ではただのおまじないになっていたので全然気づかなかった.アホ.
でもまあ,ぶっちゃけコマンドラインに指定した jar を job.jar として転送してくれる設計でよいと思うのだけど,なぜにわざわざクラスをひとつ指定してそれを含む jar を job.jar として転送するとかいう仕様になっているのだろう?
とりあえず -libjars, -files, -archives で問答無用に必要なファイルを指定しておくのがよいのかもしれない.
閑話休題.
コードを読んでみての感想:org.apache.hadoop.mapred と org.apache.hadoop.mapreduce を行ったり来たりしているのでとても汚い.キレイな Hadoop が欲しい.
- Comments: 0
- TrackBack (Close): -
文字コードとの戦い,というか,行儀の悪い html との戦い
- 2011-08-01 (Mon)
- プログラミング
Python で web のクローラを書いてるのだけど,文字コード周りで行儀の悪いページとの戦いが…… こちらの武器は chardet と encutils とで.
行儀のよいファイルだけなら encutils で判定して終了なのだけど,世の中 ISO-2022-JP と宣言して EUC-JP を使うようなページも平気であるので困る.ここらは実際に unicode へ変換してみてエラーが出たら chardet の解析結果を使うとかで対処.
んで,一見行儀の良さそうな sjis ファイルなのだけど実は丸の中に数字の入った文字を含む cp932 だったりとかもある.大量に.行儀悪い.更に悪いことに,chardet が自信満々 (confidence = 1) で cp932 を sjis 判定してくれるので困る.面倒なので sjis は全部 cp932 として扱うと幸せかも知れない.
あとは x-euc-jp とか x-sjis とかも python は認識してくれないので手動で置き換えを……
とりあえず chardet と encutils の併用と sjis を cp932 に置き換えるのとでだいぶ安定してきた.
というか,ページ内でコードが違うとか何考えてるんだろう?
- Comments: 0
- TrackBack (Close): -