No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 907 | 908 | 909 |...| 1186 | 1187 | 1188 || Next»

ひったくり未遂にあう

バイクの洗車を終え,水を拭き取るのに使ったウエスを入れた袋を右手に下げ,大通りから一本内側の道を歩いていた.そしたら,後ろからやってきた二人のり(2種?)原付スクーターにウエス入りの袋をひったくられそうになった.

前から歩いてきた爺さんを避けようと道の左によったのが敗因.その直後に,バイク来たなー → 何か袋が引っかかったなー → 引っ張られてるなー → 袋をちゃんとつかんで引き寄せよう → バイク逃走 → むかつくからしばらく走って追いかける → 人間の足では原付に勝てません.

赤羽岩淵病院の裏あたり,18時30分頃.暗かった&私の目が悪いのでナンバーは見えず.残念.ウエス入りの袋を盗られてたほうが話としては面白かったのかも知れない.

とりあえず,荷物を手に持って歩くときは建物側に持っておきましょう.小道ではなく大通りを歩きましょう.後ろからバイクが近づく音がしたら振り返って確認しましょう.変に近づいてきたらケリを入れましょう.スタングレネードぐらい用意しておきましょう?

犬吠埼から房総半島一周

犬吠埼で日の出を拝もうと出発.ついでに鋸南町の河津桜(頼朝桜)の様子見に行くことに.結局房総半島を海岸線に沿って約一周した(西側は面倒になって館山自動車道に乗ってしまったけど).450キロくらいで12時間くらい?

ということで犬吠埼の灯台.寄り道してたら意外と時間食って到着時には日の出直前.ちなみに房総半島最東端とのこと.

で,日の出.天気が良さ気なので期待していたけれど,またもや海から直接の日の出は見られなかった.けどまあ,これまでで一番低い位置で雲から出たのでそれなりに満足.低い位置だと赤さが違う.

おまけで満月.地球の丸く見える丘展望館の近くで撮影.展望館自体は当然のごとく閉まってたので路上から.暗い夜の満月の月出とか良いかも知れない(無理).

あとはひたすら館山経由鋸南町へとひたすら海岸線を走行.強風のため砂浜近くでは砂が飛びまくりバイクのボディに砂がこびりつく.そんな状態なので給油のためにタンクバッグをずらしたら傷が…… 細かいキズはもう気にしない.折を見てまたコーティングすりゃいいや.

道中,房総半島最南端の野島埼と房総半島最西端の洲崎によった.これで残すところは房総半島最北端のみ.……どこだろ?

そんで,鋸南富山のICから佐久間ダムへ向かおうとしたらいつもの道が全面通行止.しょうが無いので迂回路へ.この時期は桜の見物客も増えてきているので迂回の車がそれなりに連なって迂回路を進む.んで,先頭の車が迷う.

結局無事に佐久間ダム湖に着いたけれど,桜はまだまだだった.残念.規模も今ひとつどの程度なのか分からず.水辺である必要がなければ松田に行くほうが良いかも知れない.元気があれば河津町が良いけど伊豆半島は高速道路的意味で発達不良なので悩ましい.

考え事

死亡保障が終身な掛け捨てで短期払いの保険はないものか? まあ,解約払戻金を減らした低解約返戻金型終身保険は存在するのでそれがそうであるといえばそうなのだけど.あれって減らし具合が微妙なんだよな…

結局のところ,積立型で短期払いな終身保険って意味ないような気がしてきた.解約してお金返って来ても保障自体がなくなってしまうので困る.なので解約できないしお金も手元に戻せない.掛け捨てにして余ったお金を別途運用し続けるのがマシ.

まあ,定期払いで終身保障にするための上乗せ分だと思えば妥当なのだけど.

うーん,具体的なモデルとパラメータが欲しい.

靴が…

いつも履いている靴がどこも売り切れ中.ちょうど欲しいサイズがメーカー在庫無し.モデルチェンジでもするのかたまたま品切れなのか… 何れにせよ今履いているヤツはつま先の底がかなりすり減ってしまっていて,歩行中地面を蹴るときに滑りまくって効率が悪い.昨日の雪でも結構滑ったし.

靴の新調は確定として,別の靴にするかどうかが悩ましい.

Hadoop で忘れがちな点

ひとつのファイルは HDFS 上に物理的にチャンクに区切られて置かれる.FileSplit はひとつのファイルを論理的に区切ったもの.ひとつの FileSplit に対して Map のジョブひとつが対応して実行される.細かくは,ひとつの FileSplit がひとつの RecordReader を生成し,その RecordReader がその Map ジョブへと Key/Valueペアのリストを提供する.このとき,その RecordReader はその FileSplit で指定された論理的な領域を越えて(HDFS上にあるだろう)元のファイルを読み込むことが出来る.

一般に,HDFSのチャンクはFileSplitではないし,FileSplitとMapジョブに提供される仕事とは完全に一致はしない.

実際,デフォルトのTextInputFormatが作るRecordReaderは,与えられたFileSplitの最終行を完成させるため,次のFileSplitの境域へと境界を越えて最後の行を読みに行く.例えば,改行なしの大きなファイルを入力とすれば,最初のFileSplitから作られたRecoardReaderは改行を求めてファイル全部を読んでしまう.結果として,先頭のMapジョブはファイル全体を入力として受け取る.

Hadoop に言うことを聞かせるまでのメモ

大体にしてインストールというかセッティングが面倒なので手順のメモ.

  1. ダウンロードして展開.クラスタの場合,本体の置き場所は NFS 上にしとくとインストールが楽(ログのディレクトリに注意).さもなければ全マシンの同じパスに置いておくべし(パスをマシンごとに変えていいのかどうか分からん).
    wget http://ftp.kddilabs.jp/infosystems/apache//hadoop/core/hadoop-0.21.0/hadoop-0.21.0.tar.gz
    tar xfvz hadoop-0.21.0.tar.gz
    cd hadoop-0.21.0
  2. 環境ファイル conf/hadoop-env.sh の編集:JAVA_HOME と HADOOP_HEAPSIZE と HADOOP_LOG_DIR.

    ログの出力先はデフォルトで hadoop の置いてあるディレクトリ(HADOOP_HOME)の下の logs ディレクトリなので,これが NFS 上だったりすると酷いことになる.なので,ローカル上に取るように指定を入れておく.

    export JAVA_HOME=/usr/lib/jvm/java-6-sun/
    export HADOOP_HEAPSIZE=2048
    export HADOOP_LOG_DIR=/tmp/user/node000/logs
    
  3. 設定ファイル conf/slaves:計算に使うノード名を列挙.

    node000
    node001
    node002
    node003
    ...
    
  4. 設定ファイル conf/core-site.xml の編集.

    namenode として使う計算機の名前(URI)を書いておく.マルチコア計算機1台なら localhost で十分.クラスタの場合には localhost ではまずいので,ちゃんとした計算機名前を書いておく.

    <configuration>
         <property>
             <name>fs.default.name</name>
             <value>hdfs://node000:9000/</value>
         </property>
    </configuration>
    
  5. 設定ファイル conf/hdfs-site.xml の編集.

    dfs.name.dir と dfs.data.dir に /tmp とかローカルなディスクのパスを書いておく(設定書かなくてもデフォルトで /tmp に適当なディレクトリを作って使ってくれるけど).NFS上のパスを指定するのは何考えているか分からない.あとは dfs.blocksize (HDFS上のチャンクのサイズ)を適当に変えてもいいかも知れない.Mapper への一仕事の最大値はこのサイズ.

    <configuration>
         <property>
             <name>dfs.name.dir</name>
             <value>/tmp/user/node000/name-dir/</value>
         </property>
         <property>
             <name>dfs.data.dir</name>
             <value>/tmp/user/node000/data-dir/</value>
         </property>
         <property>
             <name>dfs.blocksize</name>
             <value>4194304</value>
         </property>
    </configuration>
    
  6. 設定ファイル conf/mapred-site.xml の編集.

    とりあえず,mapred.job.tracker に JobTracker のいる計算機の名前を書いておく.マルチコア1台なら localhost で十分.クラスタなら計算機名をちゃんとかく.あと,計算が軽い時には JVM を使い回さないと遅くて困るので mapred.job.reuse.jvm.num.tasks に無限回の使い回しを意味する -1 を入れておく.ノード一つ当たりのジョブの数は mapred.tasktracker.map.tasks.maximum と mapred.tasktracker.reduce.tasks.maximum で指定しておく.マルチコアならコア数以上のジョブが同時にあって構わないので,コア数以上の数字を書いておく(2コアマシンしか無いのに200とか書くとプロセスが多すぎて死ぬ).また,Hadoop ではひとつのファイルを複数の FileSplit に分割し,その FileSplit 1つに対して Mapper が1つ呼ばれて動く(間に RecordReader が挟まって「FileSplit→KVペアの集合」という変換が入るけど).その FileSplit のサイズ指定が mpreduce.input.fileinputformat.split.maxsize でできる.実際には,これで指定したサイズと HDFS のチャンクサイズとの小さいほうが実際の FileSplit のサイズになる(全タスク数の指定を入れたときには,さらにそこから導かれるサイズとの小さいほうかね).

    <configuration>
         <property>
             <name>mapred.job.reuse.jvm.num.tasks</name>
             <value>-1</value>
         </property>
         <property>
             <name>mapred.job.tracker</name>
             <value>node000:9001</value>
         </property>
         <property>
             <name>mapred.tasktracker.map.tasks.maximum</name>
             <value>2</value>
         </property>
         <property>
             <name>mapred.tasktracker.reduce.tasks.maximum</name>
             <value>2</value>
         </property>
         <property>
             <name>mapreduce.input.fileinputformat.split.maxsize</name>
             <value>4194304</value>
         </property>
    </configuration>
    
  7. テスト.

    namenode を初期化して,他のノードを起動して,最初にディレクトリ作って,そこにファイルを転送して,サンプル動かして,出力確認して,邪魔な出力消して,そしてノード停止.

    bin/hadoop namenode -format
    bin/start-all.sh
    bin/hadoop fs -mkdir input
    bin/hadoop fs -put conf/* input
    bin/hadoop jar hadoop-mapred-examples-0.21.0.jar grep input output 'dfs[a-z.]+'
    bin/hadoop fs -cat output/*
    bin/hadoop fs -rmr output
    bin/stop-all.sh
    

これで言う事聞くようになった.

その他無茶な設定 in conf/mapred-site.xml:なるべくディスクつかなわいように無理をする.

     <property>
         <name>io.sort.record.percent</name>
         <value>1.0</value>
     </property>
     <property>
         <name>io.sort.spill.percent</name>
         <value>1.0</value>
     </property>
     <property>
         <name>io.sort.mb</name>
         <value>4</value>
     </property>
     <property>
         <name>mapred.inmem.merge.threshold</name>
         <value>2048</value>
     </property>
     <property>
         <name>mapred.job.reduce.input.buffer.percent</name>
         <value>1.0</value>
     </property>
     <property>
         <name>mapred.job.shuffle.input.buffer.percent</name>
         <value>1.0</value>
     </property>
     <property>
         <name>mapred.job.shuffle.merge.percent</name>
         <value>1.0</value>
     </property>
«Prev || 1 | 2 | 3 |...| 907 | 908 | 909 |...| 1186 | 1187 | 1188 || Next»
Search
Feeds

Page Top