Dataprocでmecabを利用できるようにする


はじめに

Dataprocでmecabを利用する際のメモ
以下のいずれかの方法で実現

  • mecabインストール済のカスタムイメージを作成し、クラスタ生成時にカスタムイメージを指定する
  • 初期化アクションでmecabをインストールする

なお、カスタムイメージは60日で期限切れになっていまう。
(期限切れのカスタムイメージを使用するクラスタを作成する方法は存在する)

イメージを持っておきたいなどの理由がない限りは初期化アクションのほうが楽かもしれない。

mecabインストール用のスクリプトを作成

いずれの方法でもインストール用のスクリプトを作成しておく必要がある。
ついでにTimeZoneをJSTにしておく。
コマンドは使用するOSに合わせて適宜変更する。

create_mecab_image.sh
#!/bin/sh
timedatectl set-timezone Asia/Tokyo

# prepare
echo "prepare start."
sudo apt-get update
sudo apt-get -y install aptitude
sudo aptitude -y install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file
echo "prepare end."

# git clone
echo "git clone start."
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
echo "git clone end."

# install
echo "install mecab start."
cd mecab-ipadic-neologd
./bin/install-mecab-ipadic-neologd -n -y
echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
echo "install mecab end."

カスタムイメージの作成

カスタムイメージを作成する場合、以下を参考にして実行
初期化アクションでmecabインストールする場合、この手順は不要。
https://cloud.google.com/dataproc/docs/guides/dataproc-images?hl=ja

python generate_custom_image.py \
--image-name mecab-image \
--dataproc-version "1.3.45-ubuntu18" \
--customization-script "./create_default_image.sh" \
--zone asia-northeast1-c \
--gcs-bucket gs://dataproc/custom_image/mecab \
--no-smoke-test

bashのversion違いによりrun.sh実行時にエラーが出る場合がある。
https://github.com/GoogleCloudPlatform/dataproc-custom-images/issues/35

成功するとGCEのイメージに上で指定したイメージが作成されている。

また、--no-smoke-test は推奨されていないが、つけないとsmoketest時にエラーになってしまったためとりあえずつけている

クラスタの作成

  1. カスタムイメージを使用する場合
    クラスタ作成時に上で作成したカスタムイメージを指定して作成

  2. 初期化アクションでmecabをインストールする場合
    create_mecab_image.sh をGCSにアップロードしておき、初期化アクションで指定して作成

確認

作成したクラスタのVMインスタンスから、マスターノードのサーバーにSSH接続
mecabがインストールされていること(とTimeZoneがJSTになっていること)が確認できる

user@cluster-m:~$ date
Wed Jan  8 14:19:45 JST 2020
user@cluster-m:~$ which mecab
/usr/bin/mecab