hbase shell实现原理简析
hbase的交互式命令行是通过jruby实现的,当我们输入hbase shell时,实际上最终执行的是org.jruby.Main,并以bin/hirb.rb作为参数,注意是根目录下bin目录中的hirb.rb,而不是hbase-shell中的irb/hirb.rb;
这个类来自jruby的包,作用是把ruby编写的代码转换成java字节码,进而能够运行在JVM中;
实现逻辑大体可分为2个阶段:初始化阶段和命令执行阶段,前者是启动shell时的执行逻辑,后者是输入命令后的执行逻辑,以下分别简述其流程;
初始化阶段
1、创建HBaseConfiguration实例,并将启动时带的键值对参数设置进去;
2、创建Hbase实例,初始化connection,代码在hbase.rb中;
3、创建Shell实例,此时会执行一些load_command_group方法,这些方法实际上是初始化了commands和command_groups这2个map变量,commands中存放了各个命令的name与class的映射关系,代码在shell.rb中;
4、接下来执行Shell实例的export_commands方法,通过instance_eval为commands中的所有命令动态添加一个方法到Shell实例中;
命令执行阶段(以list命令为例)
1、执行前述动态生成的list方法;
2、执行Shell实例的command方法,参数为list;
3、执行internal_command,该方法内部先调用command_instance按一定规则创建该命令对应class的实例:List,所有命令的class都会继承Command类;
4、执行List的command_safe方法,这个方法在Command类中,该方法内部通过调用send(cmd, *args)来执行List的command方法,List类定义在list.rb中,Command类定义在commands.rb中;
5、List的command方法先后调用了Command、Shell、Hbase等类中的admin方法,最后得到一个Admin实例,该类定义在admin.rb中;
6、执行Admin实例的list方法,该方法内部实际上执行了HBaseAdmin的listTableNames来得到结果;
调试
如果希望在本地环节启动hbase shell,可参考如下配置;
//Main class org.jruby.Main //VM Options -Dhbase.ruby.sources=E:\github\hbase\hbase-shell\src\main\ruby //Program argument E:\github\hbase\bin\hirb.rb //Use classpath of module hbase-shell
默认情况下连的是localhost的hbase,如果希望连远程集群,可以修改hbase-shell模块中hbase.rb的configuration,指定hbase.zookeeper.quorum参数即可;
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Elasticsearch学习-嵌套文档
本文以Elasticsearch 6.8.4版本为例,介绍Elasticsearch嵌套文档的使用。 最近一段时间都在搞Elasticsearch搜索相关的工作,总结一下搜索知识点供大家参考。 在Elasticsearch取消了多个索引内创建多个type的机制,由于场景需要,所以调研了嵌套文档和父子文档 以文章和文章留言为例,嵌套文档都在一个文档内,而父子文档则分开存储了父文档与子文档,本文我们来学习嵌套文档的使用。 1、嵌套文档 嵌套文档看似与文档内有一个集合字段类似,但是实则有很大区别,以上面图中嵌套文档为例,留言1,留言2,留言3虽然都在当前文章所在的文档内,但是在内部其实存储为4个独立文档,如下图所示。 同时,嵌套文档的字段类型需要设置为nested,设置成nested后的不能被直接查询,需要使用nested查询,这里不做具体介绍,详细查看1.2。 1.1 创建索引 接下来,介绍一下如何创建嵌套文档索引,比如有这样的数据,如下: { "title": "这是一篇文章", "body": "这是一篇文章,从哪里说起呢? ... ...", "comments": [ { "nam...
- 下一篇
5月6日云栖号头条:五五购物节16小时,上海商家成交额超去年200%!
云栖号:https://yqh.aliyun.com第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策! 今日最新云头条快讯: 五五购物节16小时,上海商家成交额超去年200%! 阿里巴巴公布了参与上海“五五购物节”的首日成绩单——从5月5日0点到16点,数以万计的上海商家在天猫平台业绩超过去年同期,上海商家在天猫平台成交额达到去年同期的近200%。此外,聚划算帮助上海品牌突破圈层、获取新客,带来生意新增量,聚划算数据显示,上海品牌水星家纺在5日0点刚过16分钟,销售额就超过去年同期的全天。“五五购物节”启动16小时,现在的数字只是刚刚开始,从淘宝直播间、各大商圈、街边小店等不断刷新纪录并向上跳跃的数字中,我们能看见上海“五五购物节”促消费的巨大成效,看见新消费爆发的无限潜能,阿里巴巴还将在5月、6月继续推出大力度促消费实招,形成可持续的新消费增长点。 长征五号B运载火箭首次飞行任务取得圆满成功 5月5日18时00分,为我国载人空间站工程研制的长征五号B运载火箭,搭载新一代载人飞船试验船和柔性充气式货物返回舱试验舱,在我国文昌航天发射场点...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Linux系统CentOS6、CentOS7手动修改IP地址
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题