Hadoop/hiveのバックアップとデータ移行
なんだか最近Hadoop周りしか記事書いてない気もしますが、誰か見てるかもしれないという希望的観測のもと、Hadoop/hive の組み合わせという多分一般的な構成の手動でのアナログ的なバックアップ手法、及びデータ移行についてメモっときます。
手順
1. HDFS の /user/hive/warehouse/ をLinuxファイルシステムのファイルとして保存
hiveのデータはHDFS の /user/hive/warehouse/ に格納されてますのでこれをLinuxファイルシステム(ローカル)として抽出し、圧縮、またhiveのmetastoreも合わせてバックアップ
$ hadoop fs -get hdfs://{fromhadoop_host}/user/* ./
$ tar zcvf hive_warehouse.tar.gz hive/
※{fromhadoop_host}部分は移行元のIP or hostを指定します
2.hive metastore のデータをダンプ
データと合わせてhiveのメタストアをバックアップします。今回はhiveのmetatoreにmysqlを利用してるのでmysqldumpコマンドでバックアップします
$ mysqldump -u root -p hive > dump
3. 上記、2つをデータ移行先で復元する
1.2 で取得した、hiveのデータとmetastore(mysqldump)を移行先へ転送
$ scp hive_warehouse.tar.gz exsampleuser@{tohadoop_host}:
$ scp dump exsampleuser@{tohadoop_host}:
バックアップならここまでで終了ですが、別のクラスタへの移行・復元する場合。
metatoreをリストア
$ echo "drop database hive; create database hive;" | mysql -uroot -p
$ mysql -u root -p < dump.sql
hiveデータを解凍してリストア
※既存データを削除して行う
$ hdfs dfs -rm -r /user/hive/warehouse
$ tar -xzvf hive_warehouse.tar.gz
$ hdfs dfs -put hive/warehouse /user/hive/
※旧構文 hadoop dfs -rmr