わかった風のことを書くBLOG

仕事(IT)のはなしや、地元(沖縄)の話などなど記載してきます〜

Hadoop/hiveのバックアップとデータ移行

 なんだか最近Hadoop周りしか記事書いてない気もしますが、誰か見てるかもしれないという希望的観測のもと、Hadoop/hive の組み合わせという多分一般的な構成の手動でのアナログ的なバックアップ手法、及びデータ移行についてメモっときます。

概要

  1. HDFS の /user/hive/warehouse/ をLinuxファイルシステムのファイルとして保存
  2. hive metastore のデータをダンプ
  3. 上記、2つをデータ移行先で復元する

手順

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

備考

 異なるクラスタ感でHDFSファイルを移行するには以下のやり方もありますが、異なるバージョンや慣れ親しんだLinux上のファイルシステムで移行、及びバックアップをとルト言う方法は直感的に分かりやすいかと。

hadoop distcp -p hftp://fromhadoop:50070/path/to/file hdfs://tohadoop:9000/path/to/file