关于Hbase手动实现Major Compact的办法

来源:互联网 发布:建筑业收据单软件 编辑:程序博客网 时间:2024/04/29 01:50

      本人小菜,如有错误或疏漏之处,请各位大牛批评指正,求共同进步。发表此博文,旨在帮助遇到类似问题的朋友一点小的建议或思路。废话少说,开始吧。。。

      最近,因项目需要。Hbase数据量很大,项目组提出需要对Hbase中目前所有表(当前有5个)进行major_compact操作。是按照需要,每天凌晨3点自动执行major_compact操作。

     

      具体实现:

                       前期方案:调用hbase相关API,如:hbaseadmin下面有major_compact方法。可以用java等一门程序语言,通过major_compact方法来控制Hbase的compact操作。但是,需要连接数据库具体操作;而且要打包程序,通过这个单独的应用程序来执行major_compact操作。

                       

                       最后方案,我联想到既然在hbase shell下面有提供major_compact这个操作。那么是否可以采用类似shell脚本方式来管理hbase。答案是肯定的,搜集相关资料,我发现,hbase shell 是支持ruby相关操作的。于是我在ruby中去调用major_compact这个方法。验证结果是肯定的,在ruby下,major_compact就如在hbase shell中一样,成功地得到了执行。

                       具体步骤:

                                       1. 在Linux中新建一个*.rb(ruby文件),把hbase shell中的major_compact()操作直接放入这个ruby文件中去执行。

                                           .rb文件中:

                                                            major_compact("tablename")  #一次只能执行一张表的major_compact操作

                                       2. 写一个shell脚本文件,在shell中去执行这个ruby文件,当然(让这个ruby文件在hbase shell中运行),利用crontab命令实现定时(凌晨3点)自动执行hbase的major_compact任务。

                                           .sh文件中:

                                                           hbase shell   ./*.rb  #当然此处添加你自己的文件所在位置

      总结:之所以要这样做,是为了实现我们定时完成major_compact()操作,而且我们想操作哪些表,哪些表就可以得到major_compact()结果。当然,由于之前我提示过,major_compact()方法,它本身是hbase shell下面的功能,根据说明,它一次只能操作一个表名,那么如果我要一次操作hbase中所有表且要定时,那么可以考虑自动执行或者我们本博文中提到的方法,然后要外加获取所有表,对所有表进行遍历表名,依次执行major_compact操作。这个只是目前思路,没有用到。

PS:以上若有不正确或者有什么建议和意见,请各位同事同仁,大牛前辈些批评指正,共同学习进步。

                       

0 0
原创粉丝点击