スマイルゼミタブレット3をAndroidタブレット化&ファミリーリンク対象にする話

子供がスマイルゼミをやってたのだけど、4月から辞めることにしたので、Androidタブレット化して使おうって事でやってみたがハマりどころがあったのでメモ。

前提

型番: SZJ-JS201 のスマイルゼミタブレット3

Androidタブレット化する

Androidタブレット化するのはむっちゃ簡単。
以下の通りにやったら良いだけ。

smile-zemi.jp

ファミリーリンクの対象となるように子供のアカウントを使う

ここでハマった。
おそらくスマイルゼミタブレット3のAndroid OSのバージョンが、 v5.1 系で有ることが一番の原因だろう(Justsystemさん、updateしてくれないかなぁ)。

何も対策しない状態だと、子供のアカウントを追加しようとして、保護者アカウントで承認する辺りでコケる。
対処方法は、以下。

  1. 保護者のアカウントで一旦、アカウントを追加。
  2. Google Play 開発者サービス」を含む、スマイルゼミタブレット3にあるアプリをすべてアップデート
  3. 設定→ユーザー設定→アカウントから、今使っている保護者のアカウントを削除
  4. 子供のアカウントでログイン

詳細は 以下の「お子様のアカウントでログインできない場合」って箇所を参照。

お子様の Android デバイスでのログイン - Google For Families ヘルプ

Androidタブレット化してみて

OSが古いのでいつまで使えるかなぁ感が否めない。
また、タブレットとしてのスペックもメモリ 2GB LPDDR3、フラッシュメモリ 16GBとそこまで期待出来ない。

実は、Z会に乗り換えたのだけど、Z会側のスペックを満たしてなかったので、使い回し出来なかったのが残念。。

KVMスイッチ サンワサプライ 400-SW032 の使用メモ

在宅勤務が今後も続くって事で、以下の状態だったので、

んで、実際に買ってみてのメモ。 amzn.to

結論

使えるかどうかって話だと、Windows10(自作マシン)とUbuntu 20.04LTS(ThinkPad T480s)の環境で使ってますが、問題なく使えています。

利用環境

キーボードは Lenovo のワイヤレスのUSキーボードを使ってます。 www.lenovo.com

マウスは、Logicoolの MX Master 2S

amzn.to

ただ、KVMに指してるのは、キーボードだけ。
理由は、マウスがUnifyingレシーバーを使っているのでこのKVMスイッチでは対応していないためです。
とは言え、MX Master 2S自身に、切り替えボタンがあるので特に困ってない(対応してれば便利ですが)。

注意点(というか忘れやすいのでメモ)

切り替えキー変更の際は、 IMEオフにして Ctrl+F12 → Tキー
🚨 IMEオンの際は、変更出来ない

まとめ

  • (メーカー動作保証外だけど)Windows10↔Ubuntu20.04で利用可能
  • 切り替えキーは、 デフォルト Ctrl2回だが、ScrLock2回に変更も可能
    • 変更の際は、IMEオフにするのを忘れない事
  • BluetoothやUnifyingには非対応
  • 標準じゃないキー、いわゆるメディアキー(ボリュームUPとか)は使えない
  • 特にタイピングに追いつかないとかの現象は、Win/Ubuntuどっちでも発生してない

切り替えキーで切り替え出来るのはホント便利。
有線マウスとかならマウスも込みで切り替え出来るのでもっと便利そう。

まぁ、以下の機能のあるお値段手頃なキーボードあればそっち使うかも。 * Win/Linuxで切り替え機能 * US配列 * ワイヤレス * テンキーレス(矢印キーやHome、とかは分離してるテンキーだけ無い こういうの ) * ミュートON/OFFとかメディアキー有り

やっさん的Ansible role開発をmolecule使って始めるテンプレ

adventar.org この記事は、上記の6日目の記事です。

ロールを追加する際に、 molecule を使うと非常に便利です。テスト(verify)を書かないにしても、テストドライバーを使ってdockerやvagrantなどの仮想環境にroleを適用してみて途中でエラーになったり、templateの生成が想定が違うなどを実際に確認出来るので、まずははじめることをオススメします。

いつもroleを作成する際にやってる一連の流れを紹介。 XXは〇〇すると良いよ!など、アドバイスあれば教えて下さい!

  • 前提
  • 初期構築
    • 仮想環境(venv)の用意
  • 始めるとき
  • roleのテンプレを使って初回分を作成
  • roleにシナリオを追加する場合
  • さいごに
  • 参考

前提

OS:CentOS7 or Ubuntu 20.04 LTS

molecule 3.2.1 using python 3.8 
    ansible:2.10.4
    delegated:3.2.1 from molecule
    docker:0.2.4 from molecule_docker
    vagrant:0.6.1 from molecule_vagrant

また、roleを含むリポジトリRoles — Ansible Documentation にあるように以下の構成とします。

# playbooks
site.yml
group_vars/
    group_xxx/
host_vars/
    xxxx.example.com/
roles/
    xxx/
        defaults/
        files/
        handlers/
        library/
        meta/
        tasks/
        templates/
        vars/
    yyy/
     :
続きを読む

Cloudera Hue をCDHから切り離してDockerで運用出来ないか検討してみる

qiita.com

1日遅れになってしまいましたが、、、
この記事は MicroAd (マイクロアド) Advent Calendar 2020 - Qiita20日目の記事です。

昨日は dai08srhg - Qiita のEmbulkの話でした。
(´-`).。oO(EmbulkはHiveやHDFS系のプラグインがアップデートあると嬉しいなぁと思う今日この頃) qiita.com

さて、本題ですが、今回はHueとDockerを使った話です。 Cloudera Hueは、 CDHに含まれているコンポーネントの一つ ですが、Hueは他のコンポーネントに比べて他のコンポーネントと協調して動作するものではなく基本的にクラスタのクライアントな立ち位置となります。

gethue.com

また、Hueはこのところ積極的なアップデートがあるので常に最新を使いたい!が、CDHはその都度追従してくれるわけでも無い状態です。そこで今回は、CDHから切り離して、Hue On Dockerで代わりが出来ないか考えてみます。

Hue自身については、12/23の以下のアドカレでアップデート情報があるので気になる方はご覧になって下さい。

qiita.com

  • 前提
  • Docker でHueを動かしてみる
    • 起動時の注意
    • 利用するコンテナイメージについて
    • Hueの設定ファイルの運用について
    • /etc/hosts について
    • Hueから参照する外部DBについて
  • その他の考慮ポイント
    • Hueの負荷分散について
    • Hueの監視について
      • Loggingについて
      • Metricsについて
      • Tracingについて
  • さいごに

前提

  • CDHを使っている(v6.3.2 を今回の題材にしているが、v5系でも良いはず)
  • Hueを動かすDockerホストには管理者しかリモートログイン出来ず、利用者はWebUIのみとする
  • Cloudera Navigator、Navigator Optimizerの利用は対象外(私が利用できないので検証出来ない為)
  • HTTPS対応は今回対象外とする(検証環境を用意するには時間が足りないので…)
  • LDAPSAML認証については、対象外(検証環境を用意するには時間が足りないので…)
  • HueでつかうSparkについては、Livyが用意出来なかったので見送り
  • Kubernetesでの稼働は見送り(時間足らんかった…)

  • CDHにHueを入れてるけど、最新のHueに上げたくてウズウズしている

Docker でHueを動かしてみる

hue/tools/docker/hue at master · cloudera/huedocker-compose.yml があるのでそちらを参考にします。

また、Dockerfileもあります1 が、 Makefile を読むと分かるように単純にdocker buildするだけではダメそうなので、今回はbuild済みのDockerHubにある コンテナイメージ を使う方向で進めます。

早速、Docker Composeは以下の様にしてます。

version: '3.8'
services:
  hue:
    image: gethue/hue:20201215-135001   # ・・・★1
    hostname: hue
    container_name: hue
    ports:
      - "8888:8888"
    volumes:
      - ./conf/hue/z-hue.ini:/usr/share/hue/desktop/conf/z-hue.ini    # ・・・★2
      - ./conf/hue/log.conf:/usr/share/hue/desktop/conf/log.conf
      - ./conf/hive-conf/:/etc/hive/conf/  # ・・・★3
    depends_on:
    - database
    networks:
      - backend
    extra_hosts:  # ・・・★4
      - "my-cdh-namenode-vip.example.com:192.0.2.1"
      - "my-cdh-hiveserver2.example.com:192.0.2.2"
      - "my-cdh-m01.example.com:192.0.2.3"
      - "my-cdh-m02.example.com:192.0.2.4"
      - "my-cdh-m03.example.com:192.0.2.5"
      - "my-cdh-w01.example.com:192.0.2.6"

# 外部RDBでもOK
  database:  # ・・・★5
    image: mysql:8.0
    hostname: database
    container_name: database
    env_file:
      - ./env/database.env
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --init-connect='SET NAMES UTF8;' --innodb-flush-log-at-trx-commit=0
    volumes:
      - ./db/data:/var/lib/mysql # ・・・★6
      - ./db/sql:/docker-entrypoint-initdb.d  # ・・・★7
#      - ./db/my.cnf:/etc/mysql/conf.d/my.cnf # 必要ならここでチューニングしてください
    networks:
      - backend

networks:
  backend:

※全てのサンプルファイルは全てGithubに置いてます2

起動時の注意

実行する手順は、 初回だけ以下の様にdatabaseだけ先に起動して、初回起動時にHueのデータベースを作成してからHueを起動します。

$ docker-compose up --no-start
$ docker-compose start database
$ docker-compose up -d

2回目以降は、 docker-compose up -d のみでOKです。

では、Docker Composeを見ていきます。

続きを読む

所属していないクラスタに対してDispCpやhdfs dfsを使う場合のTips

f:id:yassan0627:20201211005710p:plain この記事は Distributed computing (Apache Spark, Hadoop, Kafka, ...) Advent Calendar 2020 の11日目の記事です。

qiita.com

クラスタ間でHDFSファイルを移動したいというのは割とよくある話です。 そこでHDFSファイルを大量に移動する際は、DistCpを使うことになります。

ただ、移動元も移動先にも所属していないクライアントから通常DistCpは使えません(クラスタの設定情報がないので)。

設定をどうにかして渡せば、多分出来るだろうなぁと思いつつも「まぁ移動先のクラスタクライアントにSSHしたらいいか。」で後回しにしてましたが、自分のPCからDocker使ってやりたいなぁって事で調べました。

DistCpそのものについては、以下の最高の記事があるのでそこを参照下さい。 shiumachi.hatenablog.com

前提

以下のCloudera Enterpriseが対象です。

続きを読む

お手軽・簡単?!Cloud Storage Connectorを使ってHadoopクラスタからGCS・S3にデータを移動する

qiita.com

この記事は MicroAd (マイクロアド) Advent Calendar 2020 - Qiita の3日目の記事です。

昨日は Kotlin大好き? wrongwrong の以下のGitHub ActionsでJava/Kotlin製ライブラリ(ビルドツールはgradle)のCI環境構築する話でした。 qiita.com

3日目の記事は、Hadoopネタです。

HDFSに貯めたデータをクラウドストレージに持っていってクラウド上で何かをしたい(BigQueryから参照させたいetc)。 また、バックアップ先としてクラウドストレージを使いたい、クラウドストレージのデータをHadoopクラスタから参照したい。。。

など、Hadoopクラスタからクラウドへ、また、その逆についてもやりたいケースがありますが、その為にローカルに落として aws s3gsutil などを使って都度都度データを移動するのはとても億劫です。

そこで、今回はHadoopクラスタからHadoopクラスタ外に楽にデータを移動する事が出来るCloud Storage Connectorを紹介します。
Cloud Storage Connectorを使うとGoogle Cloud Storage(GCS)、Amazon S3Microsoft Azure Data Lake Storage (ADLS)といったパブリッククラウドに楽にデータを移動する事が出来ます。

利用イメージは、以下のようなことが出来る様になります。

# Hadoopクラスタからデータを参照
$ hadoop fs -ls gs://gcs-connector-bucket/user/hdfs/

# GCSバケットからデータを取得
$ hadoop distcp gs://gcs-connector-bucket/user/hdfs/db/table/ hdfs://name-node:8020/user/hdfs/db/table/
  • 前提条件
  • 利用するCloud Storage Connector について
  • 環境の用意
  • 動作確認
    • hdoopコマンド使えるか(HadoopクラスタからGCSバケットを操作できるか確認)
    • HiveからSQLでGCSにデータを入れられるか
      • テーブルのLocationに指定するパスをGCSバケットにフォルダを作成する
      • テーブル作成
      • データの挿入
    • DistCp使ってみる
    • Sparkを使ってみる(割愛)
  • 注意事項
  • 補足
  • 最後に

前提条件

今回は以下を前提とします。

  • CDH v6.3.21
  • Cloud Storage Connectorは GCS のものを利用
続きを読む

AWXで複数バージョンのAnsibleを実行出来るようカスタム仮想環境を用意する

前ふり

yassan.hatenablog.jp

これの続き。

よこちさんに教えてもらったのでやってみた。

前提環境

CentOS:7.8
Python:3.6.8
AWX:15.0.1
カスタム仮想環境のパス:/opt/awx-envs/

AWXはインストーラ使ってセットアップしたdocker-composeで稼働。管理用RDBはAWXと同じ Docker Compose内のServiceとする。
※今回はAWXがどうのこうのは関係ないのでセットアップについては割愛。詳細は、 awx/INSTALL.md at devel · ansible/awx を参照。

結論

出来たけど罠があるので注意。
仮想環境には pip で psutil を入れないとダメ。

詳細

正しい手順は awx/custom_virtualenvs.md at devel · ansible/awx となります。 おそらく、 Feature: custom virtual environment directories by vismay-golwala · Pull Request #3320 · ansible/awx にて仮想環境を変更出来る機能が追加されてたようです。

実施する前に、デフォルトの仮想環境でインストールしているpipをチェック。

$ docker-compose exec task bash
bash-4.4# cat /var/lib/awx/venv/ansible/requirements.txt/requirements.txt 
jinja2
kubernetes ~= 11.0.0
python-string-utils
ruamel.yaml >= 0.15
six

仮想環境の作成

作成したい仮想環境を作成

mkdir /opt/awx-envs/
cd /opt/awx-envs/
python3 -m venv ansible2-7
source ansible2-7/bin/activate

pip install向けに ansible2-7/requirements.txt を作成

cat ansible2-7/requirements.txt
psutil
ansible ~= 2.7.0
jinja2
python-string-utils
ruamel.yaml >= 0.15
six

※ポイントは、最低でもpsutilとansibleは必要です。

pip install実施

pip install -r ansible2-7/requirements.txt

セットアップされたライブラリはこちら。

(ansible2-7) [root awx-envs]# pip freeze
ansible==2.7.18
bcrypt==3.2.0
cffi==1.14.3
cryptography==3.2.1
Jinja2==2.11.2
MarkupSafe==1.1.1
paramiko==2.7.2
psutil==5.7.3
pycparser==2.20
PyNaCl==1.4.0
python-string-utils==1.0.0
PyYAML==5.3.1
ruamel.yaml==0.16.12
ruamel.yaml.clib==0.2.2
six==1.15.0

必要であれば、他にも同様にして、ansible ~= 2.9.0 にした ansible2-7ansible ~= 2.10.0 にした ansible2-10 なども作成する。
※他にも必要なライブラリがあれば入れる。

インストーラでcustom_venv_dirを利用するよう変更

AWXのインストーラの設定( awx/installer/inventory )で、以下のように custom_venv_dirコメントアウトして、custom_venv_dir の設定にフルパスで指定

# AWX custom virtual environment folder. Only usable for local install.
# require: psutil -> sudo yum install gcc python3-devel
custom_venv_dir="/opt/awx-envs/"

インストーラを実行して設定を反映。 AWXのインストール先のdocker-compose.ymlのwebとtaskのserviceに custom_venv_dir で指定したパスをマウントしているのが分かります。

  (略)
         :
  web:
    image: ansible/awx:15.0.1
    container_name: awx_web
    depends_on:
      - redis
      - postgres
    ports:
      - "80:8052"
    hostname: awxweb
    user: root
    restart: unless-stopped
    volumes:
      - supervisor-socket:/var/run/supervisor
         :
      - "/opt/awx-envs/:/opt/awx-envs/:rw"   ・・・・★
         :
  (略)

  task:
    image: ansible/awx:15.0.1
    container_name: awx_task
    depends_on:
      - redis
      - web
      - postgres
    command: /usr/bin/launch_awx_task.sh
    hostname: awx
    user: root
    restart: unless-stopped
    volumes:
      - supervisor-socket:/var/run/supervisor
         :
      - "/opt/awx-envs/:/opt/awx-envs/:rw"   ・・・・★
  (略)

AWXの設定変更

AWXの起動後、AWXのWeb UIで設定。

AWXの「設定」→「システム」にて、下図のようにカスタム仮想環境のパスに /opt/awx-envs を入れて、「保存」ボタンを押下して反映。

f:id:yassan0627:20201101183333p:plain
カスタム仮想環境のパス

次に、設定したカスタム仮想環境を利用したいプロジェクトを選択して、下図のように、「ANSIBLE環境」から利用したいカスタム仮想環境を選択し、「保存」ボタンを押下して反映。

f:id:yassan0627:20201101183441p:plain
プロジェクトの設定

動作確認

使えるか確認。 テンプレートから設定したプロジェクトのジョブテンプレートを選択して実行。

f:id:yassan0627:20201101184913p:plain
実行の確認

環境がカスタム仮想環境になっているのが分かります。

最後に

これまでは、AWXのインストーラで指定する最新のAnsibleバージョンを使い続けなければならず、AWXの更新が大変でした。
今回のカスタム仮想環境を利用することで、実行するAnsibleのバージョンを固定出来るので、頻繁にAWXをアップデートする更新に追随するもの楽になると思います。

注意事項

custom_venv_dirは「フルパス」で1つだけ。

awx/docker-compose.yml.j2 at 17b5b531bf36e337995aa46735c1b598b2e686fb · ansible/awx · GitHub

をみると分かりますが

    volumes:
      - supervisor-socket:/var/run/supervisor
   :
    {% if custom_venv_dir is defined %}
      - "{{ custom_venv_dir +':'+ custom_venv_dir +':rw' }}"    ・・・★
    {% endif %}

docker-composeのテンプレが上のとおり、custom_venv_dirをそのままマウントするのでフルパス指定が必要です。
下手にホームディレクトリのどっかを指定してしまうとハマるかも。無難に /opt とか /var/lib 辺りに作成するのが良いかも。

cf. volumes - Compose file version 2 reference | Docker Documentation

おまけ

他のカスタム仮想環境の設定方法

http://XXXX/api/v2/settings/system/ にアクセスすると設定値が見えます。

f:id:yassan0627:20201101190736p:plain
REST API

おそらく下図の用に変更してもCUSTOM_VENV_PATHSの変更出来るはず。

f:id:yassan0627:20201101190825p:plain

awx/custom_virtualenvs.md at devel · ansible/awx · GitHub にあった

$ HTTP PATCH /api/v2/settings/system/ {'CUSTOM_VENV_PATHS': ["/opt/my-envs/"]}

あたりのくだりはそういう意味だったのね。。。