なにかのきろく

ひっそりと戻ってきて自分のためになるべく頑張る・・・

最近、EMRとかRedshiftとか触ったときのこと

2016年12月頃にEMRとか触ったので備忘録など

 

seyoshinori.hateblo.jp

 

これの続きです。


宿題になっていた部分です。

3.ファイル出力
 単純にローカルにファイルを出力する。
 このファイルをRedshiftにcopyするので行っていた。
 HIVEで以下のコマンドを実行です。

 hive -e "<SQL文>" > ./output.csv

4.EC2に転送
 EC2上で起動しているHadoopからファイルを取得する。
 以下のようなコマンドで実現できる。
 
 aws emr get --cluster-id <クラスターID> --key-pair-file <.pemファイル>

 --src <送るファイル> --dest <送り先>


宿題終わり。

 

その他、使ったコマンドとか。

■s3からEMRに資材をダウンロードする
 aws s3 sync s3://hoge/hogehoge/hogehogehoge ./

■EC2からredshiftへデータを挿入
 PGPASSWORD='パスワード' /usr/bin/psql -h ほすと.amazonaws.com -U ゆーざー

 -d データベース -p ポート

 -w -c "copy <redshiftのテーブル> from 's3://hoge/hogehoge/データ.csv'

 CREDENTIALS 'aws_access_key_id=<きー>;aws_secret_access_key=<きー>'  delimiter ',' NULL AS '\\\N' csv;"
 ※csv形式のhiveデータをcopyする。
 ※Redshiftへの基本的な命令コマンドにあるcopy以外にdeleteやselect count()も出来る。

■hiveのテーブルをs3に落とす的な
 hadoop jar /home/hadoop/lib/emr-s3distcp-1.0.jar --s3ServerSideEncryption \
 --src hdfs:///user/hive/warehouse/<db名>/<テーブル名>/ \
 --dest s3://hogehogehoge/hogehoge/<テーブル>
 ※パーティションの単位で取りたい場合はそのフォルダまで指定する
 ※srcとdestを反対にすれば

■ec2上のファイルを任意のs3上にupする
 aws s3 cp --sse <ファイル名> s3://hogehoge/hoge/hoge/

■RedShiftからS3にUnloadする。
 PGPASSWORD='パスワード' /usr/bin/psql -h ほすと -U ユーザー

 -d データベース -p ポート

 -w -c "unload ('select * from <redshiftのテーブル名>') to 's3://hoge/hogehoge/<テーブル名>'

 CREDENTIALS 'aws_access_key_id=<きー>;aws_secret_access_key=<きー>'

 delimiter ',' gzip;"
 ※gzip形式で落とす

 

 

 

end