Java(Kotlin)でHDFS上のファイルを操作する

org.apache.hadoop.fs.FileSystemについては以下参考
https://hadoop.apache.org/docs/r2.6.2/api/org/apache/hadoop/fs/FileSystem.html

多分copyFromLocalFiledeleteexistsrenameあたり頻繁に使うのではないかと思います。今回は基本的なファイルのアップロード部分だけまとめました。

val conf       = new Configuration();
val localPath  = Path("/Users/name/hoge")
val uploadPath = Path("/path/to/hoge")
conf.set("fs.defaultFS", "hadoop.example.com");
uploadPath.getFileSystem(conf).copyFromLocalFile(false, false, localPath, uploadPath);

参考
http://kikumoto.hatenablog.com/entry/20090609/1244557489
http://blog.livedoor.jp/kerorou/archives/34546490.html

Macのhomebrewをマルチアカウントで使う

基本的な解決策

いくつかの方が試している方法の中から自分にあってると思ったのはこれら

要は所有者ではなくグループに対しての権限を付与すれば良さそうだ。その際、staffに権限付与するケースもあるみたいだけど、今回は管理者レベルのアカウントで使えれば良いのでadminに付与する方法でやることにした。

sudo chgrp -R admin /usr/local
sudo chmod -R g+w /usr/local

上記の作業を行うとhomebrewがおかしくなるので、おかしくなった場合は以下の方法でリフレッシュする。
https://github.com/Homebrew/homebrew-versions/issues/1383

docker for macを使っている時にdockerコマンドが使えない

以下のようなエラーが出る

$ docker ps
zsh: permission denied: docker

brew install dockerをした直後では動くんだけど、ユーザーを切り替えて戻ってくると権限エラーが出るようになる。dockerコマンドを見ていると、brew install dockerした直後は/usr/local/Cellar/dockerにシンボリックリンクが貼ってあるんだけど、ユーザーを切り替えると/Users/name/Library/Group Containers/group.com.docker/bin/dockerを見てしまう。つまり、homebrewで入れたのとは別のdockerコマンドに勝手にシンボリックリンクがユーザーを切り替えると貼られてしまうようだ。

原因はおそらくdocker for macで、起動するときに各種コマンドへのシンボリックリンクを貼る動きをしているっぽい気がする。docker for macってdocker-machineの代替物のように思っていたけど、いろいろとやってくれるんだね。

これの解決策だけど、すべてのアカウントでdocker for macを使えばそれぞれのdockerコマンドにシンボリックリンクが貼られるので、動きとしては問題ないと思う。あとで混乱するのでdocker for macを使っている場合は、brewで入れたdocker関連のものはuninstallしておくと良いと思う。

その他

他に問題が出たら都度追記していきます。