日本語の形態素解析を比較。結局Zeppelin+R+RMeCabでの連携。

いきなりですが、いつもブログを読んでいただきありがとうございます。
コメントも読んでいるのですが、英語は苦手で全然返せなくてごめんなさい。

そろそろコメントも公開で受け付けたほうが良いのかなとか、自分のブランディングも含めて考えることもありますが。。。
現在、日本のベンチャー企業2社に所属して活動していることと、
自分のなまけ癖を考えると返信しないことが容易に想定できるのでもうちょっと落ち着くまでこのスタイルで行かせていただきます。
(少し余裕ができたと思うと新しい仕事するスタイルなのでご容赦ください)

職場でも日本人とインド人の働き方の違いを見ていたりすると、
自分を含め日本人はStackoverflowのようなサイトから同事象を探すだけなのに対して
積極的に質問するインド人をみると、良いところは真似しなきゃなと自戒。

日本語のコメントが無いので日本人は来ないネタばかりやってるのかとWebMasterTool確認。
さすがに日本人が訪問数ダントツでしたね。

唐突な自分語りはここまでとして、さっそく形態素解析の比較から

参考1:Python形態素解析ライブラリ3つを徹底比較
参考2:意外にあった!?日本語の形態素解析ツールまとめ
参考3:Kuromojiは何で研究にあまり使われないのか?

昔から興味はあったのでそこそこ知ってる単語が出てくる。
職場1で使ってるSolrではkuromoji使っていたり、MeCabなんかも良く比較されているので知ってたり。
でもJumanは聞いたことがなかったが、出てくる情報が多いのが何となく魅力的。
レスポンスを考えるとダメなのだろうが、職場2ではレスポンスは求められていないのでこういうのが良い。

色々資料を読んでいくと、職場1は検索だから境界が分かればいいのだろう
職場2は自然言語処理やテキストマイニングが目的

それでも情報の充実度からやっぱりMeCabを選択せざるを得ない雰囲気。

MeCab (和布蕪) 公式
RMeCab公式

R言語は正直苦手

R
install.packages("RMeCab", repos = "http://rmecab.jp/R")

どうやらやっぱりインストールは必要そうだということで、公式情報をもとにインストール。

で、もう一度上記のinstall.packagesをR上からやるとエラー。
たまたま同じ事象の解決しているサイトがあったので参考にして修正。
http://txt.takamatsu-kaikei.org/wiki/wiki.cgi?page=Linux

■エラー内容

Error in dyn.load(file, DLLpath = DLLpath, ...) :
  unable to load shared object '/usr/lib64/R/library/RMeCab/libs/RMeCab.so':
  libmecab.so.2: cannot open shared object file: No such file or directory
Error: loading failed
Execution halted
ERROR: loading failed
* removing ‘/usr/lib64/R/library/RMeCab’

The downloaded source packages are in
        ‘/tmp/Rtmpul5IIS/downloaded_packages’
Updating HTML index of packages in '.Library'
Making 'packages.html' ... done
Warning message:
In install.packages("RMeCab", repos = "http://rmecab.jp/R") :
  installation of package ‘RMeCab’ had non-zero exit status
> quit()
Save workspace image? [y/n/c]: n

■修正内容

echo "/usr/local/lib"  >> /etc/ld.so.conf.d/R-x86_64.conf
ldconfig

Rコマンド上からinstallもできた。
結果、当然ながらZeppelinからも問題なく動いた。

ZeppelinのSample

backupの意味もかねて

%spark

val dbDriver = "com.mysql.jdbc.Driver"
val dbUrl = "jdbc:mysql://<server name>:3306/<database name>?useUnicode=true&characterEncoding=UTF-8"
val dbUsername = "********"
val dbPassword = "********"

val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val df = sqlContext.read.format("jdbc").options(Map("url" -> dbUrl, "dbtable" -> "<table name>", "driver" -> dbDriver, "user" -> dbUsername, "password" -> dbPassword)).load()

df.cache


%spark
//df.select("birthday").orderBy(desc("birthday")).show()
//val b = df.select(abs((substring($"birthday",1,3) * 10).cast("Int") - 2016) as "a").cube("a").agg( count("*") as "total" )
val b = df.select(abs((substring($"birthday",1,3) * 10).cast("Int") - 2016) as "a").cube("a").agg( count("*") as "total" )
//b.printSchema()
b.show()
//z.show(b)

%spark
val b = df.select(
    (datediff(current_date(), $"birthday")/365.25).cast("Int") as "a")
    .groupBy( ($"a"/10).cast("Int")*10 as "年代" )
    .agg( count("*") as "total" )
    .orderBy("年代")
//b.printSchema()
//b.show()
z.show(b)

えええ、、Link Paragraphはログインしている状態じゃないとみれないの。。。
うーん、、、

CentOS7.2へZeppelin0.7.0のインストール

Zeppelinになれてきたのでちゃんとした環境を作ろうと
サーバをちゃんと借りて再度、過去の手順を実施。

全然動かんし、Manualも0.6.0はほぼLink切れになり始めてるし。

というわけで、ダイジェストで振り返り。

過去記事
CentOS7にZeppelinインストール
Apache ZeppelinでMysql接続
ZeppelinでRを使う
ZeppelinでLogin機能をつける

で、実はMysqlの接続方法など思ったのと違ってたから変えたんだけど記事を忘れてた。
これが正式版だ!

一応、公式
これもバージョンアップしたらリンク切れになるんだろう。
ここのInstallを手順のベースにするのは変わらない。

事前準備

yum update
yum install git
yum install java-1.8.0-openjdk-devel
yum install npm
yum install fontconfig-devel

wget http://www.eu.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
sudo tar -zxf apache-maven-3.3.9-bin.tar.gz -C /usr/local/
sudo ln -s /usr/local/apache-maven-3.3.9/bin/mvn /usr/local/bin/mvn

wgetが利用しているCloudが腐っていたのか一時的に使えず。
IP-V6の問題かと思ったけど、再度OSから入れなおしたら動いたのでそんなことなさそう。

Zeppelinインストール

git clone https://github.com/apache/zeppelin.git
cd zeppelin/

mvn clean package -Pspark-1.6 -Phadoop-2.6 -Pyarn -Ppyspark -Psparkr -Pvendor-repo -Pmapr51 -DskipTests

# -Prオプション指定すると失敗する。RへのPathが通っていないことが原因だと思うが
# 解決方法が不明なのでsparkrが使えればいいやと諦め。

-Prを指定した時のエラー

[INFO] --- exec-maven-plugin:1.2.1:exec (default) @ zeppelin-zrinterpreter ---
+++ dirname R/install-dev.sh
++ cd R
++ pwd
+ FWDIR=/root/zeppelin/r/R
+ LIB_DIR=/root/zeppelin/r/R/../../R/lib
+ mkdir -p /root/zeppelin/r/R/../../R/lib
+ pushd /root/zeppelin/r/R
+ R CMD INSTALL --library=/root/zeppelin/r/R/../../R/lib /root/zeppelin/r/R/rzeppelin/
R/install-dev.sh: line 38: R: command not found

簡単に動作確認

./bin/zeppelin-daemon.sh start
systemctl status firewalld
firewall-cmd --list-all
firewall-cmd --add-port=8080/tcp --zone=public --permanent
firewall-cmd --reload

設定変更するファイルのバックアップなど

cp -p ./conf/zeppelin-site.xml.template ./conf/zeppelin-site.xml
cp -p ./conf/zeppelin-env.sh.template ./conf/zeppelin-env.sh
cp -p ./conf/shiro.ini ./conf/shiro.ini.org

Login機能の有効化

shiro.ini

[users]
#admin = password1, admin
#user1 = password2, role1, role2
#user2 = password3, role3
#user3 = password4, role2

[urls]
#/** = anon
/** = authc

[users]領域
デフォルトのユーザをコメントアウト。
その後独自のユーザパスワード、Roleを設定。

[urls]領域
anonをコメントアウト。authcのコメント解除。

zeppelin-site.xml

<property>
  <name>zeppelin.anonymous.allowed</name>
  <value>false</value>
  <description>Anonymous user allowed by default</description>
</property>

annonymousの許可を無効化(valueをtrue→false)

jdbcドライバの有効化

事前にWebSiteのInterpreterからJdbcを選択し、artifactに「mysql:mysql-connector-java:5.1.39」追加する。
0.6.0で設定失敗したなーと思ってたところが、できないように修正されてる!
zeppelin-env.sh

export SPARK_HOME="/home/*UserName*/zeppelin/spark-dependencies/target/spark-bin-dist/spark-1.6.1-bin-without-hadoop"
export SPARK_SUBMIT_OPTIONS="--jars /home/*UserName*/zeppelin/local-repo/mysql/mysql-connector-java/5.1.39/mysql-connector-java-5.1.39.jar"

これでほぼ理想的な動きになった。
SSL接続もできるようにする必要もありそう。

追記。
結局SPARKは別途入れました。
また、sparkのinterpreterにmysql:mysql-connector-java:5.1.39を追加しました。
逆に、SPARK_HOMEは設定したものの、SPARK_SUBMIT_OPTIONSは未設定です。

wget http://ftp.jaist.ac.jp/pub/apache/spark/spark-1.6.2/spark-1.6.2-bin-cdh4.tgz

さらに追記。
Rも結局入れました。
公式サイトを見よう。

yum install R R-devel libcurl-devel openssl-devel

+ devtools with `R -e "install.packages('devtools', repos = 'http://cran.us.r-project.org')"`
+ knitr with `R -e "install.packages('knitr', repos = 'http://cran.us.r-project.org')"`
+ ggplot2 with `R -e "install.packages('ggplot2', repos = 'http://cran.us.r-project.org')"`
+ Other vizualisation librairies: `R -e "install.packages(c('devtools','mplot', 'googleVis'), repos = 'http://cran.us.r-project.org'); require(devtools); install_github('ramnathv/rCharts')"`

ZeppelinでLogin機能をつける

公式情報

./conf/shiro.ini

[urls]
/api/version = anon
#/** = anon
/** = authc

公式情報にある通り進める。
anonをコメントアウト
authcのコメントアウトを解除

./conf/zeppelin-site.xml

<property>
  <name>zeppelin.anonymous.allowed</name>
  <value>false</value>
  <description>Anonymous user allowed by default</description>
</property>

zeppelin.anonymous.allowedの値をtrueからfalseに変更。

この後、zeppelinを再起動。

結果、shiro.iniの[users]領域にある値でログイン可能となる。
[main]や[roles]領域で細かな設定もできる様子。
とりあえず、defaultのユーザやadminをコメントアウト。

ZeppelinでRを使う

前回の記事

■インストールコマンド

mvn clean package -Pspark-1.6 -Phadoop-2.6 -Pyarn -Ppyspark -Pr -Psparkr -Pvendor-repo -Pmapr51 -DskipTests

Installで-Psparkオプションを指定したので、
SPARK_HOMEの設定は探し出して設定すればいいと思ってました。
なんで勝手に設定してくれないんだろうとも思ってました。

公式サイト

こちらを見るとどうやらSparkは対応していないようなので、このサーバにも入れる。
# InterpreterのSparkが有効なのはなんでだろうと思いつつ。。。

Spark Install

あれ、思ったよりすんなり動いた。
とくに記事にすることがない。。。

Apache ZeppelinでMysql接続

前回の記事

Apache Zeppelin Version 0.6.0をほぼ標準インストール。
DB接続して情報を抜きたかったが、psqlはもちろん、jdbc接続もPostgreSQLが標準設定。

なので、こちらの記事を参考にMysql接続設定を行う。

いきなり、Interpreterなんて選択肢ないけど。ということで探してみる。
どうやらAnonymousを選択すると出てくる。
zeppelin2

Interpreterに遷移後、右上にあるCreateボタンを押して作成。
zeppelinMysql

作成後、Mysqlを有効にする。
notebookからギアアイコンをクリック。
zeppelinInterpreter

色々間違えてることに気づきながらも進めてたけど、やっぱり動かない。
おかげでInterpreterの意味が分かってきたので良しとしよう。

公式サイトを参考に再度やり直し。

というわけで、Interpreter作り直し。
zeppelinMysqlJDBC
赤い部分はhostname。黒く塗りつぶしているところは、Database名を指定する。
Database名を設定しない場合は、Notepad側でUSE <database name>か、select * from <database name>.<tablename>でやれば問題なし。

2つめの注目点として、JDBCのグループで作成している。
MySqlの横に薄い文字で「%jdbc (default)」と書いている。
Notepadはこちらの値を指定すればよい。
公式情報によると、(default)の部分を変更すると自由に接続を変更できそう。
groupの設定は「%xxxx」を決めるためだと理解した。

次に、当たり前だけどPostgreSQLはDefaultで設定されているので
Mysql用のドライバが必要。
2016年7月2日で最新の5.1.39をartifactに設定。

で、最後にInterpreterの設定
interpreter
通常は追加したMysqlは一番下に来るが、%jdbcが重複しているので優先したいほうを上に持っていく。
または、不要なほうを無効にしてSave。
これで普通にselect文が実行できるようになる。

CentOS7にZeppelinインストール

https://github.com/apache/zeppelin
readmeを読みながら進める。
ただ、ubuntu用ぽいのでCentOS7用にちょっと変更。

また、色々入ってるサーバをそろそろなくす予定だったので
そちらに入れてみたらポート競合したぽいので新たにサーバ構築。
一応、古いけど、ほかにも参考にしたサイト。
「Apache Zeppelin」のインストール方法まとめ

準備

yum install wget
wget http://www.eu.apache.org/dist/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz
sudo tar -zxf apache-maven-3.3.3-bin.tar.gz -C /usr/local
sudo ln -s /usr/local/apache-maven-3.3.3/bin/mvn /usr/local/bin/mvn
yum install java-1.7.0-openjdk-devel
yum install npm
git clone https://github.com/apache/incubator-zeppelin.git
cd incubator-zeppelin/

このあと、手順のbasicと書かれているやつを選択してmvnすると
20分近く待たされてエラー。

[INFO] Running 'npm install --color=false' in /root/incubator-zeppelin/zeppelin-web
[ERROR] npm ERR! Linux 3.10.0-327.22.2.el7.x86_64
[ERROR] npm ERR! argv "/root/incubator-zeppelin/zeppelin-web/node/node" "/root/incubator-zeppelin/zeppelin-web/node/node_modules/npm/bin/npm-cli.js" "install" "--color=false"
[ERROR] npm ERR! node v0.12.13
[ERROR] npm ERR! npm  v2.15.0
[ERROR] npm ERR! code ECONNREFUSED
[ERROR] npm ERR! errno ECONNREFUSED
[ERROR] npm ERR! syscall connect
[ERROR]
[ERROR] npm ERR! Error: connect ECONNREFUSED
[ERROR] npm ERR!     at exports._errnoException (util.js:746:11)
[ERROR] npm ERR!     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1012:19)
[ERROR] npm ERR!  { [Error: connect ECONNREFUSED]
[ERROR] npm ERR!   code: 'ECONNREFUSED',
[ERROR] npm ERR!   errno: 'ECONNREFUSED',
[ERROR] npm ERR!   syscall: 'connect',
[ERROR] npm ERR!   parent: 'zeppelin-web' }
[ERROR] npm ERR!
[ERROR] npm ERR! If you are behind a proxy, please make sure that the
[ERROR] npm ERR! 'proxy' config is set properly.  See: 'npm help config'
[ERROR]
[ERROR] npm ERR! Please include the following file with any support request:
[ERROR] npm ERR!     /root/incubator-zeppelin/zeppelin-web/npm-debug.log
[INFO] ------------------------------------------------------------------------

よくわからないけど、npmで失敗。

cd zeppelin-web
npm install

元の階層に戻ってまたmvnでエラー

[ERROR] Failed to execute goal com.github.eirslett:frontend-maven-plugin:0.0.25:grunt (grunt test) on project zeppelin-web: Failed to run task: 'grunt test --no-color' failed. (error code 3) -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn  -rf :zeppelin-web

泣きたい。
結果、この前に実行した、npm installでWARNだったやつが問題?
Stackoverflow様をちゃんと見てたけど、やっぱりちゃんとやるべきだった。

npm remove karma-phantomjs-launcher --save
npm install karma-phantomjs-launcher --save-dev
cd ..
mvn clean package -Pspark-1.6 -Phadoop-2.4 -Pyarn -Ppyspark

やややややっときたああああああ

[INFO] Zeppelin ........................................... SUCCESS [  8.798 s]
[INFO] Zeppelin: Interpreter .............................. SUCCESS [02:29 min]
[INFO] Zeppelin: Zengine .................................. SUCCESS [ 34.787 s]
[INFO] Zeppelin: Display system apis ...................... SUCCESS [ 29.956 s]
[INFO] Zeppelin: Spark dependencies ....................... SUCCESS [ 47.237 s]
[INFO] Zeppelin: Spark .................................... SUCCESS [03:36 min]
[INFO] Zeppelin: Markdown interpreter ..................... SUCCESS [  0.991 s]
[INFO] Zeppelin: Angular interpreter ...................... SUCCESS [  0.375 s]
[INFO] Zeppelin: Shell interpreter ........................ SUCCESS [  0.424 s]
[INFO] Zeppelin: Livy interpreter ......................... SUCCESS [  0.685 s]
[INFO] Zeppelin: HBase interpreter ........................ SUCCESS [  9.418 s]
[INFO] Zeppelin: PostgreSQL interpreter ................... SUCCESS [  1.940 s]
[INFO] Zeppelin: JDBC interpreter ......................... SUCCESS [  2.734 s]
[INFO] Zeppelin: File System Interpreters ................. SUCCESS [  1.962 s]
[INFO] Zeppelin: Flink .................................... SUCCESS [ 33.481 s]
[INFO] Zeppelin: Apache Ignite interpreter ................ SUCCESS [ 24.512 s]
[INFO] Zeppelin: Kylin interpreter ........................ SUCCESS [  1.093 s]
[INFO] Zeppelin: Python interpreter ....................... SUCCESS [  1.736 s]
[INFO] Zeppelin: Lens interpreter ......................... SUCCESS [  7.790 s]
[INFO] Zeppelin: Apache Cassandra interpreter ............. SUCCESS [03:30 min]
[INFO] Zeppelin: Elasticsearch interpreter ................ SUCCESS [ 19.093 s]
[INFO] Zeppelin: Alluxio interpreter ...................... SUCCESS [01:02 min]
[INFO] Zeppelin: web Application .......................... SUCCESS [01:34 min]
[INFO] Zeppelin: Server ................................... SUCCESS [03:43 min]
[INFO] Zeppelin: Packaging distribution ................... SUCCESS [  2.195 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19:48 min

さっそく実行。

./bin/zeppelin-daemon.sh start

あとは8080ポートで接続すればOK!
firewallの解放も忘れずに。

zeppelin

PostgreSQL9.6betaのインストール

PosgreSQL公式サイト
PostgreSQL 9.4.4をソースコードからインストールする

日本法人サイトが上位に出てきて邪魔。
なにをするにも、最新バージョンと安定バージョンは確認したいので
せめてそれは日本法人サイトのほうにも載せてほしい。

yumだと結構古いのがインストールされるのでこの確認は必須だと思う。

いつもOSのバージョン確認方法を忘れるのでメモ

cat /etc/redhat-release

CentOS Linux release 7.2.1511 (Core)

yum install postgresql-server postgresql-contrib postgresql-devel

yumでPostgreSQLインストールをしたところ9.2.15-1.el7_2が入るらしい。

ReleaseNoteを斜め読みしたけど、特に必要だと思う差分は見つからない。
最近手を抜いてyumでやることも多かったけど、最近のOSSは昔と違って最新版(Beta)でも安定していると勝手に思ってるので最新版にしてしまおう。

公式サイトからsourceをダウンロード。

yum install zlib-devel
yum install readline-devel

postgreSQLに必要なものがあるらしいので2つともinstall

curl -O https://ftp.postgresql.org/pub/source/v9.6beta1/postgresql-9.6beta1.tar.gz
tar zxvf postgresql-9.6beta1.tar.gz
cd postgresql-9.6beta1
./configure

色々オプションあるみたいですが、特に指定なしで実施。

make
make install

.bashrcでpathを通す。

export PATH=/usr/local/pgsql/bin:$PATH

なんだかこの辺からあいまいなサイトが多くなったのでいくつかサイトを確認。
参考:PostgreSQL導入から接続まで
そして今更ユーザ追加。

useradd postgres
passwd postgres
...
...
su - postgres
vi .bashrc
    (省略)
    POSTGRES_HOME=/usr/local/pgsql
    PGLIB=$POSTGRES_HOME/lib
    PGDATA=$POSTGRES_HOME/data
    export PATH=$POSTGRES_HOME/bin:$PATH
mkdir /usr/local/pgsql/data

initdb --encoding=UTF8 --no-locale -D $PGDATA
pg_ctl -D $PGDATA start

systemctl start …みたいな起動をイメージしてたけど違うのか。

さっそくDB接続。
まだDBはないので、Defaultであるpostgresで試す。

psql postgres
select now();
\q

pg_ctl stop -D $PGDATA

最後に停止。

そして軽くよく使いそうなコマンドを探してみたらドンピシャなサイト
PostgreSQLとMySQLで、僕がよく使うシステムコマンドのメモ

うーん。。
こういう文字数を極限まで減らしたのって、他のツール触ってると忘れるから嫌なんだよね。
高校生の時にVCの本とか読んでも???だったのも、文字が省略されすぎてて暗号にしか見えなかったのも原因だと思うんだよね。
略語ということさえわからなかったし。

話はそれたけど、大体これで確認できたかな。
あとはまたWordpressのDBだけ移行して、全部混ざったサーバをついに捨てよう。

MariaDBインストール(からのPostgreSQLインストール)

Memo: MariaDBのインストール/初期設定

MariaDBのインストールは他のサービスよりも情報が豊富で洗練されているように感じたが
微妙に使えなかったので自分で作成。

関係ないけどMariaDBだけでなく、Gitlab、Nginx、PHP-FPMなどなど
昔と比べて、ディレクトリ構造など統一されてきてかなり楽になったなー。

インストール

yum install -y mariadb mariadb-devel mariadb-server

設定ファイル変更

cp -p /usr/share/mysql/my-default.cnf /etc/my.cnf.d/default.cnf
vi /etc/my.cnf.d/default.cnf

[client]
default-character-set = utf8

[mysqld]
character-set-server = utf8

サービス起動

systemctl start mysql

<初期化>
/usr/bin/mysql_secure_installation

最初にパスワードを聞かれるが、ここまで何も設定していないので何も入力せずにEnter
次にパスワード設定されるのか聞かれるので、yを押してパスワードを二回入力。

それ以降のメッセージも大体yを押して次へ。

rootユーザでdatabaseへ接続

mysql -p
Enter password:

色々確認

show databases;
show tables from mysql;
status
select host, user from mysql.user;

ここまで来たところで以前インストールしたものより古いことが発覚。
また、使い勝手もイマイチな雰囲気を受けたのでビルドからに切り替える。

と、思ったが、それをするならPostgreSQLにしてもいいのではと。
そこで色々確認。
昔調べた感じでは、PostgreSQLはマルチコア、MySQLはマルチスレッド
CPUリソースを使い切れるのはMySQLだからおすすめ!みたいな記事が多かった印象。
でもMySQLがOracleに買収されたということで、MariaDBかPostgreSQLの比較に。

調査を進めるとなんだかPostgreSQLが勝つことありきで記事書いてるなという印象が強い。
でも、GitlabなんかもPostgreSQLに変わったみたいだし、流れはPostgreSQL側になってきていると感じる。

2014年の夏ごろに作ったシステムでMariaDBを採用した経験&2016年1月ころの経験上
まだMariaDBのJDBCドライバーがイケてない。MySQLのJDBCドライバのほうができることが多い。
しっかりベンチマークしたわけではないが、速度もMySQLのほうがはやいので
サポートが弱いと判断されてPostgreSQLに流出するのはありえるのかもしれない。
MySQLユーザには当たり前かもしれないが、結合が1種類しかないのもSQLが直感的に書けなくて嫌だし。。

じゃぁ、PostgreSQLが主流なのか?と思ってグーグルトレンドで確認。
MySQLがどんどん下がっていってるものの、他と比べると圧倒的に検索されている。
念のためMySQLを比較からはずしてみた。
結果、PostgreSQLは下げ止まりして微増しているようにみえた。

みんなどんなデータベース使ってるんだよ。。。

NoSQLで代用できるのかと確認してみたが、やっぱり普通の使い方するならDBで良さそう。
単純に熟成してきて調べることもなくなってきたと勝手に結論づける。

勝手に回避してたけど、なにげにWikiが一番欲しい情報乗ってた。

機能だけ見ると確かにPostgreSQLに軍配が上がる。
でもどうしても決め手に欠ける。
恐らく、どちらも熟成してるってことなんだろう。。。
PosgreSQL推し、MariaDB下げの記事みてもなんかイチャモンにしかみえないし。。

ただ、MySQL使ったことがあり、PostgreSQL使ったことない身としては
Wikiの問い合わせ機能の表は正直許せるレベルじゃない差だったので今回はPostgreSQLを採用。
マルチコア、マルチスレッドの問題も、今の時代に限界性能まで引き出す必要がある要件が想像できないし、
仮に存在してもチューニングした結果は誤差レベルに落ち着くだろうから、そもそも別アプローチが必要なはず。
と、すっぱいブドウ理論で自分を納得させる。(なんだこの問題点。)

前置きが長くなった。。。

PostgreSQLインストールにて改めて書き直し。

Apache Spark9

ApacheSparkについて書くのもついに記事も9投稿目。
ビッグデータを解析するのは良いんだけど、その後よくわからないデータをどのように表現してよいか悩んでた。

単純にApacheSparkのWebUIやGraphXなどが該当すると思っていた。
Apache Zeppelinというのが可視化(Visualization)するために作られたものぽい。

グラフ化したいという思いから、検索でgraphといれるとgraphXが引っかかる。
思ったページとはちょっと違うという人は、Visualizationで検索しよう!
あとはchartもそこそこ調べたい内容が表示してくれる。
(この検索ワードを探すために仕事中に抜け出して本屋に行くという。。。)

可視化で調べると、大体こんなところにも行きつく。
NVD3
D3.js
KIBANA
などなど聞くが、Spark内で完結しているものという思い込みがあるため、ちょっと戸惑っていた。

結局、ぼくがやりたかったことは、中でSpark使ってることは当然だけど可視化の部分が超重要だったので
Sparkの話題はここまでで、これからはApach zeppelinで進めていくことになりそう。

かなり遠回りしてしまった。

そのzeppelinを使ったおすすめサイトはこちら。
ことり隊入荷情報をSparkで分析してTableauで可視化する

というわけで、またサーバ構成変更しよう。