Create BigTop environment on Docker

参考

メモ

Dockerでのクラスタ構築を紹介するブログ公式の手順 を参考に試した。 基本的には、前者のブログの記事通りで問題ない。

Sparkも試す

以下のようにコンポーネントに追加してプロビジョニングするとSparkも使えるようになる。

1
2
3
4
5
6
7
8
9
10
11
12
13
diff --git a/provisioner/docker/config_centos-7.yaml b/provisioner/docker/config_centos-7.yaml
index 49f86aee..0f611a10 100644
--- a/provisioner/docker/config_centos-7.yaml
+++ b/provisioner/docker/config_centos-7.yaml
@@ -19,6 +19,6 @@ docker:

repo: "http://repos.bigtop.apache.org/releases/1.3.0/centos/7/$basearch"
distro: centos
-components: [hdfs, yarn, mapreduce]
+components: [hdfs, yarn, mapreduce, spark]
enable_local_repo: false
-smoke_test_components: [hdfs, yarn, mapreduce]
+smoke_test_components: [hdfs, yarn, mapreduce, spark]
共有

WhereHows by LinkedIn

参考

ユースケースについて

ユースケース に背景などが記載されている。 複数のデータソース、複数のデータストア、複数のデータ処理エンジン、そしてワークフロー管理ツール。 LinkedInの場合は以下のとおり。

  • Analytics Storage system: HDFS, Teradata, Hive, Espresso, Kafka, Voldemort
  • Execution: MapReduce, Pig, Hive, Teradata SQL.
  • Workflow management: Azkaban, Appworx, Oozie

ユースケースは以下の通り。

  • 新任の人が立ち上がりやすいようにする
  • データセットを見つけられるようにする
  • ジョブやデータの変更が及ぼす影響を確認する

機能概要

Wikiに画面キャプチャ付きで説明がある。 GUIの他、バックエンドAPIもあり、自動化できるようになっている。

例:https://github.com/LinkedIn/Wherehows/wiki/Backend-API#dataset-get

アーキテクチャ

Architecture に記載されている。 Akkaベースでスケジューラが組まれており、スケジューラによりクローラが動く。

データセットやオペレーションデータがエンドポイトであり、リネージがそれを結ぶブリッジであると考えられる。 またこれらは極力汎用的に設計されているので、異なるプロダクトのデータを取り入れることができる。

バックエンドのETLについて

Java、Jython、MySQLで構成。 分析ロジックの実装しやすさとほかシステムとの連携しやすさを両立。

  • Dataset ETL
    • HDFS内をクロールする
  • Operation data ETL
    • フロー管理ツールのログなどをクロールし、所定の形式に変換する
  • Lineage ETL
    • 定期的にジョブ情報を取得し、入力データと出力データの定義から リネージを生成する
共有

LinkedIn WareHows

参考

メモ

  • links data objects with people and processes
  • enables crowdsourcing for data knowledge
  • provides data governance and provenance based on ownership and lineage
共有

Mount host's filesystem on KVM

参考

メモ

マウントの仕方を示しているブログ の通りで問題ない。

補足

「ハードウェアの追加」から「ファイルシステム」を追加する。

ゲストOSでマウントするときに、ディレクトリを作成し忘れないこと。

手動でマウント

1
$ sudo mount -t 9p -o trans=virtio hostdata /mnt/data

fstabには以下のように記載

1
hostdata	/mnt/data	9p	trans=virtio	0	1
共有

Buy Windows10 licenses

共有

Docker for Windows with WSL

参考

メモ

上記ブログ 動かし方を紹介するブログ の内容で基本的に問題ない。 ただし、一般ユーザの.bashrcに環境変数DOCKER_HOSTを指定したので、 一般ユーザでDockerを起動できるようにしておいた。 (当該一般ユーザをdockerグループに加えた)

コマンド

コンテナ確認

1
2
$ docker ps
$ docker ps -a

-vを用いてボリュームをマウント。 ついでに--rmを用いて停止後に削除することにする。

1
$ docker run -it --rm -v c:/Users/<user name>:/mnt/<user name> <image id> /bin/bash
共有

Hyper-V機能のオン・オフを切り替える

参考

メモ

基本的には、 切り替えようPowerShellスクリプトを掲載してくれているサイト のとおりで問題ない。 パス等は環境に合わせること。

共有

Try Apache Superset

参考

動作確認

公式ウェブサイトのインストール手順 の「Start with Docker」のとおり、進めてみたところ、 トップ画面がうまく表示されない事象が生じたので、ここでは改めてCentOS7環境に構築してみることにする。

必要パッケージのインストール

以下が指定されていたが、libsasl2-develだけ無いというエラーが出た。

1
gcc gcc-c++ libffi-devel python-devel python-pip python-wheel openssl-devel libsasl2-devel openldap-devel

Issue 2205 を見ると、cyrus-sasl-develであれば存在するようだ。

セットアップ

/opt/virtualenv/superset 以下にvirtualenv環境を作り、supersetをインストールしたものとする。 その上で、公式ドキュメントを参考に以下のようなコマンドを実行する。(極力対話設定を減らしている)

1
2
3
$ source /opt/virtualenv/superset/bin/activate
$ fabmanager create-admin --app superset --username admin --firstname admin --lastname admin --password admin --email admin@fab.org
$ superset db upgrade

以下のようなエラーが出た。

1
Was unable to import superset Error: cannot import name '_maybe_box_datetimelike'(superset) [vagrant@superset-01 ~]$ superset db upgrade

[Issue 6670] を見ると、Pandasの新しいバージョンに起因する問題らしく、バージョンを下げることで対応可能だそうだ。

1
2
$ pip uninstall pandas
$ pip install pandas==0.23.4

してから、以下の通り改めて実行。

1
2
3
4
$ fabmanager create-admin --app superset --username admin --firstname admin --lastname admin --password admin --email admin@fab.org
$ superset db upgrade
$ superset load_examples
$ superset init

上記を実行し、サーバの8088ポートをブラウザで開けば、トップが画面が表示される。

共有

Hyper plugin

参考

共有

Nature Remo API

参考

ブログもとに試す

API解説のブログを参考に試してみる。

home.nature.global につなぎ、アクセストークンを発行する。 なお、アクセストークンは決して漏らしてはならない。 ここではローカルファイルシステムにna.txtとして保存して利用することにする。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ curl -X GET "https://api.nature.global/1/devices" -H "accept: application/json" -k --header "Authorization: Bearer `cat na.txt`" | jq
[
{
"name": "リビング",
"id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"created_at": "xxxxxxxxxxxxxxxxxxxx",
"updated_at": "xxxxxxxxxxxxxxxxxxxx",
"mac_address": "xxxxxxxxxxxxxxxxxx",
"serial_number": "xxxxxxxxxxxxxxxxxxxxx",
"firmware_version": "Remo/1.0.62-gabbf5bd",
"temperature_offset": 0,
"humidity_offset": 0,
"users": [
{
"id": "xxxxxxxxxxxxxxxxxxxxxxx",
"nickname": "xxxxxxxxxxxxxxxxxxx",
"superuser": xxxxxx
}
],
"newest_events": {
"hu": {
"val": 20,
"created_at": "xxxxxxxxxxxxxxx"
},
"il": {
"val": 104.4,
"created_at": "xxxxxxxxxxxxxxxxxx"
},
"te": {
"val": 22.2,
"created_at": "xxxxxxxxxxxxxxxxxxxxxx"
}
}
}
]
1
$ curl -X GET "https://api.nature.global/1/appliances" -H "accept: application/json" -k --header "Authorization: Bearer `cat na.txt`" | jq

センサーの値を取り出してみる

Nature Remo で温度超過時にアラート通知をする を参考に試す。 先の例と同様に、/1/devicesを叩くと、その戻りの中にセンサーの値が含まれているようだ。 そこでjqコマンドを使って取り出す。

1
$ curl -X GET "https://api.nature.global/1/devices" -H "accept: application/json" -k --header "Authorization: Bearer `cat na.txt`" | jq '.[].newest_events'

結果の例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"hu": {
"val": 20,
"created_at": "2019-01-18T15:01:43Z"
},
"il": {
"val": 104.4,
"created_at": "2019-01-18T13:26:58Z"
},
"te": {
"val": 21,
"created_at": "2019-01-18T14:24:23Z"
}
}

これを保存しておけばよさそう。

Python化

curl to python のサイトを利用し、上記curlをPythonスクリプトに変換した。

ローカルAPIを試してみる

Remoを探すため、公式サイトでは以下のように示されていた。

1
% dns-sd -B _remo._tcp

代わりに以下のコマンドで確認した。

1
2
dobachi@home:~$ avahi-browse _remo._tcp
+ xxxxx IPv4 Remo-xxxxxx _remo._tcp local
共有