blog.8-p.info

ディスク容量が一定以上になったノードが unhealthy になって、クラスタからどんどん引退して困っていたんだけど、データノードを追加して hdfs balancer を実行することでなんとかなった。

基本的には Hadoopのバランサー実行中に dfs.datanode.balance.bandwidthPerSec を変える にある通りだけど、2.7 では

それぞれ変わっているので、結果として

[hadoop@ip-192-0-2-1 ~]$ hdfs dfsadmin -setBalancerBandwidth $(ruby -e 'p 1024 ** 3')
Balancer bandwidth is set to 1073741824
[hadoop@ip-192-0-2-1 ~]$ hdfs balancer
...

こんな感じになる。

“showstopper” といえば『闘うプログラマー』の原題であり「ショーを止めてしまうような深刻な問題」という悪い意味の単語だと思っていたんだけど、実は別の意味があることを The Great British Baking Show を見ていて知った。

番組の中で、毎週のトリの大勝負を “Showstopper Bake” といっていて、ここでの意味は「拍手が鳴り止まなくてショーを止めてしまうような、素晴らしい演技」からきている「すばらしい作品」というような意味らしい。The Jargon File の showstopper の項 にも

A hardware or (especially) software bug that makes an implementation effectively unusable; one that absolutely has to be fixed before development can go on. Opposite in connotation from its original theatrical use, which refers to something stunningly good.

と、ちゃんと書いてある。

blocker

会社やチームによって差があるのかもしれないけど、私のまわりで “showstopper” はあまり使われていない。どちらかというと “blocker” という単語のほうがよく使われているように思う。

“The issue is a launch blocker” みたいに名詞にもなるし “This issue blocks their deployment” みたいに動詞としても使える。

fishy と red herring

バグ以前の「あやしい」は fishy, 一方で「あやしいけどこれは原因じゃなかった」は red herring と、なぜだか魚がらみの単語が使われる。

書こうと思ったら、すでに高林さんも宮川さんも書かれていて、追記することが無い。

O’Reilly の Safari という定額読み放題サービスがあって、すこし前に 生涯半額セール をやっていた。半額でも毎年 $199 はそれなりの金額なので、入るか入るまいかだいぶ迷ったあげく、結局 Association for Computing Machinery に入りなおした。

Association for Computing Machinery (ACM) は、いわゆる Computer Science の学会だ。会員むけに配布されている雑誌の Communications of ACM (CACM) については、数年前に morrita さんが紹介 していた。そのほかにもいくつか特典があって、そのひとつの ACM Learning Center に Safari の一部が読み放題になるサービスが含まれている。

CACM が毎月とどいて、Safari の一部を読めて、それで毎年 $99 なら、まあよいかと入りなおしてみた。実は以前にも同じような判断をして入って、そのときはあまり使わないなというので止めてしまったんだけど、でも当時よりは英語も読めるようになっている、はず。

Safari を何で読むか

Safari の iOS/Android むけアプリケーション には Safari Queue という現行のものと、Safari To Go という古いものがあって、残念ながら ACM の Safari は後者にしか対応していない。

そもそも iPad も Android タブレットも手元にないので、いまは Safari のウェブ版を Fire で読んでいる。わるくない、けどもうちょっと画面の大きなタブレットがほしい気もする。

2018-09-02: 追記

その後に改訂があって

Check Out the New Enhanced Safari Learning Platform

Your ACM Professional Membership now gives you access to the new Safari Learning Platform. This means that you will now have access to Safari’s entire collection of 40,000+ online books from O’Reilly and other top publishers; 4,900+ video courses and O’Reilly conference videos; 200+ learning paths; 300+ live online training classes; and more new features, including the new mobile Safari Queue app for iOS and Android with enhanced functionality.

Safari もすべて読めるようになったし、Safari Queue も使えるようになりました。

2022-04-12: 追記

ACM のメールより;

As of July 1, 2022, you will no longer have to access the O’Reilly Learning platform as a benefit of your ACM membership. Despite our best efforts, O’Reilly Media is unwilling to continue to license their content to ACM for members. Please finish your reading/training by 11:59 PM ET on June 30, 2022. If you wish to continue accessing O’Reilly Learning past this date, you will have to contact O’Reilly and purchase a license directly.

残念ながら、ACM 経由でのアクセスはなくなるようです。アメリカでは公共図書館が O’Reilly へのアクセスを提供していることもあるので、こちらに期待。

Jupyter から Hive を使うのに PyHive + ipython-sql が便利だった。

PyHive

PyHive は Hive の Thrift クライアントを DB-API 2.0 (PEP 249) 準拠の API でラップするライブラリだ。DB-API は Python でデータベースにアクセスするための標準的なインターフェースで、Perl の DBI や Java の JDBC に相当する。

PyHive と pandas.read_sql があれば、とりあえず SQL の結果を pandas に読み込むことはできるようになる。

ipython-sql

世の中には「SQL を書くのは最初だけで、pandas に読み込んでからが本番」という仕事をしている人もいるんだろうけど、私の場合は SQL 上でいろいろすることのほうが多いので ipython-sql も使っている。

これがあると

pd.read_sql("select * from ...", conn)

ではなく

%% sql
select * from ...

というふうに、セルに直接 SQL が書けるようになる。

落とし穴: DB-API とプレースホルダ

Python の DB-API にはプレースホルダ構文があるので、ipython-sql でもそのことを意識する必要がある。

ipython-sql の README.rst には

Bind variables (bind parameters) can be used in the “named” (:x) style. The variable names used should be defined in the local namespace

と書かれているけど、この前半の :x 形式が使えるかは DB-API の実装に依存している。

PyHive の場合は pyformat という printf 風の形式にのみ対応している ので、結果として

%% sql
select * from developer where name like '%steve%'

なんてクエリを実行しようとすると

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-983b54b86e01> in <module>()
----> 1 get_ipython().magic(u"select * from developer where name like '%steve%'")

/Users/kazuyoshi/src/jupyter-work/lib/python2.7/site-packages/IPython/core/interactiveshell.pyc in magic(self, arg_s)
   2156         magic_name, _, magic_arg_s = arg_s.partition(' ')
   2157         magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
-> 2158         return self.run_line_magic(magic_name, magic_arg_s)
   2159 
   2160     #-------------------------------------------------------------------------

...

/Users/kazuyoshi/src/jupyter-work/lib/python2.7/site-packages/pyhive/hive.pyc in execute(self, operation, parameters, async)
    227             sql = operation
    228         else:
--> 229             sql = operation % _escaper.escape_args(parameters)
    230 
    231         self._reset_state()

TypeError: not enough arguments for format string

というエラーになってしまう。'%%steve%%' とエスケープする必要があり、ちょっと面倒くさい。

I'm back!

Sep 5, 2016

2017年からは 2017.8-p.info を作らないで blog.8-p.info に書こうと思って細々と準備していたんだけど、はてなの 社内技術勉強会で「技術ブログを書くことについて」発表しました が良かったので、日本語ブログだけ一足先に引越すことにした。

タイトルは、朝永振一郎の「滞独日記」から。「舎路」はシアトルと読みます。