seri::diary::graduate_school

大学院修士課程での研究生活について書いています

引っ越しに向けた準備を始めた

2018年1月3日

引っ越しはいつもgithubのissueでタスクを管理しているのだが、つくば市への引っ越しが近づいてきたので今回も立てた。

f:id:serihiro:20180103174531p:plain

社会人になってからの引っ越しもかれこれ5回目ぐらいか。2~3年ぐらいで転職したり、転職せずとも地方でリモートワークしてみるとか色々と変なことをしていると引っ越しの回数が増える。面倒だが引っ越しはいろいろとリフレッシュできて良いものだ。

流石に慣れてきたもので、今回も引っ越す日から逆算して各タスクの手順とスケジュール感のメドがついている。しかし、今回は追加で国民年金加入手続きと関東ITSの任意継続もしなければならない。これは初めての経験だが、国民年金は市役所で手続きし、関東ITSの任意継続は書面をシュッと送ればシュッとやってくれるらしい。

近況

2017年12月29日

継続して Expert Hadoop Administration: Managing, Tuning, and Securing Spark, YARN, and HDFS を読み続けてるのだが、如何せんページサイズが多いのでなかなか進んでいない。
しかも1/4ぐらい読んで気づいたのだが、序盤はHadoopの基礎的な説明に終始していて、完全に飛ばしていい部分だった。それを頑張って1か月ぐらいかけて読んでいたのだが、結局全部知ってることだった。自分が知りたいのはHDFSの内部アーキテクチャMapReduceの処理の詳細(できればHadoop2.x以降のYARN版)だったが、それらは後半以降にならないと出てこない内容だった。

英語の文書の場合、どうしても読むスピードが遅い関係で、自分にとって必要かどうかを判断するのが日本語の書籍と比べて相当遅くなるということを実感した。逆に、だからこそ目次を見て各章の最初だけをちょろっと読んで必要かどうかを判断していく読み方の方がいいのかもしれない。英語の勉強も兼ねて頭から読んでいたつもりだったが時間効率は非常によくなかった。しかもこの本は平易な語彙や表現だけを使うように意識してくれているのか、語彙力のない自分でもスラスラ読めてしまうので、勉強という面でもあまり向いてなかったかもしれない。

また、MapReduceの理解のために自分でRubyMapReduceフレームワークを実装してみた。まだ完全ではないが、Map taskとReduce taskのソースコードの文字列をhttpでPOSTしてjobを登録し、map taskを1node, reduce taskを2nodeで実行して、結果をS3(またはS3互換ストレージ)に格納できるようになった。1

qiita.com

分散ファイルシステムのdata localityを無視すれば作るのは割と簡単だと思っていたが、node管理がなかなかに面倒だったり状態遷移が必要なことをすっかり忘れてたりして思ったより時間がかかった。(実作業時間で多分50時間ぐらい。当初は30時間ぐらいだと思ってた。)しかし1回作ってみることで分散システムにおける必要な要素を身をもって勉強できたので良かったと思う。

また、map taskを分散させるためには結局jobのinputとなる分散ファイルシステム上のファイルを分割して読み込む仕組みが必要だと気付いた。当たり前なのだが、これってHadoopではどうやってやってるんだろと疑問に思った。 例えば、HDFS中の1blockが128MBだとして、そこに1GBの単一ファイルを格納するとなると1000MB / 128MB = 7.8125 であり、8blockに分割されて格納される。しかし、MapReduceにおけるinputの1recordはdelimiter区切りであるため、blockの境界部分で1recordが2つのblockに分断されてしまうことになる。こうなると、境界部分のrecordは2つのblockをreadする必要があり、場合によっては別のdata nodeに格納されているdata blockをreadしにいかなくてはならなくなる。逆に、この処置をしない場合は境界部分の不完全なrecordは無視せざるを得ない。これをHadoop MapReduceではどのように解消しているのか気になったので調べてみた。

なお、HadoopMapReduceのClientに関するソースのpackageは2種類存在する。mapredmapreduceである。 詳細は下記のStackoverFlowの回答が詳しいが、mapredの方が古いpackageであり、commit logを見てみも現在積極的に機能追加されてるのもmapreduceのようだ。

stackoverflow.com


  1. 開発中はS3の代わりにminioを使っている

MapReduceむずい

2017年10月30日

MapReduce実装としてHadoopの論文を2個ぐらい読んでMapReduce少しぐらいは理解できたかなーと思ってたけど、よく考えるとあれってどうなってんだ?とか俺の理解だと矛盾してるっぽい?みたいな箇所がちょこちょこ出てくることが多く、なんだかんだで「Hadoop MapReduceのこと、分かってるつもりだったけどよく分かってなかった」という結論になってきた。

Hadoop MapReduceは一時期爆発的な人気があったらしく、ネットを漁ると大量のチュートリアルや解説記事が見つかる。しかし、よくよく読んでみると、ある記事はバージョン0.20ぐらいを前提として書いていたり、またある記事は1.xだったりと、情報リソースによって書いてあることが色々と違ってたりする *1 すでにHadoopブームが去った2017年に、ネットの情報だけで体系的にHadoop MapReduceアーキテクチャについて理解し、最新の情報まで知識を繋げていくのは結構難しいということが分かってきた。こういう時に有料の論文掲載サイトで論文読み放題だとよいのだが。。

なので情報リソースは一旦この本に絞ることにした。

出版が2016年11月と比較的最近であることと、作者は本を書くためにHadoopを勉強した人とかではなく、実務でHadoop clusterを6年間運用してきた人物であることから、比較的正しい理解が得られそうな気がしたというのが選定理由である。

あとはHadoop公式tutorialがある。かなり長いがこれ以外に今のところ信用できるhadoopの最新のdocumentはなさそう。

*1:のだが、日付が書いてないことが多くて意外と気づかない

空いた時間で何を勉強するか

2017年10月26日

相変わらず普通に会社員として過ごしている。特に変わったことはない。 シラバスを眺めて何の講義を取ろうかと考えたりしてみても入学はまだまだ先。

だが、そろそろ自分の研究以外の空いた時間に何を勉強するべきか整理しなくてはならない。 せっかくなので、自分が勉強したことがない分野や、普段はAWSGCPやherokuに任せきりで全く気にしていないような所を勉強したいと思っている。

ざっくり書き出してみる。

  • tcp/ip
  • http2
  • dns
  • ssl/tls
  • rpc
  • n/wレイヤーのsecurity
  • osの基本構造
  • strage
  • 最近のcpuのアーキテクチャについて(パタヘネの続きにあたる部分)
  • gpu
    • そういえばCUDA触ったことない
  • openmpi
  • cpu自作

2018年01月14日追記

  • どこで管理するか悩んだが、結局githubのprivate repositoryにまとめてみた
  • githubのproject機能を使ってざっくりジャンル分けしてみたが、zenhubと比べるとかなり使いづらいというか機能が足りてないのでkanbanとして使うには結構ビミョーな感じ…
  • とはいえzenhubにお金払って使うのもtoo much感あるので一旦これで頑張ってやってみる。がんばれGithub

f:id:serihiro:20180114203657p:plain

合格通知書届いた

2017年9月14日

f:id:serihiro:20170914195753j:plain

格通知書が届いた。

9月12日に合格者宛に合格通知を発送する、と大学のサイトには書いてあったのだが、都内にも関わらず翌13日には届かなかったので、自分の目がバグって合格した幻を見ていたのかなと思っていたが、現実でも合格したようだった。

なんかすぐに書類書いて返送するのかなと思ったら、2月16日に入学手続きのための書類一式が送られてくるので、辞退しないのならそのまま何もせずに待っていればよろしいらしい。簡単だ。でも2月は引っ越しの準備とかでバタバタしそうだな。早めにやろう。

院試だと入学まで時間があるのでだいぶ余裕があってよい。学部の時は3月上旬に合格発表で、すぐ入学手続きの書類を書いて返送して、下宿先も探して、4月には入学、という超タイトなスケジュールだった。そう考えると3月、4月頃の入試課の事務対応は相当大変な仕事だろうなぁと思われる。

院試結果発表日

2017年9月12日

ついに来た院試の結果発表日。Jeff Deanに祈りながら恐る恐るwebで確認した。

f:id:serihiro:20170912105037p:plain

見間違えでなければ受かったっぽい。

9月入ってから、落ちる夢(最多)とか、落ちた後にやさぐれる夢とか、筑波大学のオンライン出願システムを実装してる夢とか、よくわからない夢を毎日見て夜中に何度も目が覚めるようになってしまい、完全に寝不足になっていた。

結果発表までのこの2週間ぐらいの期間が人生で一番つらかったかもしれない。

大昔の大学(学部)受験の結果発表の時は、センター試験の点数を志望校別にgroup byしてorderした結果をオンラインで見られるサイトがあって、そこを見たらtop5に入ってたので二次は大丈夫だろう(しかも科目は得意な生物だけだったので)という確信があったので全く怖くなかった思い出がある。

しかし今回は全くの逆で、engineer系degreeもなく、業務での研究経験もなく、30過ぎのおっさんという、受かる要素が全く見当たらないおっさんの受験であったため、このブログにも散々書き散らしたけど本当に怖かった。

でも受かってしまえばもう過去のことなので気にはならない。

あとは入学までに今の職場を円満に辞めることと(この業界はとてつもなく狭いので)、英語力を鍛え続けることと、先行研究についての調査を進めておくことが今後の課題になる。

ともあれ、おっさんの無謀な挑戦も、ようやくスタートラインに立つことができた。とりあえず今は素直に喜んでいる。

院試が終わって一週間ちょいが経った

2017年9月2日

合格発表までまだ10日間ある。長い。 TOEICも口頭試験も、出来がよかったという実感がないので不安でしょうがない。

そのせいか最近は、どこかに行こうとしているのに色々な理由で辿り着けなくて必死に焦る夢をよく見る。

気を紛らわそうとも仕事もそれほど忙しくない。プライベートのイベントも何も入れていない。

これまで半年間やってきたことがいったん終わって気が抜けてしまったのか、試験が終わってからの一週間は、何もする気にもならなかった。

とりあえずTOEICの勉強に再度取り組み始めた。

ある程度リスニングも点が取れるようになったらDMM英会話でもやってスピーキングも強化していきたいと思うが、これはもう少しボキャブラリーを増やしてからの方がいいだろう。DMM英会話は周りでもやっている人がそれなりにいて評判も良いのだが、果たして自分が求める成果が得られるものなのかどうかだけが不安だ。

時間とお金をかける以上、ちゃんとリターンを得たい。ただ英語で会話をして、それで満足して、結局1単語も1フレーズも新しく覚えられないし、聞き取れるようにも喋れるようにならない、というのが一番怖い。もっとも会話というのは、それこそいかにスムーズに単語が出てくるようになるかという部分の訓練なのだろうけど、今の自分に必要なのは英文を高速で読んで英語で要約する能力だ。そう考えると、どうにもオンライン英会話を始める気になれないでいる。

それはともかく院試の結果だ。それがどうにかならない限り何も変えることができない。

どうか自分を、今と違う世界に連れて行って、好きなことを勉強する時間を与えてはくれないだろうか。それとも、やはり若い時に選択を間違えた人間には、もう立ち戻ることができない世界なのだろうか。

落ちたらどうするかということも色々考えてはいるけど、正直今の生活は自分にとってつらいとばかり感じるので、いずれにせよなにがしかの変化が必要な時期なんだろうと思っている。