原创文章,请各位多多指导,有错误希望各位能及时告诉我,感激不尽~
(1) 前面我们说了,locateRegion这个函数会根据tablename,rowkey,usercache,来定位data放在哪个reginserver上,那么具体是如何定位的呢?阅读源码,一行一行的仔细来看:(PS:Hbase的很多参数可以在Hconstants类中找到)
a) 首先会检查与zookeeper的链接是否close了,如果close了,那么就会抛出throw new IOException(toString() + " closed");异常,接下来判断传入的tablename,参数是否有误,以及抛出相应exception
b) Next,会判断传入的tablename是否eques HConstants.ROOT_TABLE_NAME,即是否是-ROOT-表,如果是,那么就会调用rootRegionTracker,从zookeeper上获得-ROOT-表所在的RegionServer,返回包装后的HregionLocation对象,这里用户可以设置超时时间:
this.rpcTimeout = conf.getInt(
HConstants.HBASE_RPC_TIMEOUT_KEY,
HConstants.DEFAULT_HBASE_RPC_TIMEOUT);默认超时时间是DEFAULT_HBASE_RPC_TIMEOUT = 60000,hbase.rpc.timeout是设置超时时间的参数名称。
c) Next,会判断传入的tablename是否eques HConstants.META_TABLE_NAME,即.META.表,如果是,那么调用locateRegionInMeta方法,该方法参数传入parenttable,tablename,row,usecache,regionLockObject,首先会根据用户是否设置了cache,判断是否从cache中读取HregionLocation,如果说从cache中拿不出来table的信息,那么就会继续触发下面函数,调用HregionInfo来create一个metakey,这个metakey即region的meta信息,接下来在设置的retyiestimes(hbase.client.retries.number,默认值是10)内,尝试定位locateRegion,这里即调用上一步说到的locateRegion函数,这是一个递归的调用,这里传入的parentablename是root表name,那么这里就会得到root所在的regionserver的链接,在获得链接之后,会在获取regionInfoRow代码中加锁,这是为了防止2个线程并发的同时去获得region的meta信息,加锁之后,第一个访问的线程查询返回结果之后,第二个线程会use the value that the first one found.下面便会调用 server.getClosestRowBefore,从root表中查找RowKey最接近的row,并获得这个row所在的regionserver,然后返回HregionLocation。Root表以及meta表的结构是完全一样的,例如下面:
d) Next,因为不是root表,也不是meta表,那么就会将metatable名称当作parenttable传入locateRegionInMeta函数,去定位region,这里的调用和前一步meta表调用类似。
e) 大致调用步骤可以归类为:
1. 根据传入的tablename,rowkey,timestamp合成metakey
2. 根据传入的parenttable,metakey,定位父级region,这个定位过程是递归的,以用户表为例,假如表明为table1,那么table1的parenttable是.META.,.META.的parenttable是-ROOT-,这样递归调用返回就是metakey所在的regionserver,
3. 打开定位的regionserver的connection,这里就是打开.META.表的 regionserver。
4. 从打开的regionserver的connection查询ClosestRowBefore,拿到regionInfoRow,这里的结构就是上图中的图1。
5. 从regionInfoRow这个Result中拿出info columnfamily中的regioninf列的value,然后用这个value生产HregionInfo对象。
6. 从regionInfoRow这个Result中拿出info columnfamily中的server列的value。
7. 根据5,6步拿到的HregionInfo以及server地址,生产HregionInfo对象。
8. 将7生产的HregionInfo放入cache,然后返回HregionInfo对象。
- 大小: 41.1 KB
分享到:
相关推荐
14. ** Coprocessor**:Coprocessor是HBase的一种扩展机制,允许在Region Server上运行用户自定义的代码,实现数据过滤、计算等功能。 15. **数据模型**:HBase采用宽行模型,适合处理大量稀疏数据,特别适用于实时...
### HBase Coprocessor:深度解析与应用案例 #### 概览 HBase Coprocessor 是 HBase 的一个核心特性,允许用户在 RegionServer 上执行自定义代码,从而实现数据处理逻辑靠近数据存储的位置。这一特性极大地提高了...
6. **src目录**:源代码目录,对于开发者来说,如果想要了解HBase的内部工作原理或进行二次开发,这个目录非常有用。 7. **webapps目录**:包含HBase的Web管理界面,通过浏览器可以查看集群状态、表信息等。 在...
分布式Java应用基础与实践源码分析 在当前的互联网时代,分布式系统已经成为企业级应用的主流架构。Java作为广泛使用的编程语言,其在分布式领域的应用非常广泛。本篇将深入探讨分布式Java应用的基础知识和实践要点...
6. **查询处理**:查询处理通常涉及查询解析、查询路由、分布式匹配和结果聚合。Hadoop集群中的每个节点都可以接收查询请求,然后根据索引数据进行局部匹配,最后将结果汇总。 7. **优化与扩展性**:为了提高性能,...
7. **日志解析与预处理**:理解日志格式,编写代码解析日志,进行数据清洗和预处理。 8. **性能优化**:考虑系统性能,如Spark的并行处理优化、内存管理和资源调度。 以上是基于Flume、Spark和Flask的分布式实时...
总结来说,Apache Flume 是一个强大的日志聚合框架,它利用 Java 源码实现了高效的数据流动管理,具备灵活的配置、丰富的组件选择和高可用性,广泛应用于日志管理和大数据处理领域。通过学习和掌握 Flume,开发者...
- **智能流量调度**:根据流量模型预测和分析,自动调整路由策略,优化带宽资源。 - **安全态势感知**:通过大数据分析网络流量,提高对安全威胁的检测和防御能力。 - **业务连续性保障**:通过预测性维护,确保...
5. **源码实现**:通过阅读和分析分布式文件系统的源码,可以深入理解其实现细节,如数据通信、故障检测、数据恢复等机制。 在毕业设计中,你可以选择一种或多种分布式文件系统进行研究,分析其优缺点,设计实验...
3. 日志收集与监控:利用Flume收集日志,并通过Kafka进行传输,将数据存储在HBase或OpenTSDB,再用Spark Streaming进行实时分析,提供了全面的监控能力。 4. 调用跟踪:通过Java Agent和AspectJ技术实现无侵入式的...
3. **上下文路由功能**:支持根据数据内容进行智能路由,提高了数据处理的灵活性。 4. **事务性保障**:Flume的数据管道基于事务,保证了数据传输过程的一致性和完整性。 5. **高度可靠**:Flume具有高容错性、可...
为了快速入门Mycat,你可以通过Eclipse启动源码并进行调试,设置Debug级别日志,以便于深入理解SQL处理的各个环节,包括收取、解析、路由、执行逻辑和结果集处理。对AIO模型的熟悉,包括数据的排序和分组优化,是...
安全性原则要求在系统开发的各个环节强化安全措施,包括代码安全、数据加密和权限管理,与其他安全系统如统一身份认证系统、安全监控管理系统集成,以增强整体安全性。 管理、操作和易维护性原则意味着系统需具备...
这是一个基于Java技术栈构建的实时数据推荐系统,前端采用了现代化的Web开发框架Vue.js,并结合了TypeScript以增强代码的类型安全性和可维护性,同时使用了ElementUI作为UI组件库,提供美观且易于使用的界面。...
本文主要探讨服务化框架的技术选型,涉及RPC框架、服务注册中心及其相关考量因素,并通过京东的实践经验进行分析。 首先,服务化框架的基本构成包括管理端、服务注册中心以及统一的RPC框架。管理端用于对服务进行...
本文将深入分析分库分表的概念、原理及其在实际应用中的策略。 分库分表,顾名思义,是指将一个大型的数据库拆分成多个较小的数据库和表格,以此来分散负载、提升查询效率。这种技术通常被称为水平扩展或数据分区。...
Zookeeper的源码分析对于理解分布式协调的原理非常有帮助。此外,SLA(服务等级协议)的设定也是确保系统可靠性的必要条件。 2.5 开发者社区与生态 选择有活跃开发者社区和技术支持的技术,可以降低学习成本,提高...
这涉及HTTP缓存、CDN加速、数据库查询优化、代码级别的性能分析等。如GZIP压缩、HTTP2协议的使用可以减少网络传输延迟,而数据库索引、JOIN操作的合理使用则能提高数据处理速度。 最后,持续集成与持续部署(CI/CD)...
Openfire是一款流行的XMPP服务器软件,它可以为Spark客户端提供服务,如身份验证、消息路由等。将Spark与Openfire搭配使用,可以构建一个强大的实时通信系统,特别是在需要大规模分布式处理和协作的场景下,如大数据...