原创文章,请各位多多指导,有错误希望各位能及时告诉我,感激不尽~
1. 不管客户端官方实现是采用processBatchOfRows,还是processBatchOfDeletes这种批量添加,删除,最终插入,删除的核心还是还是getRegionServerWithRetries方法,批量添加,删除还是
a) 批量操作:
1. 生产Map<HServerAddress, MultiAction>,拿到传入的row list,即worklist,这里的rowlist就是缓存中的操作,然后通过row,定位regionlocation,然后得到HserverAddress,然后一个address与multiaction关联,multiaction是一批操作的集合,即put,get,delete 的集合。这个关联操作是在集合中进行的,也就是是说会向multiaction中添加action,action是用regionName,row,originalIndex三个参数构造的,我们知道,put,get,delete都实现了row接口,这样,我们就将serveraddress以及针对这个serveraddress有哪些操作关联了起来。
2. 接下来构造Map<HServerAddress,Future<MultiResponse>>对象,接下来遍历Map<HServerAddress, MultiAction>对象,调用:
futures.put(e.getKey(), pool.submit(createCallable(e.getKey(), e.getValue(), tableName)));方法,这样就会启用线程池去批量执行callable任务,这里的callable任务就是针对每个key -> serveraddress拿到multiaction去执行,然后返回future调用结果。而这里的createCallable方法,就会调用我所说的核心方法getRegionServerWithRetries。
3. 拿到返回的result,根据result的结果,如果为null,那么就放入worklist中,准备重试,返回的也可能是exception,那么就拿到这些exception,然后放入exception list中,接下来判断if (!exceptions.isEmpty()),那么就throw new RetriesExhaustedWithDetailsException,将异常包装之后,抛出。
所以,批量处理无非是启用线程池,将action提交到worklist中,由多个线程去处理,每个线程处理的任务是其实是multiple的,即他的一个任务中,又包含了多个put,get,delete任务,一个线程处理的就是一个serveraddress对应的一批任务。这里的serveraddress是由locateRegion(tableName, row.getRow(), true)确定的,而这个函数就是上面所诉的:Hbase理由代码分析中的核心函数。
分享到:
相关推荐
4. 错误处理:HbaseClient具有良好的错误恢复机制,当服务器端出现问题时,客户端会自动重试,保证数据操作的可靠性。 5. 客户端缓存:为了提高性能,HbaseClient使用了缓存策略,如Cell缓存和RowCache。Cell缓存将...
HBase基于Google的Bigtable设计,适用于大数据分析和实时查询。 Java API是与HBase交互的主要方式之一,它允许开发者创建、修改和查询表。以下是一些基本操作: 1. **连接HBase**:使用`Configuration`类配置HBase...
Phoenix使用Java存根(stub)和服务器端的元数据服务来处理SQL到HBase的映射,从而减轻了客户端的负担。 在Squirrel SQL Client中,要使用"phoenix-5.0.0-HBase-2.0-client.jar",你需要首先将其添加到Squirrel的驱动...
例如,HBaseClient类就是客户端操作的核心类,通过它可以直接获取到MasterServer的HMasterInterface实例,进而调用其提供的各种接口方法来执行集群管理任务。对于服务端而言,每个服务端组件(如HMaster、...
`hbase-client`包含了与HBase交互的API,`hbase-server`则包含了服务器端组件,如RegionServer和Master,而`hbase-common`则包含通用的类和接口。 2. **设计理念**: HBase采用行式存储,将数据按行键(RowKey)...
在高并发写入场景下,HBase的HDFS Client端可能会出现SocketTimeoutException错误,例如: ```plaintext 2012-03-02 12:11:21,983 WARN org.apache.hadoop.hdfs.DFSClient: DFSOutputStream ResponseProcessor ...
Python操作HBase是一种常见的情景,特别是在大数据处理和分析领域。HBase是一个分布式、高性能、基于列族的NoSQL数据库,它构建在Hadoop文件系统之上,提供了对大规模数据的实时访问。Python作为一门易学易用的编程...
这个版本的HBase还支持时间戳和版本的特性,使得用户可以追溯数据的历史变化,这对于审计和数据分析非常有用。同时,HBase提供了强大的实时查询能力,通过索引和过滤机制,用户可以快速定位到所需数据,满足实时业务...
1. **客户端(Client)**:使用HBase的RPC机制与HMaster和HRegionServer进行通信,实现数据读写等操作。 2. **ZooKeeper**:作为HMaster选举和服务状态监控的核心组件,同时也是Region寻址的入口。 3. **HMaster**:...
它提供了代码生成工具,可以将服务定义转换为多种编程语言的客户端和服务器端代码。在HBase和Hive与PHP交互时,Thrift作为通信层,使得不同语言之间能够高效地交换数据和调用服务。 4. **PHP**:PHP是一种广泛使用...
HBase的源码通常包括多个模块,如`hbase-client`, `hbase-server`, `hbase-common`等。这些模块分别负责客户端API、服务器端服务和通用功能。通过解压源码,我们可以看到每个模块的源文件组织方式,了解其模块划分...
系统架构方面,HBase有三个主要组件:Client、Zookeeper和服务器端组件。Client提供了多种访问接口,包括Java API、Shell命令、RESTful API等,方便用户与HBase交互。Zookeeper是集群的协调者,负责元数据管理、选举...
### Hadoop+Hbase技术使用...- **client端** - 使用客户端工具连接Hbase。 - **停止** - 关闭Hbase服务。 通过上述步骤,可以完成Hadoop与Hbase在单节点上的安装与配置工作,为后续的数据处理与分析打下坚实的基础。
同时,确保HBase的regionserver和client端的配置文件中包含Phoenix的依赖库。 8. **验证运行**:通过编写简单的SQL查询或使用Phoenix的命令行工具(如`sqlline.py`),测试Phoenix是否能正确地连接到HBase并执行...
- **Server端计算支持**:增强HBase以支持服务器端聚合操作,如group by、avg和sum等。 - **资源隔离与优先级控制**:通过Group级别的资源隔离机制,为不同任务设定优先级。 #### 最佳实践 - **合理设计Row Key与...
### Client端优化 - **日志收集**:对客户端的日志进行统一收集,以便于问题定位和性能优化。 - **统一Bom文件**:使用统一的Bill of Materials (BOM)文件来管理依赖项版本,例如排除commons-logging依赖,将Guava...
Hadoop-hdfs.jar和hadoop-hdfs-client.jar包含了HDFS的服务器端和客户端API,使得Impala能够读取和写入HDFS中的数据。 Hadoop-MapReduce是另一种处理大规模数据的计算框架,这里包含的hadoop-mapreduce-client-core...
#### Client端Application提交流程源码分析 Client端提交作业的过程涉及多个关键技术和步骤,主要包括: 1. **使用Google的ProtoBuf技术**:用于序列化和反序列化数据。ProtoBuf是一种轻量级的数据交换格式,类似...