dateコマンドでdate: illegal time formatエラー
OSXで、
$ date +"%Y-%m-%d" -d '1 day ago' > usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
とか出てしまったりorz
waaaaatと思ってたら完全にこれだった。。
OSXとGNU系コマンドを揃える - Qiita
$ echo `date -d '1 day ago' +"%Y-%m-%d"` usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format] $ echo `date -v-1d +"%Y-%m-%d"` 2014-10-23
$ echo `date -d '1 day ago' +"%Y-%m-%d"` 2014-10-23 $ echo `date -v-1d +"%Y-%m-%d"` date: invalid option -- 'v' Try 'date --help' for more information.
うむ
gsutilを使ってplayストアのデータを取得する
クリーンインストールしたからか、ローカルにgsutilコマンド無くなってたので、入れ直してみた。
前回はgsutilだけをインストールして使ってたけど、ドキュメントによるとGoogle Cloud SDK入れてその中のgsutilコンポーネント使ってね、って感じに変わってた。
https://cloud.google.com/storage/docs/gsutil_install
Google Cloud SDK Documentation | Cloud SDK | Google Cloud Platform
普通にインストールしてunzipした後、
$ ./google-cloud-sdk/install.sh // いい感じにパス通してくれたりする(zshもOK) $ ./google-cloud-sdk/bin/gcloud init // authentificationとかも含めてloginとかする(前回authentificationどうだったけな・・ここやってないとgsutilでのcpでauth失敗する)
できたら、あとは普通に使えるようになる。
$ gsutil cp gs://pubsite_prod_rev_123456hogehgoe.csv ~/Downloads // インストール数とかダウンロード
AndroidストアのデータをElasticsearchに入れてkibanaで表示
データ入れる
ストア管理画面から、アプリデータのcsvファイルを取得して、./app_data/csv/
に入れる。
簡単なconfigurationをseed.yml
に書く。
in: type: file path_prefix: ./app_data/csv/ out: type: elasticsearch index: app_data index_type: android nodes: - host: localhost
で、
$ embulk guess ./app_data/csv/ -o config.yml
とすると、いい感じにconfig.ymlを作ってくれる!sugoi! タイムゾーン変えたい場合は以下加える。
parser: default_timezone: 'Asia/Tokyo'
で、
$ embulk run config.yml -c diff.yml
にて、データ入る。素晴らしい!
ref: Scheduled bulk data loading to Elasticsearch + Kibana 4 from CSV files — Embulk 0.8 documentation
kibanaで表示
例として、アプリのマンスリーレポートのcountryレポートのcsvデータを読み込んだとする。
主要国のcurrent device installとかを出してみる。
Visualize
でフィルターに"Country": "US"
として、X-Axis
にDate-Histogram
で、Y-Axis
にAggregationでSum
(current device installにすでに集計されたデータ入ってるのでそれを表示するために仕方なく。別にmaxでもminでも同じ表示になる。)を設定、Field
にCurrent Device Install
をセット。これで反映すると日別のUSのアプリインストールされてるデバイス数推移が出る。
んー、なんかもっとスマートにやりたいな。もっといじっていく。
Elasticsearchで大量データ挿入でのエラー(queueのcapacity)
これはなに
前回のMysqlからESにデータを200万件くらい入れるとエラー出て5000件くらい喪失してた件。 MysqlからElasticsearchにデータを入れる - mazeltov7のweb断片
ログをチェックすると、esrejectedexecutionexception queue capacity 50
とか出てて、このあたりっぽい。
exception - EsRejectedExecutionException in elasticsearch for parallel search - Stack Overflow
ここも参考。
fluentd -> Elasticsearch 大量データ転送でトラブル | diaspora
とりあえずbulkのqueueのキャパを増やして再トライ
elasticsearch.ymlで、
threadpool.bulk.queue_size: 100 // デフォルト50
結果:ES内データ2068221
(Mysqlのデータ2068246
)
惜しい・・20件くらいどっか行ってる・・
次は、
threadpool.bulk.queue_size: 130 // デフォルト50
でトライ
結果:ES内データ2068246
(Mysqlのデータ2068246
)
YAY!
ただ、途中で以下のこのエラーやっぱり出てるの気になるな・・
[99]: index [.marvel-es-1-2016.09.20], type [index_stats], id [AVdG8wYaTnsUn8dLrCLT], message [RemoteTransportException[[Avarrish][127.0.0.1:9300][indices:data/write/bulk[s][p]]]; nested: EsRejectedExecutionException[rejected execution of org.elasticsearch.transport.TransportService$4@3a0e97f2 on EsThreadPoolExecutor[bulk, queue capacity = 130, org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor@4c6977a4[Running, pool size = 8, active threads = 8, queued tasks = 130, completed tasks = 7362]]];]]
まぁ、データ入ったので、ちと保留
MysqlからElasticsearchにデータを入れる
embulkを入れる
GitHub - embulk/embulk: Embulk: Pluggable Bulk Data Loader. http://www.embulk.org
$ brew install embulk
ドキュメントのGetting Startedやって雰囲気をつかむ。
embulkのpluginのembulk-input-mysql, embulk-output-elasticsearchを入れる
embulk-input-jdbc/embulk-input-mysql at master · embulk/embulk-input-jdbc · GitHub
GitHub - muga/embulk-output-elasticsearch
$ embulk gem install embulk-input-mysql $ embulk gem install embulk-output-elasticsearch
で、入れるmysqlのデータ、ESのデータのconfigurationのconfig.ymlを書く。
in: type: mysql host: localhost user: $user_name password: $password_name database: $database_name table: $table_name select: "*" out: type: elasticsearch index: $index_name index_type: $index_type_name nodes: - {host: localhost, port: 9300}
で、
$ embulk preview config.yml // 確認 $ embulk run config.yml // 実行
PS: 200万件くらい入れたら、途中数回エラーが出て5000件ほど入ってなかったので確認をば。queueのcapacityが50にしてて、そのを越えた?っぽい。ので調整で再トライ。esrejectedexecutionexception queue capacity 50
この辺ぽい
node, nvm, npmセッティング(OSX)
node入れようとする
brewで入れると最新バージョン取ってくるので、今だと以下の6.5.0を取ってくる。
まぁ、いいけどメジャーなrecommendedの方が良さそうな気がするので、バージョン切り替えしやすいようにしておくためにnvmを入れる。
(brewで入れたnodeとnvmで入れたnode併存し得るので、nvmだけでnode入れる)
nvm入れる
$ brew install nvm $ mkdir .nvm $ vim .zshrc # 以下を追加 export NVM_DIR="$HOME/.nvm" . "$(brew --prefix nvm)/nvm.sh"
node入れる
$ nvm ls # ローカルに入ってるnodeを一応確認 $ nvm ls-remote # リモートのnodeバージョン確認 $ nvm install OOO # 希望のバージョンをインストール $ node -v
てか、npmはnode入れると入ってるぽい
Elasticsearch + kibanaのセットアップ
検索とかメインじゃなくて、データ表示がメインです。
Elasticsearchをダウンロード
公式サイトからzipをダウンロードする。
(brewで入れてもいいんだけど、plugin使うならpathが微妙だったので、そのまま入れる)
Download Elasticsearch Free • Get Started Now | Elastic
公式ドキュメントのgetting startedに沿ってやる
Elasticsearch Reference [2.4] | Elastic
kibanaも入れて、公式ドキュメントに沿ってやる
Download Kibana Free • Get Started Now | Elastic
次にESを監視できるmarvelを入れて、以下略
こちらはplugin Download Marvel • Monitoring for Elasticsearch | Elastic
いい感じにjsonのquery書けるsenseを以下略
これもplugin Sense Documentation | Elastic