Memo

Twitterに書くには長すぎることを書きます。Opinions are my own.

Apache Hadoop 3.3.1がリリースされました

2021/6/15にApache Hadoop 3.3.1がリリースされたので、リリースしてからしばらく時間が経つけどまとめておきます。

Hadoop 3.3.1に対する個人的な所感

Hadoop 3.3.1はHadoop 3.3.0からおよそ1年後にリリースされました、1年も経っているので、普段のbug fix releaseでは考えられないほどの修正がされ、もはやHadoop 3.2.0とHadoop 3.3.0との差分よりもHadoop 3.3.0とHadoop 3.3.1との差分のほうが大きいのではないかと思っています。Hadoop CommonとHDFSを中心に、その大きな差分についてこれから紹介していこうと思います。

NameNodeLayoutVersionの更新

Hadoop 3.3.1では、なんとNameNodeLayoutVersionが上がっています。普通のbug fix releaseではもちろんそんなことはないし、Hadoop 3.2.0とHadoop 3.3.0でもNameNodeLayoutVersionは同じなのですが、今回のリリースでは [HDFS-15566] NN restart fails after RollingUpgrade from 3.1.3/3.2.1 to 3.3.0 - ASF JIRA の問題を解決するために、例外的にバージョンが上がることになりました。そのため、NameNodeのバージョンを上げるときには起動時に -upgrade オプションが必要となります。

hadoop-thirdpartyの登場

HadoopはGuavaとProtocolBuffersというライブラリに大きく依存しています、これらのライブラリはあまりに多くのJavaのプロジェクトで使われており、しかも(特にGuavaは)互換性が崩れやすいという特徴を持っているため、気軽にバージョンを変更できないという問題をずっと抱えていました。Hadoop 3.3.0でこれらのライブラリのバージョンをようやく上げたのですが、やはりHadoopに依存しているプロダクトで不具合が多発し、Hadoopで利用するGuavaとProtocolBuffersのバージョンは変更せずに、別途hadoop-thirdpartyという別のリポジトリでshadeしたものを利用することにしました。これにより、Hadoopでは好きなバージョンのGuavaやProtocolBuffersを、互換性の問題を意識せずに利用できるようになりました。

また、Java 6やJava 7時代においてはGuavaは非常に便利なライブラリだったのですが、Java 8になってからはJava自体のAPIが拡充され、Guavaをわざわざ利用する必要がなくなってきました。そのため、Guava自体を徐々にHadoop本体から外していく取り組みが以下のissueによって進められています。

[HADOOP-17098] Reduce Guava dependency in Hadoop source code - ASF JIRA

IOStatistics APIの登場

[HADOOP-16830] Add Public IOStatistics API - ASF JIRA

AWSやAzureのSDKではHTTPリクエストにかかった時間などいくつかのメトリクスを提供していますが、Hadoop IOStatistics APIによって、Hadoopから s3a://abfs:// にアクセスするときにもこれらのメトリクスを取得するできるようになりました。

また、S3AFileSystemについては100件以上の修正が入っています。利用者は要チェックです。

[HADOOP-16829] Über-jira: S3A Hadoop 3.3.1 features - ASF JIRA

SSL証明書の自動リロード

[HADOOP-16524] Automatic keystore reloading for HttpServer2 - ASF JIRA

DataNodeを除く(正確には、HttpServer2経由でJettyを利用している) Hadoopのデーモンで、SSL証明書を自動でリロードできるようになりました。巨大なHDFSクラスタだとNameNodeを再起動するのは運用面のコストが高いのですが、SSL証明書の更新のために再起動しなくてもよくなりました。

lz4-java, snappy-javaの利用

LZ4とsnappyを利用するときにはHadoopから直接JNI経由で呼び出していたのですが、専用のjavaライブラリを使うようになって、ビルドやメンテナンスが簡単になりました。

HDFS Erasure Codingのバグ修正

HDFS Erasure Codingが登場してから結構な時間が経っているのですが、本気で使い倒す企業が出てきてバグがあぶり出されるには時間がかかるんだなぁという印象を持っています

Python3系への移行完了

[HADOOP-16748] Migrate to Python 3 and upgrade Yetus to 0.13.0 - ASF JIRA

Hadoop本体でPythonを利用している部分はほとんどないのですが、リリース作業用のスクリプトで少しだけ利用されています。ようやく移行を終えることが出来ました。

おまけ: HDFS deleteの速度改善が間に合いませんでした

[HDFS-13671] Namenode deletes large dir slowly caused by FoldedTreeSet#removeAndGet - ASF JIRA

Hadoop 3.0でNameNodeのGC処理の改善のためにblockを保持するデータ構造が変わったのですが、なんとそのせいでdelete処理の計算量が O(1) から O(logN) (N: block数) になってしまい、巨大なHDFSクラスタだと性能が大きく劣化していました。入念なレビューを経てようやくrevertされましたが、3.3.1には間に合いませんでした。次のリリースに期待しましょう。

10Gインターネット環境を整備した

フレッツ光クロス導入

気がついたら自分が住んでいる区が光クロスのエリアに入っていたので、現在引いているフレッツ光から光クロスに切り替えたいということで申し込んだ。光回線を引いたときもそうだったのだがやはり最初は現地調査から始まった。現地調査によると、自分が住んでいるマンションに光クロスの回線はまだ届いていなかったため近くの電柱から地下を経由してMDFまで回線を引き、そこから宅内に光ファイバーを通すことになるらしい。おそらく問題ないだろうということで現地調査も終わり、回線工事もつつがなく完了した。

f:id:aajisaka:20210730011259j:plain
光ケーブルが2本生えてて気持ち悪い。もちろん隙間から生えているほうが後から追加した光クロス

工事後にNTT東日本から「あとはプロバイダに連絡してね」と言われ、現時点でプロバイダ契約しているぷららに聞いたがなんと「NTT東に頼んでください」と言われてしまい、結局NTT東に連絡して事情を事細かに説明した結果、ようやく回線が切り替わった。並行運用期間も用意されておりテレワークに支障も出なかったので結果的には非常によかったが、このやり取り自体は非常に面倒だった (by 妻)。大変お疲れ様でした & ありがとうございました。

ところで工事費が確か3.5万円くらいかかっていて明細はもらったけど請求書は届いていない気がする。一体どうなった

Cat6A回線の整備

無事フレッツ光クロス導入ができたのですが、本来の力を引き出すためには配線が必要です。今住んでいるマンションでは備え付けインターネット用にCat5eの宅内配線が用意されていたのですが、どれも正常に通信ができない状況だし10Gに対応していなかったため必要なケーブルをCat6Aに交換してもらうことにしました。自分で配線をすることも可能なのですが、非常に面倒なため業者にお願いしたところ2本で4万円弱でした。自分でやると工具を揃えるだけでそれなりの値段がかかるし失敗するリスクもあるため、非常にお得だと思います。風呂場の上で回線が集約されていてそこにハブを置くというスタイルなのですが、直置きすると地震でハブが隙間に落ちてしまう可能性があるため業者に相談して固定してもらいました。

f:id:aajisaka:20210730011840j:plain
灰色のケーブルがCat6A。よく見るとポート左上のランプが点灯しており10Gでlink upしていることがわかる

将来の拡張に備えて5ポートのハブを購入しました。ファンレスなので発熱が不安ですが、今のところ正常に動作しているようです。

www.amazon.co.jp

10G NICを購入、さて速度は・・・?

また、LANケーブルだけではなくNICも必要です。自宅はノートPCばかりなので、USB-C to RJ45のアダプタを購入することになります。いろいろと選択肢はありますが、自分はCalDigitのUSB-C Pro Dockを使っているのでアダプタもCalDigitで揃えることにしました。

www.amazon.co.jp

最後にThunderbolt 3ケーブルを買い忘れていたので購入する必要がありました。適当にAnkerのケーブルを買いました。

そして、お待たせしました。こちらが測定結果です。

いかがでしたか? なんと、この速度が時間帯問わず安定して出ます。

お値段

合計して13万円くらいの買い物でした。それなりに初期投資がかかりランニングコストもかかりますが、個人的には良い買い物をしたなと思っています。みんなもスピード狂になろう! 以下内訳:

  • NTT工事: 35000円くらい (電柱からMDFまで回線を引く作業がなければもっと安いはず)
  • LAN配線工事: 40000円弱
  • 10Gスイッチングハブ: 30000円弱
  • NIC, Thunderbolt 3ケーブル: 25000円程度
  • 回線費: フレッツ光との差額が月1100円程度

今後の課題

現時点で2つ問題があるので、解決したら追記するかもしれません

  • テレビ(LG)とのインターネット接続がよく切れる (有線でも無線でも切れて、都度設定から接続しなおすことになる。おそらくテレビかルータの問題)
  • Zoomが不安定なことがある (NICの熱暴走の可能性が高い。様子見)

中国語の勉強サボり気味

COVID-19が流行ってるしワクチン接種できるまでHSK5級の受検はやめとくか、という気持ちになっていたのでその流れで中国語を勉強するモチベが下がっていました。ワクチン接種2回目のスケジュールまで確定したので、また勉強します。ちなみに5月頭にHSK5級Readingの過去問解いたら9割くらい取れてたので、どうしたものかなぁという感じ。日本人は漢字が使えるので適当に勉強しているとReadingだけが圧倒的に得意になってしまう。

中国語を勉強しはじめて半年 & HSK四級合格

听力78, 阅读93, 书写73の総得点244点(合格点160点)でHSK四級に合格しました。今回はIBT受検しましたが、受験票および試験結果を確認するためのWebサイトが非httpsであったこと意外は非常に良かったです。具体的に良かった点は以下の通りです

  • 試験会場が駅から近い
  • リスニングの音が聞き取りやすい(自分はやらなかったけどヘッドホン持込可)
  • 残り時間が常に表示されている
  • わからない漢字でもあてずっぽでアルファベットを入れていくといつか当たる

HSK OnlineをLesson 6まで通したあと結局作文対策はほとんどせずに過去問を2セット解いて本番に臨みましたが、合格していてよかったです。次はもちろん五級を取りに行くつもりなのですが、HSK 3.0と呼ばれる新形式のテストに将来変わるらしく、五級を受検するころには変わっていたりするかもしれません。とりあえず今の形式の五級の勉強をしていって秋ごろに1回受検しようと思います。HSK Onlineにも飽きてきたので今はHSK公認長文テキストを読みはじめているところです。

(追記) 七級から九級が2022年3月からスタートで、一級から六級の試験はしばらくは変更はないそうです

Codeforcesでtesterをしました

Codeforces Round #706 のtesterをしました。日本でtesterをした人があまり多くなさそうなので、どんな感じだったのかメモしておきます。

CoordinatorからDMが来てtesterに誘われる

おそらくランダムに選ばれます。ここでOKと返事するとバチャができるようになります。「引き受けてみて暇があれば走ってくれると非常に助かる」みたいな優しい感じだったのでおそらく走らなくても大丈夫です(おそらく代わりに別のtesterが増えるだけ)。気軽に引き受けました。また、tester用のdiscordがあって、誘われて入りました。ここでは時々tester募集の告知があり、手をあげればtesterになれるようです。

バチャを走る

バチャを走ります。あとで説明しますが、このときのセットは本番と微妙に違います。また、自分が走ったセットではDiv.1+Div.2 combinedみたいな形のバチャになっていて、時間も少し長く2:30でした(本番は2:00で、Div.1とDiv.2で別れていました)。バチャの結果はgymのrecent virtual contestのところに入っていて、testerからはどのtest caseがpretestに、どのtest caseがsystem testに入るかはわからない状態でした。そのため、"As a tester, the pretests are strong." というコメントを見ても(仕様が変わらない限りは)無視してよいでしょう。

問題が増えていることに気づく

バチャをときどき見直すと、難易度調整のためか問題が増えたり減ったりしていました。増えた問題やバチャ本番で解けなかった問題は解ける限り解くことにしましたが、testerには問題の解法は知らされていないため、解説ACをすることはできません。そのため、解けなかった問題は諦めます。Coordinatorに聞けば解法を教えてくれたのかもしれませんが。また、問題文の細かい修正だけでなく、制約も変わっていることがあります。Div.1-Dは自分がバチャで解いたときには n<=300 でしたが、コンテスト本番までに n<=400 に変わっていました。本番後にsubmitする場合は注意しましょう。

フィードバックする

走った感想、問題文のここがわかりにくい、test caseが弱い(場合分けすべきところをサボってもACしてしまう)、といったフィードバックをcoordinatorにしました。Writerまで伝わっていたのかどうかはわかりませんが、test caseについては自分が提案したhack caseが入っていて本番までにrejudgeされていました(とはいえ本番では全く落とせませんでしたが)。

ブログにコンテストの日程が出る

testerとして自分の名前が書かれていることを確認します。嬉しい。

コンテスト本番

testerがやることは特にありません。順位表を見てニヤニヤするぐらいです。自分はボルダリングのgymで閉店まで課題に取り組んでいました。

pump-climbing.com

反省

Div.1-Bはマルチテストケースを提案すべきだった

自分がtest case弱いなと思っていたのがまさにこの問題で、自分はhack caseを提案したのですが、本来マルチテストケースを提案すべきでした。そもそもこの問題は実質yes/no問題なのでマルチテストケースにすべきです。とはいえマルチテストケースにしても、今回の場合例えばn=9のテストケースを全部突っ込もうとすると明らかに足りないので何らかの工夫が必要そうですね。

Div.1-Eのサンプルに言及すべきだった

問題ポリシー Wiki - yukicoder の問題文のポリシーに違反するサンプルがあったが、気づいていませんでした。解けなくても全問題をサンプル含め読むべきです。

今後の展望

今後もたまにはtesterやろうと思います。よろしくお願いします。

中国語を勉強し始めて4ヶ月

中国語

まだ4ヶ月。モチベがやや下がってきて勉強ペースも落ちてきたけど、HSK4級の試験を申し込んでいて試験まであと1ヶ月まで迫ってきたのでまたペースが戻ってきた。HSK OnlineはU7まであるうちのU5まで終わったので、試験前にHSK OnlineをU6まで終わらせて(U7はMock examなので一旦パス)、すでに買ってある過去問やって、どうせ作文ができないので作文の対策をしないといけないな、という感じです。

あとは、同じ会社で働いている中国人の方に中国語を教えてもらっていて、具体的には中国語の技術記事を一緒に読んでいます。代わりに自分はApache Hadoop界隈の歴史とかビッグデータ周辺のキーワードの説明とかをしています。部署外の人と話すことはあまりないので面白い。

AtCoder

橙色の強い人々がどんどん赤になっていくので、万年黄色の人にとっては去年の今頃よりもレートを上げやすい環境になってきた気がする。うっかり橙までたどり着けないかなー

HSK3級を受検した

2021/1/24にHSK3級を受けました。さすがに合格してると思う。受験会場は2級を受けたときと同じ東京学芸大学だったのですが、行きも帰りも臨時のバスが出ていて助かった。また、今日はHSKだけでなく英検も隣の建物で実施されていた。HSKでやることなくなったら中国語検定や英検やIELTSも興味ある。

Listening

Yes/No問題が特に難しいなと思ったが、適当に書いても5割正解できるので特に問題なし。おそらく80~85点くらい。 -> 83点でした。

Reading

2級のときと違って悩む問題はなかった。100点だと思う。 -> 100点でした。

Writing

漢字を書く問題は全部できた。並べ替えは自信がない。 -> 92点でした。

その他

会場に時計がないので時計(not smart watch)がないと時間がわからない。3級だと時間内に解き終わらないということはまずないので困らないけど、将来必要になるかもしれない。(追記: 4級からはIBT受検することにしたので不要そう)

点数が公開されたら追記します。 -> 追記しました。合計で275点。