hdfs一开始设计的时候,文件是只能写入一次,然后就只读的.一开始工作的相安无事,但是有一天,hbase跑到了hdfs上,hbase作为数据库,总要保持一定的持久性,所以它弄了个log,叫做wal,记录每一次操作,这样就算region server系统崩溃,Memstore的东西毁于一旦,还是可以靠wal来恢复.问题在于wal是存储在hdfs上的,hdfs上的文件只有被正确close以后,才是合法的hdfs文件.因此我认为wal有以下几种方案
1 每次操作产生的wal都成为单独的hdfs文件.这个方案产生的hdfs文件太多,不现实
2 只保持一个wal文件在hdfs上处于open,每次操作产生的wal都write到这个wal上,用类似fsync的功能把wal持久化到hdfs,定期close这个wal文件切换到下一个.这个方案问题在于hdfs当时没有fsync这样的功能,只有把这个wal close以后,这个wal才是合法的.假设系统一小时使用一个wal,在59分钟的时候系统崩溃,这个wal的前59分钟数据就等于丢失了.
3 hdfs增加append操作,每次hbase产生wal,都append到原来的wal文件上
2和3的区别是2是长时间保持一个文件打开,每次把wal写入,到一定时候再close这个文件.3则是需要每次append wal到一个已经close的文件上.
后来hdfs选择了方案3,增加了append操作.不幸的是,hdfs增加的append操作bug挺多,他们最终又打算把这个append去掉.但是有一些开发者在这期间搞出来了sync(我感觉是这期间搞出来的,但是很怀疑为什么把sync放到append的branch里,不明白sync为什么依赖append),sync可以保证hbase的持久性(我感觉是使方案2成为了可能),但是要想使用sync需要首先设置dfs.support.append.也就是说想要sync就不得不启用有缺陷的append.
而且当时append和sync这两个重要功能是在hadoop的branch "0.20.append",这个branch基于branch "0.20.2",而基于"0.20.2"这个branch的还有一个"0.20.security"的branch,包含了security的功能.所以导致一个开发者说,"there has been an 18 month period where there has been no one Apache release that had all the committed features of Apache Hadoop"(无力吐槽了,按理说branch应该merge回trunk的).下面的图表显示了当时的状态.
难怪另一个开发者说"HDFS sync has a colorful history"
后面的故事总算回归正轨(其实是中间过程我懒得看了):
https://issues.apache.org/jira/browse/HDFS-3120
hadoop 1.x: sync始终启用,"dfs.support.appends"配置项去掉,隐藏了append功能
hadoop 2.x: hsync/hflush始终启用,"dfs.support.appends"配置项可以用来开启append功能,该配置项默认启用.
引用
The work on branch-20-append was to support sync, for durable HBase WALs, not append. The branch-20-append implementation is known to be buggy. There's been confusion about this, we often answer queries on the list like this. Unfortunately, the way to enable correct sync on branch-1 for HBase is to set dfs.support.append to true in your config, which has the side effect of enabling append (which we don't want to do).
For v1.x let's:
Always enable the sync path (currently only enabled if dfs.support.append is set)
Remove the dfs.support.append configuration option. Let's keep the code paths though in case we ever fix append on branch-1, in which case we can add the config option back
For 2.x let's
Always enable the hsync/hflush path
The dfs.support.appends only enables the append specific paths (since the hsync/hflush paths are now always on). Append will still default to being enabled so there is no net effect by default.
其实hdfs的hsync/hflush也有一番曲折(HDFS sync has a colorful history),但那是另一个故事了.
所以我们这些上来就用hadoop 2.x的人,是多么幸运啊
参考资料如下
http://blog.cloudera.com/blog/2012/01/an-update-on-apache-hadoop-1-0/
http://blog.cloudera.com/blog/2009/07/file-appends-in-hdfs/
http://hadoop-hbase.blogspot.com/2012/05/hbase-hdfs-and-durable-sync.html
- 大小: 125.8 KB
- 大小: 527.2 KB
分享到:
相关推荐
Storm集成HBase和HDFS
mapreduce方式入库hbase hive hdfs,速度很快,里面详细讲述了代码的编写过程,值得下载
标题中的“hadoop的mapreduce把oracle/mysq导入到hbase和hdfs中的程序”指的是一项数据处理任务,利用Hadoop的MapReduce框架,将关系型数据库(如Oracle和MySQL)中的数据高效地迁移至分布式存储系统HDFS(Hadoop ...
在Java编程环境中,操作HBase并将其数据写入HDFS(Hadoop Distributed File System)是一项常见的任务,特别是在大数据处理和分析的场景下。本篇将详细介绍如何使用Java API实现这一功能,以及涉及到的关键技术和...
从HDFS中读文件,用groupby进行sort,然后写入Hbase中
- **集成优势**:HBase 和 HDFS 紧密集成,使得 HBase 能够利用 HDFS 的高可用性和容错特性。 - **性能优化**:由于 HBase 和 HDFS 的紧密集成,HBase 可以充分利用 HDFS 的特性,如数据局部性,从而提高数据访问...
在大数据处理领域,Hadoop生态系统中的HDFS(Hadoop Distributed File System)、MapReduce、Hive和HBase是四个至关重要的组件。本资料“HDFS+MapReduce+Hive+HBase十分钟快速入门”旨在帮助初学者迅速理解这些技术...
首先,理解HDFS和HBase的基本原理至关重要。HDFS是Hadoop的核心组件之一,它提供高容错性和高吞吐量的数据存储服务。HBase则是基于HDFS的NoSQL数据库,它以行和列的形式存储数据,且支持快速随机读取,这使得它成为...
这份压缩包文件包含了一系列关于大数据技术的PPT和PDF文档,主要聚焦于Spark、HBase、HDFS的二次开发以及相关的技术,如Hive、Kafka、Solr和MapReduce等。以下是这些资源中涉及的主要知识点: 1. **Spark二次开发**...
具体到从Hadoop向HBase的数据迁移中,Map任务会读取HDFS中的文件,使用自定义的Mapper类对每一行数据进行解析,提取出关键信息,如行键(row key)、列族(column family)、列限定符(column qualifier)和值...
不同版本的Hadoop可能会对HDFS的API或MapReduce的执行模型进行优化,因此,HBase和Hive需要与相应的Hadoop版本保持兼容。例如,Hadoop 2.x引入了YARN资源管理系统,这可能需要HBase和Hive的更新版本来适应。 对于...
标题 "HDFS 通过 mapreduce 进行 HBase 导入导出" 涉及的是大数据处理领域中的两个重要组件——Hadoop Distributed File System (HDFS) 和 HBase,以及它们之间的数据交互。HDFS 是 Hadoop 的分布式文件系统,而 ...
Hadoop,HBase,Hive,HDFS视频,共44集(完整全套)!!
在IT行业中,大数据处理是当前的关键技术之一,而Hadoop、HDFS和HBase则是其中的核心组件。Hadoop是一个开源框架,主要用于存储和处理大规模数据,而HDFS(Hadoop Distributed File System)是Hadoop的核心部分,是...
HBase 是一个基于HDFS的NoSQL数据库,用于存储和管理大规模结构化和半结构化数据。HBase Shell是HBase的命令行接口,提供了对HBase数据库的访问和管理功能。Pig Latin是Hadoop生态系统中的一个数据处理语言,提供了...
Export 和 Import 是 HBase 的内置功能,可以将 HBase 表内容输出成 HDFS 的 SequenceFiles 文件,然后将文件插入到 HBase 表中。 Snapshot 是 HBase 的快照功能,可以快速创建快照,然后将快照恢复到 HBase 表中。...
同时,HBase与其他大数据组件如Hive和HDFS的交互也是日常操作中的常见需求。 一、HBase备份和数据恢复 1. HBase的数据模型:HBase是基于列族的NoSQL数据库,数据以行键、列族、列限定符和时间戳的形式存储。理解这...
### Facebook开发HDFS和HBase的新进展:深度解析与创新亮点 #### HDFS与HBase在Facebook的应用背景 Facebook作为全球领先的社交网络平台,每天处理着海量的数据交互,包括用户生成的内容、广告数据、社交图谱等。...
hbase官方推荐稳定版1.4.9 HBase是建立在Hadoop文件系统之上的分布式面向列的...人们可以直接或通过HBase的存储HDFS数据。使用HBase在HDFS读取消费/随机访问数据。 HBase在Hadoop的文件系统之上,并提供了读写访问。