/home/by-natures/dev*

データ界隈で働くエンジニアとしての技術的なメモと、たまに普通の日記。

2018/12/02 DAMA-DMBOK2

いよいよ12月ですね、個人的にはイベントが多くて楽しみな月です。

読み中: DAMA-DMBOK: Data Management Body of Knowledge (2nd Edition)

先輩に紹介されて、以下の本を読んでいます:

www.safaribooksonline.com

データマネジメントについて体系的に説明していて、章ごとに様々な話題に触れています。私としては "CHAPTER 11 Data Warehousing and Business Intelligence", "CHAPTER 12 Metadata Management" が業務に関係しそうだなと思っているので、読み進めています。ちょうど今日、第二版の日本語訳「データマネジメント知識体系ガイド 第二版」も出たそうです:

https://www.amazon.co.jp/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88%E7%9F%A5%E8%AD%98%E4%BD%93%E7%B3%BB%E3%82%AC%E3%82%A4%E3%83%89-%E7%AC%AC%E4%BA%8C%E7%89%88-DAMA-International/dp/4296100491

"CHAPTER 12 Metadata Management" だけ先にざっと読み終えたのですが、テーマ的に概念的な話にはなりがちですが、メタデータをどのように分類したらよいか、組織の規模に応じてどのように集めたら良いか、実際に "metadata repository"(メタデータを収集するシステム)をどのように構築していけばよいか、など実践的なアドバイスも含まれていました。

もう少し深く読んだり他の章を読んだりしたらレビューなど書きたいです。

2018/11/30

いよいよ12月ですね。街中のクリスマスムードも一気に加速するんでしょうか。イルミネーション見るのも寒いのも好きなので、一年で一番楽しみな季節です。

勉強会・忘年会の予定がすでにいくつか入っているので、師走の文字通り忙しくなりそうです。ひとまず Go の勉強会でブログ担当をすることになっているので、Go 関連の記事をたまに読んでいます。

Microservices実装ガイド in Go at Mercari

メルカリの @yagi5 さんが、GoConference2018 Autumnで発表された資料です。

PHP のモノリシック API からマイクロサービスへ移行したということで、どのようにマイクロサービスで開発しているかが紹介されています。大元の定義ファイル(.proto) を GitHub にプッシュすると CI が動いて、各開発者はそれぞれの言語で自由に実装できるようです。

まだ使ったことがないのですが、通信に関するシリアライズ・デシリアライズの部分がすでに各言語ごとに提供されているのがとても良さそうです。REST API で別のサービスにリクエストするときに適切なフォーマットをドキュメントなどで確認しながら探り探り作っているので、その労力が無くなるのは嬉しい。。

個人的には、そもそも大元の定義ファイルをどうやって決めているのかも気になります。API のバージョン差なんかも吸収できるんだろうか。

speakerdeck.com

3年で5パターンの分析基盤を作ってみた

「作ってみた」とありますが、これだけのサービスの構築経験があるのは凄いです。少し前の記事なのですが、Redshift, Hive, Spark, MySQL から最後は BigQuery に辿り着いています。データがそこまで多くなさそうなので、移設しやすいなどの理由もあったかもしれません。

qiita.com

2018/11/27 Maven, Spring のプロファイル設定

渋谷でお気に入りの居酒屋ランチがあって、今日同僚を連れて行ったのですが、食べログで非常に点数が高いお店だったようです。ランチはぶらぶら歩きながら決めることが多いので、評価はおろか店の名前すら知らなかったです(今も忘れました。。)。焼き魚もフライも美味しい、それでいて割と安いよいお店です。

食べログを全く見ない訳でもないですが、懇親会で選んだお店で参加者に「美味しかった」と喜んでもらえるお店って大抵自分の足で探したお店だったりします。年配の方がやってるお店が多いので、まだまだインターネットが活用されていないということかもしれません。・・・単に年季の入った店が好みだというだけかもしれないですね。でも繁華街で店が古いというのはある程度味が保障されているはずなので、判断基準としては悪くないのかも。

golang.tokyo #20

来月、こちらの Go 言語の勉強会に参加することにしました:

golangtokyo.connpass.com

一般枠は埋まっていたのですが、ブログ枠という イベントに関するブログを書いて頂ける方にご応募頂く参加枠 は誰も応募していなくて、最近筆が乗っているのでちょうど良いかなと思ってブログ枠で応募しました。文章にすることで記憶の整理にもなってよいですが、Go はまだまだ初心者なので理解して記事にできるか少し不安です。頑張ります。

Go 言語に貢献する人が守るべき行動指針というのがあるようです。多様性に非常に重きを置いているようで、主義・人種・性別・性的指向等々にまで触れられているのは面白いです:

Go Community Code of Conduct - The Go Programming Language

Maven, Spring のプロファイル設定

Maven のプロファイル設定がうまく聞かなくていろいろ調べていたところ、Spring のログでプロファイルに関するものが出てきていて、少し混乱してしまったのでメモ。

Maven, Spring(3系以降)どちらもプロファイルを設定可能ですが、Maven はビルド時にプロファイルを指定するのに対し、Spring はランタイムで設定できるようです。生成する Bean をプロファイルで切り替えるような仕組みのようです。

stackoverflow.com

どちらが良いという訳ではないですが、ランタイムで切り替えられるということは SpringBoot としては環境ごとの設定やそれに付随するライブラリも丸ごと fatjar にまとまってしまいます。以下の比較記事でこんなことが述べられています:環境ごとの設定がまとまってしまうのが嫌だと思うかもしれないけれど、結局アーカイブされていて直接は見れなくて、見るには jar を展開する必要があって、そこまでしてプロファイルを見るのはバッドプラクティスだから大きな問題ではない。"clean" にしておきたければ Maven を、そうでなければ Spring のランタイムで切り替えられるプロファイルは欠点を補って余りある魅力があるとのことです。確かに、jar の起動オプションを変えるだけで環境に応じた動作をするのは便利そうです。

blog.frankel.ch

2018/11/26 Hadoop ResourceManager HA 構成の設定(メモ)

Hadoop 系のプロダクトはパラメータが多く、業務で私が設定することは少ないので、何かの調査のたびにいつも調べたり眺めたりしているだけなのですが、、忘れがちなので文章にしてみます。

Hadoop 本家はこちら:

Hadoop – Apache Hadoop 2.8.5

そして特に YARN のパラメータはあまり読ませる気がない・・・横スクロール必須です。

https://hadoop.apache.org/docs/r2.8.5/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

ResourceManager の HA 構成について

ResourceManager はクラスタのリソース状況を監視し、アプリケーションに新たにスケジューリングする仕組みを提供します。ResourceManager は Hadoop 2.4 以前は単一障害点(SPOF) でしたが、2.4 以降は Active-Standby 構成が取れるようになりました。

フェイルオーバーは手動(CLI)で行うか、ZooKeeper を利用して自動でフェイルオーバーする許可が設定されていれば自動で行うようです。

以下、Hadoop 本家の説明です。フェイルオーバーの仕組みやパラメータについては非常に簡潔にまとまっていて読みやすいです:

Apache Hadoop 2.8.5 – ResourceManager High Availability

https://hadoop.apache.org/docs/r2.8.5/hadoop-yarn/hadoop-yarn-site/images/rm-ha-overview.png

HA 構成にするための最小設定も上のドキュメントに紹介されています:

<property>
  <name>yarn.resourcemanager.ha.enabled</name>
  <value>true</value>
</property>
<property>
  <name>yarn.resourcemanager.cluster-id</name>
  <value>cluster1</value>
</property>
<property>
  <name>yarn.resourcemanager.ha.rm-ids</name>
  <value>rm1,rm2</value>
</property>
<property>
  <name>yarn.resourcemanager.hostname.rm1</name>
  <value>master1</value>
</property>
<property>
  <name>yarn.resourcemanager.hostname.rm2</name>
  <value>master2</value>
</property>
<property>
  <name>yarn.resourcemanager.webapp.address.rm1</name>
  <value>master1:8088</value>
</property>
<property>
  <name>yarn.resourcemanager.webapp.address.rm2</name>
  <value>master2:8088</value>
</property>
<property>
  <name>yarn.resourcemanager.zk-address</name>
  <value>zk1:2181,zk2:2181,zk3:2181</value>
</property>

自動フェイルオーバーはデフォルトで true のようなので、これで Active ノードがダウンした際にフェイルオーバーされるようになります。

また、2.4 からは ResourceManager Restart という機能が提供されていて、 実行中のアプリケーションを中断することなく ResourceManager の再起動を行えるようです。フェイルオーバーが行われた際、新しく Active となったノードはフェイルオーバー前に実行されていたアプリケーションを継続して監視し続けるようです。

Apache Hadoop 2.8.5 – ResourceManger Restart

2018/11/21 LINE DEVELOPER DAY 2018

先日、LINE DEVELOPER DAY 2018 に参加してきました。

linedevday.linecorp.com

engineering.linecorp.com

資料は後日公開されるようですので詳しくはそちらをご覧ください。 公開されていました、SlideShare から閲覧できます:

www.slideshare.net

数日時間が経ってしまったので、以下簡単な感想まで。。

全体的なところでは、資料が全て英語だったり、発表は英語と日本語のものがありましたがどちらも通訳レシーバーを利用することができました。発表も通訳されることを意識してか、ハキハキした口調で日本語も英語も聞きやすかったです。TED talk を聞いているような錯覚に陥りました。w 資料準備、発表準備どちらもかなり時間をかけているなという印象です。英語でのプレゼンや、海外学会での学術的な発表を行っていたりと、グローバル企業であることを強く主張しているように見えました。

今回聞いたのは以下のセッションです。手元のメモや記憶頼りで書いているので正確には後日公開されるし資料をご覧ください。

How does LINE effectively handle media content?

www.slideshare.net

LINE での画像・動画データなどをどう世界中の拠点で効率よく扱っているか、という話で、データの種類に応じてキャッシュの仕方を変えたりされていました。同じ画像でも、グループラインであれば多数のユーザに見られるので効率的なキャッシュをし、個別ラインであればそうでない・・・といったような細かいハンドリングをしていた印象です。

また、2019年に LIME(LINE Media)という GPU を利用したメディアデータのプロセッシングの仕組みを OSS 化を目指しているそうです。

Multi-Tenancy Kafka cluster for LINE services with 250 billion daily messages

www.slideshare.net

LINE のサービス間で利用される Kafka クラスタの話です。利用用途としては主に2つで、1つはアプリケーションが分散処理させるためのキューとして利用していて、2つめの利用用途は他のサービスへアクションなどを伝えるデータハブとして利用されているということです。1つの Kafka クラスタへ処理を集めることによって、データを見つけやすくし、オペレーションの効率化を目指しています。

発表の中では、Kafka クラスタに対する要件として、クライアント間で isolation を保つこと、とありますが、以前 Kafka クラスタがこれに反した動作をしていたということです。Kafka のソースコードや Linux カーネル API を調査して原因の発見・解消を行っているストーリーは技術力の高さを感じさせました。

Efficient And Invincible Big Data Platform In LINE

www.slideshare.net

LINE でのビッグデータに関する取り組みの全体像についての紹介です。Pipeline platform, Analysis platform, Security, Monitoring, Tuning という流れで紹介されていました。特に分析基盤として、1668Hive テーブル、25PB、550ユーザーというのは圧巻の大規模です。

OASIS - Data Analysis Platform for Multi-tenant Hadoop Cluster

www.slideshare.net

OASIS という、誤解を恐れずに言えば全社で利用できる BI ツールの紹介です。

OASIS は利用ユーザを分類し、様々なスキルを持った人が適切に LINE のデータを扱えるようにしています。例えばレポートを見るだけの人は Manager として扱い、クエリだけでなくプログラムが書ける人は Engineer として分類し ETL 処理を記述することができます。また、データサイエンスの技術がある人はアドホック分析を行うこともできます。

当初は既存の OSS で BI ツール(Apache Zeppelin など)の運用をしていたそうですが、セキュリティや安定性の面、また YARN アプリケーションの扱い方が合わずに自前で開発することに決めたそうです。Apache Zeppelin や Jupyter Notebook のような「ノート」単位での見やすいレポート機能は踏襲しつつ、YARN アプリケーションのリソース管理を効率よく行えるようにしたり、スケジューリングを設定できることでレポーティングツール+ETL サービスとして運用しているようです。

発表を聞く限り多くのユーザが OASIS を利用しているようで、細かいところも配慮した作りで OASIS が使いやすくなるよう配慮しているように見えました。例えば、レポートごとに誰が見れるか権限を振るのは運用上煩雑なので、その人が所属するチームに自動的にレポート共有されるようにする、などです。細かいことですが、基礎的な技術に合わせて細かい配慮の積み重ねで BI ツールが広く使われるかどうかが変わってくるかもしれないな、と感じました。

2018/11/20 Amazon Corretto

そろそろ年末が近づいてきました。異動もあって歓送迎会があることもあり、11月末〜12月に掛けてお酒を飲む機会が増えそうです。ちなみに・・・お酒でいうと最近のお気に入りはこのクラフトジンです:

https://www.amazon.co.jp/%E3%83%8B%E3%83%83%E3%82%AB-01077J-%E3%82%AB%E3%83%95%E3%82%A7%E3%82%B8%E3%83%B3-%E7%93%B6-700ml/dp/B071KXTSWCwww.amazon.co.jp

和柑橘の爽やかな香りと山椒のスパイシーな香りが調和 とありますが、この山椒の香りが素晴らしいです。ちょっと値が張るのですが家の近くのバーで何度か飲んでいて、家に一本置いておくか迷っています。クラフトジンも、クラフトビールの流れから来ているのでしょうか?あまりバーなど行かないのですが、たまに行ってバーテンダーさんにオススメのものを教えてもらうと楽しいです。

Amazon Corretto

そういえば昨日 Oracle JDK の話をしたのですが、Amazon からも OpenJDK のディストリビューションが出るという話がありますね。

aws.amazon.com

aws.amazon.com

Amazon will provide security updates for Corretto 8 until at least June 2023. Updates are planned to be released quarterly. Corretto 11, corresponding to OpenJDK 11, will be available during the first half of 2019. Amazon will support Corretto 11 with quarterly updates until at least August 2024.

Corretto 8 は (少なくとも)2023年6月、Corretto 11 は2019年前半に出て、2024年8月までアップデートを予定しているようです。OracleJDK 8 は商用ユーザ向けには 2019年1月にアップデート終了とあるので、Corretto であれば4年半ほど長く Java8 が使い続けられそうです。

小さいシステムであれば Java の新機能が使えるメリットもあるので LTS 版の Java(8, 11, 16, ...) に合わせてアップデートするのも良い気がしますが、Corretto も発表されたばかりですし、しばらく動向をチェックしておくのが良さそうです。

2018/11/19 Oracle Code One 2018 報告会 ボランティアしてきました

先週末より部署異動がありまして、新しい部署での勤務が始まりました。家からちょっと遠くなったのと、乗り換えがどうも上手くいかないルートばかりで最適ルートが見つかっていないので、しばらく試行錯誤しながら通勤します。

先日土曜日、こちらのイベントの運営ボランティアをしました:

jjug.doorkeeper.jp

ボランティアメンバー間で交代して受付担当していたので、いくつかの発表しか聞けませんでしたが、最近の Java のトレンドを聞くことができてよかったです。Long-term support(LTS)は3年ごと、メジャーバージョンアップは半年ごとなので、Java11 が LTS になったあとは Java17, Java23 と LTS のバージョンは 6ずつ増えていくことになるようです。

Graal という他言語対応の VM というのがあるそうで、デモでは JavaScript, Java, Ruby, Python など様々な言語を呼び出していました。

GraalVM

Project Panama という、ベクトル演算を利用して Java の数値計算を高速化するプロジェクトについても紹介がありました。

OpenJDK: Panama

We are improving and enriching the connections between the Java TM virtual machine and well-defined but “foreign” (non-Java) APIs, including many interfaces commonly used by C programmers. と紹介されているので、ベクトル演算に特化したものではなくて、C 言語のインタフェースで提供されているものを使いやすくするといった感じなのでしょうか。Python が機械学習の分野で多く使われていますが、Python が様々な C のライブラリを便利に呼べるのが良くて、Python の実行速度自体は早くないという話もあったので、こういったプロジェクトによって Java でも機械学習系のプログラムが書きやすくなるのかもしれません。また折をみて調べようと思います。

Java での Map の初期化

いつも Guava で Map の初期化をしているのですが、そういえば double braces で初期化する方法もあったなぁと調べた時のメモです。

stackoverflow.com

http://wiki.c2.com/?DoubleBraceInitialization

double braces で初期化する場合、そのクラスのオブジェクトではなく、そのクラスを継承した匿名クラスのオブジェクトが生成される、というのがポイントです。上のリンクで紹介されている equal メソッドは、クラスを比較して同じクラスかどうかを判定していますが、double braces で生成するとクラスが元のクラスと一致しなくなります。(あまり Map に対してはそういうことしない気がしますが)

Java9 からは factory-methods というのが追加されていて、Map の初期化が簡単になっているようです。Java8 がそろそろサポート切れるので、バージョンアップしないといけないですね。。(factory-methods 使えない)

KSQL, ConfluentPlatform

こちらは完全に自分用メモです。KSQL, クエリでストリーミングが定義できるのはすごく便利そうですが…社内に詳しい人がいるので今度聞いてみよう。

qiita.com

www.confluent.io

Spring の ModelAttribute, SessionAttribute

便利そうではあるけれど、無理に使うとよく分からないことになる気もして今回は見送り

dzone.com