HBase HDFS 的检验

本文详细介绍了HBase 0.94版本中数据读取的具体流程,包括远程读取和本地读取两种方式,并讨论了在不同场景下数据校验的实现机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于0.94版本来说,有几个地方会发生检验

(1)HFile (HRegionServer里面)

(2)FSInputChecker (DFSClient里面)

 

DFSClient :

 

非本地读取,通过DataNode读取,RemoteBlockReader
Disk -> DataNode ->  DFSClient( RemoteBlockReader ) -> HFile (HRegionServer)
Disk -> DataNode ->  DFSClient( RemoteBlockReader ) -> HLog (HRegionServer)

本地读取,BlockReaderLocal  
Disk ->  DFSClient( BlockReaderLocal ) -> HFile (HRegionServer)
Disk ->  DFSClient( BlockReaderLocal ) -> HLog (HRegionServer)

其中: RemoteBlockReader 和  BlockReaderLocal 都继承自FSInputChecker 

HFileSystem:里面有两个FileSystem实例 一个是 fs,一个是 FileSystem noChecksumFs;   // read hfile data from storage
(1) noChecksumFs 用于HFile
(2) fs 可以用于HLog、以及其他文件
目前0.94.1以及之前的版本noChecksumFs 和 fs 使用相同的配置(configuration),只有verifyChecksum不同

support checksums in HBase block cache

 

 

public static final String HBASE_CHECKSUM_VERIFICATION =
       "hbase.regionserver.checksum.verify" ;
默认为true,所以HRegionServer通过DFSClient读取到HFile的数据后会进行检验。

通过DataNode读取(RemoteBlockReader)是否检验由 DistributedFileSystem.verifyChecksum 来决定

本地读取,DFSClient直接读取文件, 是否检验由  public static final String  DFS_CLIENT_READ_SHORTCIRCUIT_SKIP_CHECKSUM_KEY 
     = "dfs.client.read.shortcircuit.skip.checksum" 来决定

如果DFS_CLIENT_READ_SHORTCIRCUIT_KEY = "dfs.client.read.shortcircuit";设置为true,并且DataNode是local的,那么DFSClient会先跟DataNode通信获取block的path,然后自己直接读取block( 本地读取, BlockReaderLocal)。 


Skip checksum is broke; are we double-checksumming by default?


关于本地读的建议:
Read short circuit should always be enabled, unless you’re constantly trashing the cache.
来自committer Jean-Daniel Cryans,
http://files.meetup.com/1350427/hug_ebay_jdcryans.pdf

### Hadoop、NoSQL数据库、HBaseHDFS的错题分析与学习资料 #### 1. Hadoop 错题分析 在 Hadoop 的使用过程中,常见的错误包括配置问题、集群启动失败、MapReduce 作业失败等。以下是一些典型的错误及解决方法: - **NameNode 缺失**:当 `jps` 命令无法显示 NameNode 进程时,可能是由于多次格式化导致元数据损坏[^3]。 - 解决方法:停止所有 Hadoop 进程,删除存储 HDFS 数据块的目录(如 `/hadoop/tmp/`),重新创建该目录,并重新格式化 NameNode。 - **Job Failed 错误**:运行 MapReduce 作业时出现 `java.io.IOException: Job failed!` 错误[^2]。 - 解决方法:检查日志记录配置文件(如 `log4j.properties`)是否隐藏了详细的错误信息。如果问题是内存不足引起的,可以调整 JVM 参数以增加内存分配。 #### 2. NoSQL 数据库错题分析 NoSQL 数据库种类繁多,包括键值存储数据库(如 Redis)、文档型数据库(如 MongoDB)、列存储数据库(如 HBase)、图形数据库(如 Neo4j)等[^3]。以下是 NoSQL 数据库中常见的错误及解决方法: - **键值冲突**:在键值存储数据库中,可能会出现重复键或键值冲突的问题。 - 解决方法:确保键的唯一性,并在写入数据前进行冲突检测。 - **查询性能低下**:对于文档型数据库,复杂的嵌套查询可能导致性能下降。 - 解决方法:优化索引设计,减少嵌套层级,并避免使用过多的子查询。 #### 3. HBase 错题分析 HBase 是一个面向列的分布式数据库,适用于大规模数据存储和随机访问场景。以下是 HBase 中常见的错误及解决方法: - **RegionServer 启动失败**:可能是由于 ZooKeeper 配置错误或磁盘空间不足。 - 解决方法:检查 ZooKeeper 配置文件(如 `hbase-site.xml`),确保其正确无误。同时,清理磁盘空间以释放足够的存储资源。 - **数据一致性问题**:在高并发场景下,可能会出现数据不一致的情况。 - 解决方法:启用 HBase 的事务支持功能,并合理设置读写锁机制。 #### 4. HDFS 错题分析 HDFS 是 Hadoop 的分布式文件系统,具有高容错性和高可用性特点[^1]。以下是 HDFS 中常见的错误及解决方法: - **DataNode 和 NameNode 同时只能工作一个**:可能是由于端口冲突或权限问题。 - 解决方法:检查 `core-site.xml` 和 `hdfs-site.xml` 中的配置是否正确,确保 DataNode 和 NameNode 使用的端口没有冲突,并验证磁盘权限是否正确。 - **UnknownHostException**:主机名解析失败,通常是由于 `/etc/hosts` 文件中缺少正确的主机名映射。 - 解决方法:在 `/etc/hosts` 文件中添加正确的 IP 地址和主机名映射。 #### 学习资料推荐 - **官方文档**:Hadoop、HBaseHDFS 的官方文档是学习这些技术的最佳起点。 - **书籍推荐**: - 《Hadoop权威指南》[^1] - 《HBase权威指南》 - **在线课程**:Coursera 和 edX 提供了许多关于大数据技术和 NoSQL 数据库的高质量课程。 ```python # 示例代码:检查 HDFS 目录权限 import os def check_hdfs_permissions(directory): if os.access(directory, os.W_OK): print(f"Directory {directory} is writable.") else: print(f"Directory {directory} is not writable.") check_hdfs_permissions("/hadoop/hdfs/data") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值