Presto勉強会参加してきました
GWは8連休のにいやんです。こんばんわ。
8連休だわー!コーディングはかどるわー!って思ってたらあっという間に半分終わってましたよ。
1行もコーディングしてないよorz
さてさて、先日株式会社イプロス様で行われたPresto勉強会に参加してきました!
Prestoは最近使い始めたばっかりなので、SQLを書くコツとか色々知る事が出来たので気になったトピックを幾つか紹介したいと思います
・joinするときは絞ってからjoin
joinしてから絞るとデータ全部1度prestoに持ってきてしまう。
・where句つけないとfullscan走るから親が死んでもつける。
・likeよりregexp_likeが早い
・with句便利
・大量のデータsortすると1つのworkerに集中するのでだめ絶対
・approx_distinctでおおまかに取りましょう
・window関数便利だわ〜
・cross joinやin(......)は遅い
・マルチバイトは3バイトになるので、注意よ
・とにかくメモリもりもりの勝利
などなど、他にも今後の展開予定の話などもありました。
今後の参考になる話が色々聞けたので、これを元に開発していきたいと思います!
発表された資料は以下から見ることが出来ます。
Presto 複数データソースへの接続方法
awk好きのにいやんです。こんばんわ。
awk使えば大抵の処理はいけますからね!簡単な処理はcutで。
前回ではPrestoのインストール方法を書きましたが、今回は複数のデータソースにつなぐ方法を紹介したいと思います。
PrestoではCatalogという単位でデータソースを追加出来ます。
追加出来るデータソースは
・Hive
・Cassandra
などがあります。
Catalogを追加するには、etc/catalog下に
{カタログ名}.propertiesファイルを追加するだけでOK
例えばMySQLだったら
mysql.propertiesファイルを以下のように作成
vi etc/catalog/mysql.properties
# connector.name=mysql
# connection-url=jdbc:mysql://example.net:3306
# connection-user=root
# connection-password=secret
複数のmyqlに繋ぎたい際は
mysql1.properties,mysql2.propertiesの用にCatalog名を任意の名前に変えればOKです
PostgreSQLのCatalogファイルは以下のように
vi etc/catalog/postgresql.properties
# connector.name=postgresql
# connection-url=jdbc:postgresql://example.net:5432/database
# connection-user=root
# connection-password=secret
{Catalog名}.{DB名}.{テーブル名}でアクセス出来ます。
select * from mysql1.hogedb.moge;
MySQLとPostgreSQLのjoinも出来ちゃいます
select *
from
mysql1.hogedb.moge m
join
postgresql.pdb.moge p
on
(m.id = p.id);
MySQLとPostgreSQLだけでなく、Hiveや別のMySQLともjoin出来るので、ログデータとサマリーデータを分けて保管してる場合などの検索にとても便利かと。
また、create table文を使うとHiveに入ってるデータをMySQLに入れる事なんかも出来ますよ。
CREATE TABLE mysql1.hogedb.orders_by_date AS
SELECT orderdate, sum(totalprice) AS price
FROM hive.hdb.orders
GROUP BY orderdate
え?何故create table文を使うのかって?insert into 使えばいいじゃないかって?
残念ながらhiveのデータをmysqlに入れる際にinsert into文は今はまだサポートされていないっぽいです・・・
ここら辺は今後に期待ですね!
Presto インストール方法
Prestoの速さ、便利さに驚愕しているにいやんです。
こんばんわ。
Prestoとは簡単に言うと、HiveやCassandra,Mysqlなどにつなぐことが出来る高速なSQLクエリエンジンです。
Prestoについての概要などは以下の資料がわかりやすいと思います。
てなわけで、Prestoのインストール方法です。
基本的にはprestoの公式ページ参照にしていただければ、よいと思います。
https://prestodb.io/docs/current/installation/deployment.html
今回インストールしたprestoのバージョンは0.100です。
Coodinator1台 Woker3台で作ってみました
0.100ではJava 8,python2.4以上が必要になるので、事前に入れておきましょう。
wget --no-check-certificate --no-cookies - --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.tar.gz
wgetしたら適当なディレクトリに解凍してPATHを通しておきましょう
次にprestoの取得です。
# prestoをインストールする適当なディレクトリに移動
wget --no-check-certificate https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.100/presto-server-0.100.tar.gz
tar zxvf presto-server-0.100.tar.gz
cd presto-server-0.100
# etc ディレクトリ作成
mkdir etc
# presto data用ディレクトリ作成
# 場所はどこでも良いが,上記でインストールしたpresto-server内にするとバージョンUPが
# 大変になるので、そこには作るなと公式が言っている
mkdir -p /var/presto/data
各種設定ファイル作成
# node設定ファイル作成
# node.idはcoodinator,workerでそれぞれ違う任意の値に 値はなんでもよい
vi etc/node.properties
# node.environment=production
# node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
# node.data-dir=/var/presto/data
# jvm設定ファイル作成
vi etc/jvm.config
# -server
# -Xmx16G
# -XX:+UseConcMarkSweepGC
# -XX:+ExplicitGCInvokesConcurrent
# -XX:+AggressiveOpts
# -XX:+HeapDumpOnOutOfMemoryError
# -XX:OnOutOfMemoryError=kill -9 %p
# Coodinator用設定ファイル作成
# task.max-memoryの設定によって処理出来るデータ量が決まる
vi etc/config.properties
# coordinator=true
# node-scheduler.include-coordinator=false
# http-server.http.port=8080
# task.max-memory=1GB
# discovery-server.enabled=true
# discovery.uri=http://{coodinatorのサーバ名}:8080
# worker用設定ファイル作成
# task.max-memoryの設定によって処理出来るデータ量が決まる
vi etc/config.properties
# coordinator=false
# http-server.http.port=8080
# task.max-memory=1GB
# discovery.uri=http://{coodinatorのサーバ名}:8080
# log設定ファイル作成
vi etc/log.properties
# com.facebook.presto=INFO
今回はhiveにつなぐのでhive用の設定ファイル作成
mkdir etc/catalog
# hive設定ファイル作成
vi etc/catalog/hive.properties
# connector.name=hive-cdh5
# hive.metastore.uri=thrift://{hiveメタストアサーバ名}:9083
# hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml
ここまで出来たらcoodinator,workerの順に起動
# まずフォアグラウンドで実行してみる
bin/launcher run
# エラーなど起きなかったらバックグラウンド実行
bin/launcher start
wget --no-check-certificate https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.100/presto-cli-0.100-executable.jar
mv presto-cli-0.100-executable.jar bin/presto
#実行権限付与
chmod +x bin/presto
bin/presto --server localhost:8080 --catalog hive
# 接続出来た!!
show tables;
# などで確認出来る。
次回はcliツールのさらなる使い方、複数のhiveやMysqlなどへのつなぎ方を書こうと思います。
mysqlとhiveのjoinなども出来ますよ!
参考にしたサイト
さくらVPSでのRuby on Railsインストール方法
子供の寝つけ方を日々研究しているにいやんです。こんにちわ。
ほんと赤ちゃんは寝てほしい時に寝てくれないですよね。
寝たと思っても、ベットに連れて行くとすぐ起きたりするし・・・
さて、さくらVPSにrbenv使ってrubyとrails入れたのですが、色々と大変だったので、そのメモです。
railsのバージョンは4.2になります
rbenv,rubyインストール
# インストールに必要なディレクトリ作成
mkdir ~/local
mkdir ~/local/src
mkdir ~/local/bin
# gitが入ってる事確認
which git
# rbenvをclone
cd ~/local
git clone git://github.com/sstephenson/rbenv.git rbenv
mkdir ~/local/rbenv/plugins
cd ~/local/rbenv/plugins
git clone git://github.com/sstephenson/ruby-build.git ruby-build
# .bashrcに環境変数設定
vi ~/.bashrc
# export RBENV_ROOT=$HOME/local/rbenv
# export PATH=$RBENV_ROOT/bin:$HOME/local/bin:$PATH
# eval "$(rbenv init -)"
source ~/.bashrc
# rbenvでrubyインストール
cd ~/local
TMPDIR="${PWD}/tmp" rbenv install 2.1.4
rbenv rehash
rbenv global 2.1.4
# gem でbundlerインストール
gem install bundler
# sslエラーが出る場合
# 試用期間などでsslが使用出来ない場合は以下を実行
gem source --list
gem source --add http://rubygems.org/
gem source --remove https://rubygems.org/
gem source --list
rails インストール
gem install rails
#nokogiriあたりで以下のようなエラーが起きた
Building native extensions. This could take a while...
ERROR: Error installing rails:
ERROR: Failed to build gem native extension.
/home/yupics/local/rbenv/versions/2.1.4/bin/ruby extconf.rb
checking if the C compiler accepts ... yes
Building nokogiri using packaged libraries.
checking for gzdopen() in -lz... yes
checking for iconv... no
-----
libiconv is missing. Please locate mkmf.log to investigate how it is failing.
-----
# nokogiriをおまじないつけながら単体でインストールする
NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri --no-rdoc --no-ri
#さいどrailsインストール
gem install rails
# インスール出来たー!!
# ためしになにか作ってみる
rails new hogehoge
# sslのエラーとか出たらGemfileのhttps://rubygems.org/をhttp://rubygems.org/へ変更
#だが、まだsqlite3のエラー出るので適当なディレクトリでsqliteコンパイル
wget http://www.sqlite.org/2015/sqlite-autoconf-3080803.tar.gz
tar xvf sqlite-autoconf-3080803.tar.gz
cd sqlite-autoconf-3080803
./configure --prefix=$HOME/local
make
make install
# そしてsqliteをgem
gem install sqlite3 -- --with-opt-dir=$HOME/local
#はいった!
こんなんで、railsのインストールはなんとか出来ました!!