まだまだbash初心者だった…

macでechoの出力に色付けたいのに付かない!
coreutils入れたのに!
と悩んでたら、なんと、echo は bash builtin にもあり、フルパス指定するかaliasしないとbuiltinが使われるということを今更知った…

コマンドを探す優先順位はこちら。
“応用力”をつけるためのLinux再入門(8):PATHを理解して、コマンドの在りかを探してみよう (2/3) - @IT

linuxに入ってたbash4のechoでは色つけることができたが、macのデフォのbashのechoではダメだった。
aliasしても子プロセスはデフォルトでは無視してしまう。

てか、macにbash4入れてた。
shebang#!/bin/env bash に変えたらlinuxみたくechoで色付いた…
(てか、macにbash4入れたのにiterm2の設定でログイン・シェル変えて無かったことにも気づく…)
なお、/bin/env は mac にはデフォでは無いのだが、シンボリックリンク貼っといた。

ちなみに、shoptというコマンドを今更知った…
shoptコマンドで設定できるbashの便利設定まとめ | 俺的備忘録 〜なんかいろいろ〜

aliasしても子プロセスでは無視されてるっぽかったが、expand_aliasesが対話シェルだとon、そうでなければoffであるためのようだ。

そして type コマンド。そりゃ、そういうコマンドもあるよねえ…

また sublime linter で rubocop が動かなくなった!

と思ったら、rbenvで切り替えたversionにrubocop入れてないだけだった…

hiveのloadコマンドに謎の制約

LOAD DATA LOCAL INPATH '/dir/_hoge' ...
みたく、ファイル名が “_” 始まりのファイルをLOADしようとしたら、何故か「そんなファイルはねえ!」と怒られエラーになった。

回避策としては、頭にワイルドカード入れる。以下なら正常終了。
LOAD DATA LOCAL INPATH '/dir/*hoge' ...

Hive 1.2.1000.2.5.0.0-1245 (HDP 2.5.0.0-1245) にて確認。

process substitution は bash とかでないと使えないぽい。

shebang#!/bin/sh と書いてたり、 sh hoge.sh とかで実行した際、ときどきbash以外のshellが起動されるのか、process substitution のコードがエラーになることがある。
#!/bin/bash とか bash hoge.sh とかすると動いた。

Mapper/ReducerではrunというメソッドもOverrideできる

ということを今更知った。 runのデフォルトの実装の中で、setup, map/reduce, cleanup を呼び出している。

Mapper (Apache Hadoop Main 2.7.3 API)

Reducer (Apache Hadoop Main 2.7.3 API)

参考:in-mapper combining(MapReduceデザインパターン) | mwSoft

自作クラスでHadoopのGeneric Optionsを使えるようにする。

最近、Hadoop忘れてきたのでメモ…

自作クラスにToolを実装させればHadoopのGeneric Optionsを解釈してくれるようになる。

Generic Options

つまり、-confオプションでHadoopの設定を上書きしたりできるようになる。

attrbuteに対する||=でハマる。

class some_class
  attr_accessor :hoge

  def some_method
    hoge ||= "value"
  end

この5行目で、hogeのアクセサが呼ばれるのではなく、hogeという新しい変数が定義されてしまう…

@hoge ||= "value"

とするしかない。