HBase 增量备份
文中可能涉及到的API: Hadoop/HDFS:http://hadoop.apache.org/common/docs/current/api/ HBase: http://hbase.apache.org/apido
文中可能涉及到的API:
Hadoop/HDFS:
HBase: ?overview-summary.html
Begin!
使用了HBase提供的Export与Import工具。
Export:
Import:
看到这两个类所在目录我们了解到,Export与Import的实质是MapReduce任务。
关于这两个工具API中写的很清楚:
Export an HBase table. Writes content to sequence files up in HDFS. Use Import to read it back in again.
将HBase的表导出为HDFS的sequence files。
Export如其名,只是导出工具,如何完成备份功能呢?
二、功能实验
测试过程涉及很多数据,这里仅提供重要结论:
1、Export是以表为单位导出数据的,若想完成整库的备份需要执行n遍。
2、Export在shell中的调用方式类似如下格式:
./hbase org.apache.hadoop.hbase.mapreduce.Export 表名 备份路径 (版本号) (起始时间戳) (结束时间戳)
Export [-D
括号内为可选项,例如
./hbase org.apache.hadoop.hbase.mapreduce.Export 'contentTbl' /home/codeevoship/contentBackup20120920 1 123456789
备份contentTbl这张表到/home/codeevoship/contentBackup20120920目录下(最后一级目录必须由Export自己创建),,版本号为1,备份记录从123456789这个时间戳开始到当前时间内所有的执行过put操作的记录。
注意:为什么是所有put操作记录?因为在备份时是扫描所有表中所有时间戳大于等于123456789这个值的记录并导出。如果是delete操作,则表中这条记录已经删除,扫描时也无法获取这条记录信息。
3、当不指定时间戳时,备份的就是当前完整表中的数据。
三、实施细节
1、如何在增量备份时体现出对数据的删除操作?
由于Export按时间戳备份只能反映出Put过的表项,若我在一个备份(增量包)时间区间内删除了某条已有记录,当数据库回档时,这条被删除的记录又会出现在我的表中。
因此,我将所有的删除操作替换为Put操作:
a、给每行数据添加了一个无效标志位,在删除记录时使用Put给该标志位写为1。
b、在单条查询时,根据rowKey取出记录后会根据这个标志位判断这条记录是否已被“删除”,以此决定是否返回这条记录。在多条查询时(scan),使用列值过滤器,过滤出所有这个标志位不为1的记录。(可参见我之前的《HBase 条件查询》 )
2、在备份过程中新增的数据是否会影响备份内容的准确性?
可以指定小于等于当前时刻的结束时间戳,以便将需要备份的数据范围明确。
3、如何备份到其他机器?
a、Export支持提供地址的备份。最简单的方法,直接把远端存储挂载到本地,然后使用本地路径。
b、使用API调用时,Path如果使用file:///home/codeevoship/backup,代表使用本地文件系统。若直接写为/home/codeevoship 代表使用HDFS层的路径。在使用Shell调用时则相反。
4、如何使用API调用?
通过MapReduce的Job:
先通过Export类提供的方法创建Job实例,再调用Job的()或(boolean verbose);异步与同步。
四、其他解决方案
1、HDFS层的HDFS Replication或DistCp
2、Cluster Replication

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

苹果公司最新发布的iOS18、iPadOS18以及macOSSequoia系统为Photos应用增添了一项重要功能,旨在帮助用户轻松恢复因各种原因丢失或损坏的照片和视频。这项新功能在Photos应用的"工具"部分引入了一个名为"已恢复"的相册,当用户设备中存在未纳入其照片库的图片或视频时,该相册将自动显示。"已恢复"相册的出现为因数据库损坏、相机应用未正确保存至照片库或第三方应用管理照片库时照片和视频丢失提供了解决方案。用户只需简单几步

如何在PHP中使用MySQLi建立数据库连接:包含MySQLi扩展(require_once)创建连接函数(functionconnect_to_db)调用连接函数($conn=connect_to_db())执行查询($result=$conn->query())关闭连接($conn->close())

PHP中处理数据库连接报错,可以使用以下步骤:使用mysqli_connect_errno()获取错误代码。使用mysqli_connect_error()获取错误消息。通过捕获并记录这些错误信息,可以轻松识别并解决数据库连接问题,确保应用程序的顺畅运行。

在Golang中使用数据库回调函数可以实现:在指定数据库操作完成后执行自定义代码。通过单独的函数添加自定义行为,无需编写额外代码。回调函数可用于插入、更新、删除和查询操作。必须使用sql.Exec、sql.QueryRow或sql.Query函数才能使用回调函数。

通过Go标准库database/sql包,可以连接到MySQL、PostgreSQL或SQLite等远程数据库:创建包含数据库连接信息的连接字符串。使用sql.Open()函数打开数据库连接。执行SQL查询和插入操作等数据库操作。使用defer关闭数据库连接以释放资源。

在C++中使用DataAccessObjects(DAO)库连接和操作数据库,包括建立数据库连接、执行SQL查询、插入新记录和更新现有记录。具体步骤为:1.包含必要的库语句;2.打开数据库文件;3.创建Recordset对象执行SQL查询或操作数据;4.遍历结果或按照具体需求更新记录。

如何将GoWebSocket与数据库集成:设置数据库连接:使用database/sql包连接到数据库。将WebSocket消息存储到数据库:使用INSERT语句将消息插入数据库。从数据库检索WebSocket消息:使用SELECT语句检索数据库中的消息。

本篇文章将详细介绍如何安装和注册比特币交易应用。比特币交易应用允许用户管理和交易比特币等加密货币。文章逐步指导用户完成安装和注册过程,包括下载应用程序、创建账户、进行身份验证和首次存款。文章的目标是为初学者提供清晰易懂的指南,帮助他们轻松进入比特币交易的世界。
