Kafka cluster information

参考

メモ

kafka.clusterパッケージ以下には、Kafkaクラスタの情報を格納するためのクラス群が存在している。 具体的には以下の通り。

  • Broker
  • BrokerEndPoint
  • Cluster
  • EndPoint
  • Partition.scala
  • Replica

例としてBroker

例えば Broker クラスについて。

case classである。

usageを確認すると、例えば以下のように KafkaServer#createBrokerInfo メソッド内で用いられている。

kafka/server/KafkaServer.scala:430

1
BrokerInfo(Broker(config.brokerId, updatedEndpoints, config.rack), config.interBrokerProtocolVersion, jmxPort)

その他

わかりやすい例だと、PartitionやReplicaなどが挙げられる。

共有

Kafka Admin Commands

参考

メモ

意外とまとまった説明は Kafka公式ドキュメントConfluentドキュメント にはない。 Getting startedや運用面のドキュメントに一部含まれている。

丁寧なのは、 Clouderaのドキュメント(Kafka Administration Using Command Line Tools) である。

Confluentドキュメント

ConfluentドキュメントのAdminister章 には、ツールとしてのまとまりではなく、 Admin作業単位で説明があり、その中にいくつかツールの説明が含まれている。

実装

kafka.admin パッケージ以下にAminコマンドの実装が含まれている。 またそれらのクラスは、 bin以下に含まれている。

例えば、 kafka-log-dirs コマンドでは、kafka.admin.LogDirsCommand クラスが使われている、など。

共有

KafkaのJavaバージョン

参考

メモ

6.4 Java Version の通り、JDK1.8の最新リリースバージョンを使うように、とされている。 2019/11/03時点の公式ドキュメントでは、LinkedInでは1.8u5を使っているとされているが…。

このあたりの記述が最も最近でいつ編集されたか、というと、 以下の通り2018/5/21あたり。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
commit e70a191d3038e00790aa95fbd1e16e78c32b79a4
Author: Ismael Juma <ismael@juma.me.uk>
Date: Mon May 21 23:17:42 2018 -0700

KAFKA-4423: Drop support for Java 7 (KIP-118) and update deps (#5046)

(snip)

diff --git a/docs/ops.html b/docs/ops.html
index 450a268a2..95b9a9601 100644
--- a/docs/ops.html
+++ b/docs/ops.html
@@ -639,9 +639,7 @@

From a security perspective, we recommend you use the latest released version of JDK 1.8 as older freely available versions have disclosed security vulnerabilities.

- LinkedIn is currently running JDK 1.8 u5 (looking to upgrade to a newer version) with the G1 collector. If you decide to use the G1 collector (the current default) and you are still on JDK 1.7, make sure you are on u51 or newer. LinkedIn tried out u21 in testing, but they had a number of problems with the GC implementation in that version.
-
- LinkedIn's tuning looks like this:
+ LinkedIn is currently running JDK 1.8 u5 (looking to upgrade to a newer version) with the G1 collector. LinkedIn's tuning looks like this:
<pre class="brush: text;">
-Xmx6g -Xms6g -XX:MetaspaceSize=96m -XX:+UseG1GC
-XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M

関連しそうなIssue、メーリングリストのエントリ

あまり活発な議論はない。公式ドキュメントを参照せよ、というコメントのみ。 Jay Kepsによると2013年くらいはLinkedInでは1.6を使っていた、ということらしい。 順当に更新されている。

  • https://issues.apache.org/jira/browse/KAFKA-7328
  • https://sematext.com/opensee/m/Kafka/uyzND19j3Ec5wqz42?subj=Re+kafka+0+9+0+java+version
  • https://sematext.com/opensee/m/Kafka/uyzND138NFX1w26SP1?subj=Re+java+version+for+kafka+clients
共有

OpenMLを軽く確認してみる

参考

メモ

概要

OpenML公式ドキュメント によると、以下の定義。

An open, collaborative, frictionless, automated machine learning environment.

OpenML公式ウェブサイト によると、

  • Dataset
  • Task
    • データセットと機械学習としての達成すべきこと
  • Flow
    • 各種フレームワークに則った処理パイプライン
  • Run
    • あるFlowについてハイパーパラメータを指定し、あるTaskに対して実行したもの

のレポジトリが提供されている。 これらはウェブサイトから探索可能。

Dataset

Datasetが登録されると機械的にアノテーションされたり、分析されたりする。 パット見でデータの品質がわかるようになっている。

Task

データセットに対する目標(と言ってよいのか。つまり識別、回帰など)、学習用、テスト用のデータのスプリット、 どのカラムを目的変数とするか、などが セットになったコンテナである。

機械的に読めるようになっている。

Flow

処理パイプラインはFlowとして登録され、再利用可能になる。 特定のTaskに紐づく処理として定義される。

フレームワークにひもづく。

Run

OpenML APIを用いて実行ごとに自動登録される。

scikit-learnで試す

Pythonガイド を参考に試してみる。 一通り、Pandas、scikit-learn、openml、pylzmaをインストールする。 なお、あらかじめliblzma-devをインストールしておくこと。 詳しくは以下の「lzmaがインポートできない」節を参照。

実行に用いたpipenvの環境ファイル に用いたライブラリが載っている。

Pythonガイド を眺めながら進めようと思ったが、 https://openml.github.io/openml-python/develop/examples/introduction_tutorial.html のリンクが切れていた。 何となく見るとgithub.ioだったので探索してみたら、 github.ioのPythonガイド が見つかった。

こっちを参考にしてみる。

FlowとRunのチュートリアル を元に、チュートリアルを実施。 また特に、 公式Examples あたりを参考にした。 詳しくは、 dobachi openml_sklearn_example 内のnotebookを参照。

トラブルシュート

lzmaがインポートできない

以下の内容のエラーが生じた。

1
2
/home/dobachi/.local/share/virtualenvs/openml_sklearn_example-YW762zpK/lib/python3.7/site-packages/pandas/compat/__init__.py:85: UserWarning: Could not import the lzma module. Your installed Python is incomplete. Attempting to use lzma compression will result in a RuntimeError.
warnings.warn(msg)

lzma関連のlibをインストールしておいてから、Python環境を構築すること。 つまりpyenvとpipenvで環境構築する前にliblzma-devをインストールしておく。

1
$ sudo apt install liblzma-dev

参考: lzmaライブラリをインポートできません。

所感

歴史があり、情報が集まっている。 ドキュメントが中途半端なせいで、初見ではとっつきづらいかもしれないが、ライブラリひとつでデータ発掘・共有に始まり、処理パイプラインの機械化まで対応しているのは有益。

共有

pyenv を使う

参考

メモ

インストール手順

WSL / WSL2にインストールするには、 pyenvのGitHub の通り、以下のようにインストールする。

1
2
3
4
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc

トラブルシューティング

Common-build-problems に載っているが、前提となるパッケージのインストールが必要なことに注意。

古い内容のバックアップ

環境構築 - pipenv で Python 環境の構築方法 (2018年11月版) ではpipenvを使う前に、pyenvを使ってPython3最新環境を導入している。

自動インストール に自動インストール手順が記載されている。

共有

pipenvを試す

参考

メモ

上記の参考情報を見て試した。

WSL上でのpipenv

まずOS標準のPython環境を汚さないため、pyenvを導入した。 導入手段は、 pyenvのインストール手順 を参照。

導入した後、pyenvを使ってPython3.7.5を導入する。

1
2
3
$ pyenv install 3.7.5
$ pyenv global 3.7.5
$ pip install pipenv

さて、ここでpipenvを使おうとしたらエラーが生じた。 以下の参考に、 libffi-devを導入してPythonを再インストールしたらうまくいった。

https://stackoverflow.com/questions/27022373/python3-importerror-no-module-named-ctypes-when-using-value-from-module-mul

Pipenvことはじめ に大まかな使い方が載っている。

共有

Automagicaを試してみる

参考

メモ

総合的感想

用途ごとに個別に開発されているライブラリを統合して使えるのは便利。エントリポイントが統一化され、 from automagica import * ですべての機能が使えるのは画期的である。 しかし以下の点は少し課題を感じた。

  • ユーザ目線で似たもの同士に感じる機能に関し、APIが異なる
    • 具体的にはWord、Excel操作
    • ただし内部的に用いられるライブラリが別々のものなので致し方ない。(うまくすれば、APIレベルでも統合可能かもしれない)
  • 内部的に用いられているライブラリのAPIを直接利用したいケースがあるが少しわかりづらい
    • Automagicaが提供しているAPIよりも、内部的に用いられている元ネタのライブラリのAPIの方が機能豊富(少なくとも docx ライブラリはそうだと思う)
    • ということから、まずはAutomagicaのAPIを基本として使用しつつ、必要に応じて内部で用いられているライブラリのAPIを直接利用するのが良さそう。 実際に OpenWordDocument メソッドの戻り値は docx.Document クラスのインスタンス。 しかし1個目の課題と関連するが、その使い方を想起させるドキュメントやAPI仕様に見えない。 Word activities以外ではどうなのか、は、細かくは未確認。
  • ドキュメントにバグがちらほら見られるのと、ドキュメント化されていない機能がある。
    • これは改善されるだろう

Getting startedを試す

環境構築

AutomagicaのGetting started を参考にしつつ、動かしてみる。 Anacondaにはパッケージが含まれていなかった(conda-forge含む)のでpipenvを使って環境づくり。

1
2
3
> pipenv.exe --python 3.7
> pipenv.exe install jupyter
> pipenv.exe install https://github.com/OakwoodAI/automagica/tarball/master

なお、Python3.8系では依存関係上の問題が生じたので、いったん切り分けも兼ねて3.7で環境構築している。 AutomagicaのGetting started では、Tesseract4のインストールもオプションとして示されていたが、いったん保留とする。

Example 1の実行

Example 1 に載っていた例を動かそうとしたが、一部エラーが生じたので手直しして実行した。

エラー生じた箇所1:

ドキュメント上は、以下のとおり。

1
lookup_terms.append(ExcelReadCell(excel_path, 2, col))

しかし、行と列の番号で指定するAPIは、 ExcelReadRowCol である。 また、例に示されていたエクセルでは1行目に検索対象文字列が含まれているため、第2引数は 2 ではなく、 1 である。 したがって、

1
lookup_terms.append(ExcelReadRowCol(excel_path, 1, col))

とした。 なお、ExcelReadCellメソッド、ExcelReadRowColメソッドの実装は以下の通り。(2019/10/24現在)

automagica/activities.py:639

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def ExcelReadCell(path, cell="A1", sheet=None):
'''
Read a cell from an Excel file and return its value.
Make sure you enter a valid path e.g. "C:\\Users\\Bob\\Desktop\\RPA Examples\\data.xlsx".
The cell you want to read needs to be defined by a cell name e.g. "A2". The third variable
is a string with the name of the sheet that needs to be read. If omitted, the
function reads the entered cell of the active sheet.
'''
workbook = load_workbook(path)
if sheet:
worksheet = workbook.get_sheet_by_name(sheet)
else:
worksheet = workbook.active

return worksheet[cell].value

automagica/activities.py:656

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def ExcelReadRowCol(path, r=1, c=1, sheet=None):
'''
Read a Cell from an Excel file and return its value.
Make sure you enter a valid path e.g. "C:\\Users\\Bob\\Desktop\\RPA Examples\\data.xlsx".
The cell you want to read needs to be row and a column. E.g. r = 2 and c = 3 refers to cell C3.
The third variable needs to be a string with the name of the sheet that needs to be read.
If omitted, the function reads the entered cell of the active sheet. First row is defined
row number 1 and first column is defined column number 1.
'''
workbook = load_workbook(path)
if sheet:
worksheet = workbook.get_sheet_by_name(sheet)
else:
worksheet = workbook.active

return worksheet.cell(row=r, column=c).value

エラーが生じた箇所2:

ドキュメント上では、読み込んだ文字列のリストをそのまま使っているが、 そのままではリスト後半に None が混ざることがある。 そこで、リストをフィルタするようにした。

1
lookup_terms = list(filter(lambda x: x is not None, lookup_terms))

エラーが生じた箇所3:

ドキュメント上では、以下の通り。

1
ExcelWriteCell(excel_path, row=i+2, col=j+2, write_value=url)

これも読み込みの場合と同様にAPIが異なる。合わせて引数名が異なる。そこで、

1
ExcelWriteRowCol(excel_path, r=i+2, c=j+2, write_value=url)

とした。

共有

Seleniumを試してみる

参考

メモ

日常生活の簡単化のために使用。 【超便利】PythonとSeleniumでブラウザを自動操作する方法まとめ を試す。

環境構築

Condaを使って環境を作り、seleniumをインストールした。 WebDriverは自分の環境に合わせて、Chrome77向けのものを使用したかっただが、 WSLでChromeを使おうとすると、--no-sandboxをつけないと行けないようだ。 詳しくは、 ブラウザのヘッドレスモードでスクショ 及び 【WSL】にFirefox&Google-Chromeをインストールする方法! を参照。

geckodriver を使うことにした。

また、当初は 【超便利】PythonとSeleniumでブラウザを自動操作する方法まとめ を参考にしようとしたが、 途中から PythonからSeleniumを使ってFirefoxを操作してみる を参考にした。

動作確認ログは、 selenium_getting_started を参照。

便利な情報源

Selenium関連

おまけ

共有

Conferences at Dec. 2019

参考

Middleware 2019

LISA19

USENIX ATC'20

IEEE Big Data 2019

メモ

気になるカンファレンスをメモ。

ACM/IFIP International Conference MIDDLEWARE 2019

ACM/IFIP International Conference MIDDLEWARE 2019

2019/12/9 - 13

UC DAVIS, CA, US

悪くなさそう。

趣旨

The annual Middleware conference is a major forum for the discussion of innovations and recent scientific advances of middleware systems with a focus on the design, implementation, deployment, and evaluation of distributed systems, platforms and architectures for computing, storage, and communication. Highlights of the conference will include a high quality single-track technical program, invited speakers, an industrial track, panel discussions involving academic and industry leaders, poster and demonstration presentations, a doctoral symposium, tutorials and workshops.

ということから、ミドルウェアに関する技術要素についてのカンファレンスと理解。

キーノートスピーカー

  • Brian F. Cooper (Google)
    • Title: Why can't the bits sit still? The never ending challenge of data migrations.
  • Monica Lam (STANFORD UNIVERSITY)
    • Title: Building the Smartest and Open Virtual Assistant to Protect Privacy
  • Ion Stoica (BERKELEY)
    • Title: To unify or to specialize?

採録論文

Middleware 2019 - Accepted Papers に一覧が載っている。

気になった論文は以下の通り。

  • Scalable Data-structures with Hierarchical, Distributed Delegatio
  • FfDL: A Flexible Multi-tenant Deep Learning Platform
  • Monitorless: Predicting Performance Degradation in Cloud Applications with Machine Learning
  • Automating Multi-level Performance Elastic Components for IBM Streams
  • Self-adaptive Executors for Big Data Processing
  • Differential Approximation and Sprinting for Multi-Priority Big Data Engines
  • Combining it all: Cost minimal and low-latency stream processing across distributed heterogenous infrastructures
  • ReLAQS: Reducing Latency for Multi-Tenant Approximate Queries via Scheduling
  • Medley: A Novel Distributed Failure Detector for IoT Network

LISA19

LISA19

概要

LISA is the premier conference for operations professionals, where we share real-world knowledge about designing, building, securing, and maintaining the critical systems of our interconnected world.

とのことであり、開発や運用に関するカンファレンス。

Conference Program

LISA19 conference program

気になったセッションは以下の通り。

  • Pulling the Puppet Strings with Ansible
  • Linux Systems Performance
  • The Challenges of Managing Open Source Infrastructure at Bloomberg
  • Jupyter Notebooks for Ops
  • その他Kubernetes関連のセッションが複数

2020 USENIX Conference on Operational Machine Learning

USENIX OpML'20

May 1, 2020

Santa Clara, CA, United States Hyatt Regency Santa Clara

USENIX ATC '20

USENIX ATC20

JULY 1517, 2020 BOSTON, MA, USA

IEEE Big Data 2019

IEEE Big Data 2019

Los Angeles, CA, USA 9-12, Dec.

気にはなる。

参考: IEEE Big Data 2018の気になった論文リスト

2018年度の気になった論文によると、情報システムというよりは要素技術や分析手法などの方が主旨のようだ。

共有

Scraping with session information using Python

参考

メモ

あとでメモを追加する

共有