2021年のApache Hadoop振り返り
Calendar for Distributed computing (Apache Spark, Hadoop, Kafka, ...) | Advent Calendar 2021 - Qiita の12月13日の記事です。
昨年の記事
さて、今年もApache Hadoopを振り返ろうと思います。
リリース数の減少
今年もリリースが少ない年でした。本記事を執筆している時点では1月に3.2.2、6月に3.3.1がリリースされただけです。現在3.3.2のrelease voteが行われており、うまく行けば3.3.2がリリースされるような気がします。また、3.2.3についてもrelease branchが切られており、release voteが近いうちに始まると思われます。ところで、2020年には新しいminor versionの3.3.0が登場しましたが、今年は3.4.0のリリースが登場することはありませんでした。Hadoop 3.3.0になりProtocol Buffersのバージョンが上がったのですが、Hive、Tezなどがそれに追従しきれておらず、そのため、本番環境でHadoop 3.3.0もしくは3.3.1を利用しているユーザはほとんどいないのではないかなと思っています。3.4.0をリリースするのはHiveやTezのHadoop 3.3.x対応が終わり、ユーザがHadoop 3.3.xを使い始めるようになってからになりそうです。
Hadoop 3.3.1について詳しく知りたい方はこちらの記事もご確認ください
開発の本拠地は西海岸からアジアに
昨年は中国勢の台頭について触れたのですが、最近になって、さらにインドや中国の開発者のPRを見ることが増えてきたなと思っています。タイムゾーンが近くて個人的には開発がやりやすいのですが、昔は圧倒的だった西海岸の存在感はかなり減ってきたような気がします。西海岸ではもうHadoopそのものの開発に興味がなくなっている(Hadoopをやっていてもお金にならない)という説はありそうですね。実際にどれほど開発者が移り変わっているかを示すために、Hadoopのcommit logから主要なtimezone別のcommit数を抽出してみました。5年前と比較してみると、開発拠点がアジアに移行しているかが非常によくわかるかと思います。
timezone | 2016 | 2021 |
---|---|---|
-0800 | 502 | 21 |
-0700 | 1069 | 77 |
-0500 | 87 | 19 |
+0000 | 127 | 65 |
+0100 | 56 | 106 |
+0200 | 3 | 93 |
+0530 | 347 | 274 |
+0800 | 110 | 228 |
+0900 | 230 | 107 |
また、この5年間で合計のcommit数そのものはずいぶん減ってしまいました。OzoneとSubmarineが分離し、YuniKornも登場しているので開発者が分散してしまった感じがします。
HadoopとLog4J
HadoopではLog4Jを利用しています。Log4J2はLog4Jと設定やAPIの互換性が全くといっていいほどなく、また、HadoopではLog4JのAPIを多用しているため移行できずにいました。そのため、幸いにも CVE-2021-44228 の対象となることはありませんでした。ただし、Hadoopを利用しているユーザの多くは同時にHiveも利用しており、HiveではLog4J2を利用しているため、多くのHadoopクラスタではこの脆弱性への対処が必要となります。HadoopのLog4J2移行については5年以上も前からJIRAが存在していて、いくつかの取り組みが実施されていました。その中で多くのAPIはSLF4Jを利用するように書き換わり、あとはbackendと残存するLog4J APIを置き換えるだけの状態になっているのですが、この事件を踏まえて考えてみると、もしかするとbackendはLog4J2ではなくLogbackを利用する、という選択肢があるのかもしれません。そもそもHadoopはSLF4J APIだけを利用するようにして、Log4J2を使うかLogbackを使うかはユーザに選ばせるのが理想なので、理想をなんとか形にして不要なdependencyが入らないようにしていきたいものです。