前几天和公司的同事杨传辉(http://www.nosqlnotes.net/)做了简单的关于hbase的交流。这里做下简单的记录。Q为杨传辉,A为我。
Q: .meta.和root表是否要分裂? |
A: meta表和root表不会分裂,代码中有所判断。 |
Q: 如果不分裂,那么都只有1个region? |
A: ... |
(查看代码后)A: meta和root表是要split的,.meta.和-root-不split是在0.20.6以前的版本,升级到0.89以后都会split了,只是不分裂的代码接口还保留着,实际调用的并不是这段代码。-root-理论上也会split,而且一旦发生split就完蛋。但是因为root要split要满足超过1600亿的region,而region的数量被限制在Integer.max(4亿多),所以这种情况是不会发生的 |
Q: 二级索引如何实现? |
A: 目前没有好的实现。 |
Q: 提供一个建议。google的做法是让应用层自己建索引表。写数据时先写数据再写索引,读数据是先读索引再读数据。这样最多是有些数据读不到,不会产生读出错误数据。 |
A: 其实以前hbase的版本有过二级索引,实现时也是先写数据再写索引,索引放到后台队列中异步地写。实现最终一致。 |
Q: 我讨厌最终一致这个词。它其实定义很含糊。 |
A: 恩,hbase后来移走这块代码的一个原因就是索引到底落后数据多少时间是不确定的,特别是在异常的情况下。这样就导致在清理hlog时无法确定一个hlog是否真正全部写入数据了。 |
Q: 所以像google那样交给应用层去做是很简单有效的一个做法。 |
A: 应用层的压力会增大? |
Q: 要有相应的取舍。 |
A: oceanbeans如何实现二级索引及事务? |
Q: ob的写是单机的,所以二级索引和事务都可以像传统数据库那样实现,完全基于内存的实现。 |
Q: hbase中append如何实现?如何保证发生异常时不丢失数据? |
A: append是hbase写hlog时才做的。打开autoflush的情况下每次会把数据提交到服务器端。服务器端记录下hlog和写入memstore后返还给用户成功 |
Q: 每次都把hlog写到磁盘? |
A: 每次都写。 |
Q: 速度是多少? |
A: 响应时间单线程约为毫秒级,低于10ms。在做fsync时会超过10ms,fsync每秒1次或每64MB一次 |
Q: 那不可能,一次写磁盘至少要10ms以上。 |
A: ... |
Q: 如果没有写透到磁盘,那在1s以内是会丢失数据? |
A: ... |
A(查看代码):在hlog这一块是在append的时候追加数据用流式追加到hfile中,相当于顺序写一个日志文件。每条记录都会flush并且通过os的pagecache往文件里落地,如果单次写请求数据很少那效率确实会低不少。所以批量提交数据会有更大的优势(用put(List put)接口)。数据是不会丢失的。 |
Q: append需要和master通信吗? |
A: 不需要,每次写都是直接联系datanode。 |
Q: 那怎么知道当前append的offset? |
A: 写之前请求master当前的offset。写完再通知master更新blockmap。 |
Q: 那能读到最新写入的数据吗? |
A: … |
A(回来思考了一下): 不需要立即读到最新的数据,因为这是hlog,即时性没有那么高。在每次执行了fsync后就能读到。 |
Q: 写是一个还是三个备份成功才返回? |
A(不确定): 两个。 |
A(查看代码): 三个。它是一个pipe的模式,先自己写,然后交给next,next也会先写再交给下一个next,直到没有next为止。然后依次返回每一次的结果,如果有一个出错,就会抛出异常给client |
Q: 那返回出错怎么处理? |
A: 出错后默认的client向namenode请求新的结点新建chunk文件进行重试。 |
Q: cluster中各机器是如何相互知道对方存在的。 |
A: namenode和datanode、hmaster和zookeeper、zookeeper之间、regionserver和zookeeper、hmaster和regionserver之间都存在hearbeat。 |
Q: heartbeat机制是有问题的,比如因为gc或者网络抖动导致暂时心跳停止如何处理? |
A: gc时间一般很短,网络抖动也非经常的现象,稍调大心跳lease时间就可以了 |
Q: 不能说一般,只要理论上可能出现的问题,实际应用中必然出现,特别是海量数据 |
A: ...ob如何处理这种问题? |
Q: ob的slave都是静态数据,所以不存在这种问题 |
A: 目前至少namenode和datanode、hmaster和regionserver、zookeeper之间这三组心跳发生以上问题都不太影响。zookeeper和regionserver以及hmaster之间的心跳确实都会造成相应的影响 |
Q: 很难在测试环境中模拟出这种情况 |
A: 怎么模拟? |
Q: 找QA帮忙,QA是知道如何模拟出网络不稳定的情况的。 |
Q: 启动cluster的时候,hlog恢复时间长,是因为什么原因? |
A: hmaster单线程读hlog,然后单线程parse,多线程恢复数据。当hlog多的时候,时间就会很长 |
Q: 此时所有的regionserver呢? |
A: regionserver在等待master做这个事。 |
Q: 那region都处于offline状态? |
A: 是的 |
Q: 那数据如何写入? |
A: ... |
A(查看代码): 这里的关键是hlog中含有每一行数据的region信息。因此启动时只要读到这个region,hmaster就到对应的hdfs目录下创建一个新的文件。将相应的数据通过hdfs直接写入这个文件,这样在region扫描storefile时就能读到这个数据了。 |
Q: 那顺序如何保证? |
A: hmaster在恢复hlog时,默认以128M为单位缓存读到的数据。缓存时采用了一个treemap,因此写入的数据也是有序的 |
分享到:
相关推荐
【HBase在大数据领域的定位】 HBase,全称为Hadoop Base,是一款开源的分布式列式存储系统,是Apache Hadoop生态系统的重要组成部分。在大数据领域,HBase被定位为大规模、实时读写、低延迟的数据存储解决方案。它...
- **配置项说明**:对HBase中的各种配置选项进行解释,包括内存管理、日志记录等高级设置。 #### 三、基本先决条件 - **操作系统需求**:列出支持的操作系统版本和最低要求。 - **JDK版本**:指定兼容的JDK版本,...
基于Flink+SpringBoot+Hbase的商品实时推荐系统源码+全部资料齐全 flink统计商品热度,放入redis缓存,分析日志信息,将画像标签和实时记录放入Hbase在用户发起推荐请求后,根据用户画像重排序热度榜,并结合协同...
而在操作系统层面,小米使用了Linux内核版本2.6.32,调整了ulimit设置,对ext4文件系统进行了微调,设置了mount参数,关闭了文件系统的访问时间记录,使用了tune2fs命令进行优化,并启用了NTP服务。此外,还关闭了...
* 交流日志查阅:对实验机分享交流的内容进行查询,包含交流 IP、相关学员、相关老师、实验机编号、交流内容等内容。 * 成绩管理:对于学习中心在线学习的学习考核成绩进行管理,包含查询及删除等功能。 * 学习记录...
在Hadoop系统平台架构方面,卢亿雷详细介绍了其核心应用模块,例如数据采集服务、在线数据分析、离线数据分析等,以及这些模块如何处理每天新增的海量数据,并对千亿条记录进行计算。卢亿雷特别强调了Hadoop系统架构...
导购搜索的目的是吸引搜索购物资讯的流量,商品搜索主要聚焦于商品的搜索功能,购物社区(淘吧)是用户购物后的交流分享平台,问答搜索则是提供购物相关问题的答案服务。每个模块的性能和质量都会直接影响用户的体验...
1. **1025分会场3大数据金牌训练营演讲速记稿.doc**:这个文档可能详细记录了关于大数据领域的深度探讨,可能涵盖了大数据处理框架如Hadoop、Spark的最新进展,以及大数据分析、数据挖掘和机器学习的应用案例。...
2. 使用Hive、Spark、HBase等工具进行数据仓库建设和ETL(提取、转换、加载)工作,同时掌握数据同步工具,实现自动化运维。 3. 开发基于大数据平台的产品,例如数据仓库平台,实现多租户和权限控制策略。 4. 参与...
该平台在电火花成形机床领域尤为关键,它能够提供设备运行的连续数据记录和分析,以便预测和避免潜在的故障。 2. 数据采集与分析技术:数据采集主要通过传感器、数据采集板卡等硬件设备获取机床实时运行状态的数据...
- 使用如HBase或Cassandra这样的列式存储系统,可以优化对大规模结构化数据的查询效率。 4. **数据分析与可视化**: - 分析阶段可能使用统计方法和机器学习算法来揭示数据中的模式和趋势。Python的Pandas库和R...
3. **数据持久化**:使用SpringBoot集成Redis或HBase等NoSQL数据库,实现推荐结果的高速缓存,提高推荐性能。 4. **安全控制**:通过Spring Security,可以轻松实现系统的认证与授权,保护用户数据的安全。 5. **...
9. **错误处理与日志记录**:Kettle提供了详细的错误处理机制和日志记录功能,有助于调试和监控数据处理过程,确保数据处理的准确性和完整性。 10. **社区与资源**:作为开源项目,Kettle拥有活跃的社区,用户可以...
他们需要考虑如何整合不同的数据源,例如日志、传感器数据、交易记录等,并构建适合这些数据特性的平台。 2. **通用平台建设**: 构建数据交换和任务调度的通用平台是大数据架构师的重要工作之一,这涉及创建能够...
为了处理这些数据,我们可能需要用到如Hadoop、Spark等大数据处理框架,以及HBase、Cassandra等NoSQL数据库系统,它们能有效存储和查询大规模非结构化数据。 在开发过程中,我们需要考虑以下几个核心知识点: 1. *...
【描述】"中国2018大数据大会全套ppt资料"意味着这是一份全面记录了大会演讲和讨论的资源集合,可能涵盖了大数据的基础概念、核心技术、实际应用以及未来展望等多个方面。通过这些PPT,我们可以了解到当时中国大数据...
3. **大数据来源和采集**:课程讲解了大数据的来源,如社交媒体、传感器数据、交易记录等,并讨论了如何有效地采集这些数据,包括网络爬虫、API接口和其他数据获取技术。 4. **大数据预处理**和**集成**:这部分...
1. 数据收集:首先,需要从网络游戏环境中收集大量数据,这可能包括玩家的行为数据(如游戏时间、操作记录)、社交网络交流内容、论坛讨论、用户评分等。这些数据通常是非结构化的,需要通过日志系统和API接口进行...
- **促进跨部门协同工作**:打破信息孤岛现象,使得不同部门之间可以更加顺畅地共享资源和交流信息。 - **支持灵活扩展**:设计之初即考虑到未来可能面临的业务增长和技术变革需求,确保整体架构具有良好的可扩展性...