在Hadoop集群中,数据文件是以Block的方式存储在HDFS上,而HDFS上数据的名称,副本存储的地址等都是通过NameNode上的元数据来保存的。Hive的数据库和表的数据也是保存在HDFS中,而Hive的元数据metastore则保存在关系型数据库中。这些文件和数据如果丢失或者损坏,都会导致相应的服务不可用,Hadoop集群可以启用某些组件和服务的高可用或者备份,来应对可能出现数据损坏问题。但是在集群需要迁移,集群需要扩容或者缩容,或者其他情况,集群可能会面对数据安全风险的时候,我们可以通过主动备份这些数据,来保证数据安全。以下是Hadoop在Linux上的数据备份与恢复的方法:
NameNode元数据备份与恢复
-
备份:
- 进入安全模式,禁止HDFS的写操作:
sudo -u hdfs hdfs dfsadmin -safemode enter
- 保存最新的fsimage到磁盘并且重置edits:
sudo -u hdfs hdfs dfsadmin -saveNamespace
- 将更新后的NameNode元数据信息复制到磁盘的其他位置:
sudo -u hdfs cp -r /dfs/nn/* ./nnbak/
- 进入安全模式,禁止HDFS的写操作:
-
恢复:
- 退出安全模式:
sudo -u hdfs hdfs dfsadmin -safemode leave
- 删除两个NameNode节点上的元数据:
sudo -u hdfs mv ./current/ bak/ sudo -u hdfs mv in_use.lock bak/
- 把备份文件复制回去,并还原所有文件的属组为hdfs:
sudo -u hdfs cp -r nnbak/* /dfs/nn sudo -u hdfs chown hdfs:hdfs -R current/
- 在其他节点上也进行相同的操作,然后启动NameNode成功。
- 退出安全模式:
MariaDB元数据备份与恢复
-
备份:
- 停止集群和CMS服务。
- 在安装数据库的节点上备份MariaDB上相关的数据库:
mysqldump -uroot -p123456 --databases am cm hue metastore nav_as nav_ms oozie rm sentry > dump.sql
-
恢复:
- 删除导出的这些数据库。
- 导入刚才dump出来的数据:
mysql -uroot -p123456 < dump.sql
HDFS数据备份与恢复
-
备份:
- 使用
hdfs dfsadmin
命令创建快照进行备份:hdfs dfs -createSnapshot /path/to/data snapshot_name
- 使用
-
恢复:
- 使用
hdfs dfsadmin
命令恢复快照:hdfs dfs -delete /path/to/data hdfs dfs -cp /path/to/backup/.snapshot/snapshot_name/file /path/to/data
- 使用
请注意,以上信息提供了在Linux系统上使用Hadoop进行数据备份与恢复的一般指导。在实际操作中,应根据具体环境和需求调整命令和步骤。