hadoop之存储篇

目录:

  • 集群规划
  • HDFS HA
  • 冒烟测试
  • 功能特性

集群规划:

  • 负载类型
  • 容量规划
  • 可扩展性
  • 角色分离
  • 管理节点
    • Master节点
    • Worker节点
    • 边缘节点

HDFS HA(高可用)

架构原理见下图:

冒烟测试:

详细说明参见之前的博客:https://www.cnblogs.com/huxinga/p/9627084.html

功能特性:

  1. HDFS Balancer
  2. 快照 Snapshots
  3. 配额 Quota
  4. 权限 ACLs
  5. 存储策略
  6. 集中缓存管理
  7. 机架感知
  8. Erasure Coding
  9. Memory as Storage
  10. Short-Circuit Local Reads

1,HDFS Balancer

balancer是当hdfs集群中一些datanodes的存储要写满了或者有空白的新节点加入集群时,用于均衡hdfs集群磁盘使用量的一个工具。

 Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点。当HDFS出现不平衡状况的时候,将引发很多问题,比如MR程序无法很好地利用本地计算的优势,机器之间无法达到更好的网络带宽使用率,机器磁盘无法利用等等。可见,保证HDFS中的数据平衡是非常重要的。在Hadoop中,包含一个Balancer程序,通过运行这个程序,可以使得HDFS集群达到一个平衡的状态

参考命令:

hdfs balancer
hdfs dfsadmin [-setBalancerBandwidth <bandwidth in bytes per second>]
 <property>
    <name>dfs.datanode.balance.bandwidthPerSec</name>
    <value>6250000</value>
 </property>

2,快照 snapshots

HDFS快照是文件系统的只读时间点的副本。可以在文件系统的子树或整个文件系统上拍摄快照。快照的一些常见?例是数据备份,防?用户错误和灾难恢复。

HDFS中可以对目录创建Snapshot,创建之后不管后续目录发生什么变化,都可以通过snapshot找回原来的文件和目录结构。

实现原理:

实现上是通过在每个目标节点下面创建snapshot节点,后续任何子节点的变化都会同步记录到snapshot上。例如删除子节点下面的文件,并不是直接文件元信息以及数据删除,而是将他们移动到snapshot下面。这样后续还能够恢复回来。另外snapshot保存是一个完全的现场,不仅是删除的文件还能找到,新创建的文件也无法看到。后一种效果的实现是通过在snapshot中记录哪些文件是新创建的,查看列表的时候将这些文件排除在外。
参考命令

# 为指定目录开启快照功能
hdfs dfsadmin -allowSnapshot <path>
# 列出开启了快照功能的目录
hdfs lsSnapshottableDir
# 创建快照
hdfs dfs -createSnapshot <path> [<snapshotName>]
# ?较两个快照之间的区别
hdfs snapshotDiff <path> <fromSnapshot> <toSnapshot>
# 列出快照内的?文件
hdfs dfs -ls /foo/.snapshot
# 从快照中恢复数据。
此处使用了了preserve选项来保留时间戳、所有权、权限、ACL 和 XAttrs扩展属性
hdfs dfs -cp -ptopax /foo/.snapshot/s0/bar /tmp

例子分析:

我们通过一个例子来分析整个snapshot的实现细节:1. 文件目录树如下图所示,并且我们已经通过命令启动了a的snapshot功能,结构如下图所示:

图中.snapshot是虚拟节点,保存了所有的snapshot列表,其中diff中还保存当前节点下面的变化,一个snapshot对应于一个diff.要注意的是snapshot中可以被多个目录的diff引用,后续会进行说明。
2. 当我们执行createSnapshot命令时,结果如下:

3. 当删除文件e的时候

不论是删除一个文件还是一个目录,只要是直接子节点,都会将节点转换为快照版本.例如e会变成INodeFileWithSnapshot,在a的DirectoryDiff中ChildDiff中deleted列表中将会包含e,而在a的正常节点下会被删除。目录节点的处理同样。

4. 删除孙子节点是的情况

处理这种节点的原则是:先将孙子节点转变为Snapshot版本,然后将父节点变为snapshot版本,同时将孙子节点版本加入到直接父节点的diff列表中。为了能够通过同一个snapshot找到当时的文件,需要将新的diff指向到老的snapshot版本上。图中d节点是INodeDirectoryWithSnapshot(不是INodeDiretorySnapshottable, 本身不允许在d上创建snapshot)

3,配额 Quata

Name Quotas :
Name Quota 是该目录下所有文件和目录总的数量的硬限制。如果超出配额,文件和目录创建将失败。配额为1会强制目录保持为空。 重命名后依然有效
Space Quotas :
Space Quota 是该目录下所有文件使用的字节数的硬限制。如果配额不允许写入完整块,则块分配将失败。块的每个副本都会计入配额。 最好设置空间大小为快的整数倍。空间配额为0时可以创建文件,但不能向文件中写入内容,单位为BYTE。
存储类型配额 :
存储类型配额是该目录中文件使用特定存储类型(SSD,DISK,ARCHIVE)的硬限制

参考命令:

hdfs dfsadmin -setQuota <N> <directory>...<directory>
hdfs dfsadmin -clrQuota <directory>...<directory>
hdfs dfsadmin -setSpaceQuota <N> <directory>...<directory>
hdfs dfsadmin -clrSpaceQuota <directory>...<directory>
hdfs dfsadmin -setSpaceQuota <N> -storageType <storagetype> <directory>...<directory> hdfs dfsadmin -clrSpaceQuota -storageType <storagetype> <directory>...<directory>
hadoop fs -count -q [-h] [-v] [-t [comma-separated list of storagetypes]] <directory>...<directory

4,HDFS ACLs

 

原文地址:https://www.cnblogs.com/huxinga/p/9933952.html

时间: 2024-10-06 20:03:36

hadoop之存储篇的相关文章

Hadoop文件存储的葵花宝典

文件存储分行存储和列存储,每个存储格式里面又分不同的类型,在实际的应用中如何去使用?怎样去使用?快来围观吧! 文件存储格式,我们在什么时候去指定呢?比如在Hve和Ipala中去创建表的时候,我们除了指定列和分隔符,在它的命令行结尾有STORED AS参数,这个参数默认是文本格式,但是文本不适合所有的场景,那么在这里我们就可以改变文本的信息. 那么到底我们应该选择哪些格式呢?每种格式都有什么样的特点呢?我们为什么要去选择这种格式呢? 一.文本文件: 文本文件是Hadoop里面最基本的文件类型,可以

android之存储篇——SQLite数据库

转载:android之存储篇_SQLite数据库_让你彻底学会SQLite的使用 SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么. 例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值. 但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段保存除整数以外的数据时,将会产生错误. 另外, SQLite 在解析CREATE TABLE 语句时

Spring Boot 揭秘与实战(二) 数据存储篇 - MongoDB

文章目录 1. 环境依赖 2. 数据源 2.1. 方案一 使用 Spring Boot 默认配置 2.2. 方案二 手动创建 3. 使用mongoTemplate操作4. 总结 3.1. 实体对象 3.2. DAO相关 3.3. Service相关 3.4. Controller相关 5. 源代码 本文讲解Spring Boot基础下,如何使用MongoDB,编写数据访问. 环境依赖 修改 POM 文件,添加spring-boot-starter-data-mongodb依赖. <depende

Spring Boot 揭秘与实战(二) 数据存储篇 - Redis

文章目录 1. 环境依赖 2. 数据源 2.1. 方案一 使用 Spring Boot 默认配置 2.2. 方案二 手动创建 3. 使用 redisTemplate 操作4. 总结 3.1. 工具类 3.2. 测试类 3.3. 单元测试用例 5. 源代码 本文讲解Spring Boot基础下,如何整合Redis,编写数据访问. 环境依赖 修改 POM 文件,添加 spring-boot-starter-redis 依赖. <dependency> <groupId>org.spri

IOS开发数据存储篇—IOS中的几种数据存储方式

IOS开发数据存储篇—IOS中的几种数据存储方式 发表于2016/4/5 21:02:09  421人阅读 分类: 数据存储 在项目开发当中,我们经常会对一些数据进行本地缓存处理.离线缓存的数据一般都保存在APP所在的沙盒之中.一般有以下几种: 1.PList(XML属性列表) 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦 //写入文件 NSString *doc = [NSSearchPathForDirectoriesInDomains(

Spring Boot 揭秘与实战(二) 数据存储篇 - 声明式事务管理

文章目录 1. 声明式事务 2. Spring Boot默认集成事务 3. 实战演练4. 源代码 3.1. 实体对象 3.2. DAO 相关 3.3. Service 相关 3.4. 测试,测试 本文讲解 Spring Boot 如何使用声明式事务管理. 声明式事务 Spring 支持声明式事务,使用 @Transactional 注解在方法上表明这个方法需要事务支持.此时,Spring 拦截器会在这个方法调用时,开启一个新的事务,当方法运行结束且无异常的情况下,提交这个事务. Spring 提

Spring Boot 揭秘与实战(二) 数据存储篇 - ElasticSearch

文章目录 1. 版本须知 2. 环境依赖 3. 数据源 3.1. 方案一 使用 Spring Boot 默认配置 3.2. 方案二 手动创建 4. 业务操作5. 总结 4.1. 实体对象 4.2. DAO相关 4.3. Service相关 4.4. Controller相关 6. 源代码 本文讲解Spring Boot基础下,如何使用 ElasticSearch,实现全文搜索. 版本须知 spring data elasticSearch 的版本与Spring boot.Elasticsearc

Redis系列-存储篇sorted set主要操作命令

Redis系列-存储篇sorted set主要操作函数小结 redis支持有序集合,即sorted set.sorted set在set的基础上,增加了排序属性,是set的升级版.这里简要谈谈sorted set的常用函数: 1)insert a)zadd 语法:zadd?key score member?[[score member] [score member] ...] 解释:增加一个或多个member[根据score排序]到有序集key中,如果member已经存在,只更新score.返回

Redis系列-存储篇string主要操作命令

Redis系列-存储篇string主要操作命令 通过上两篇的介绍,我们的redis服务器基本跑起来.db都具有最基本的CRUD功能,我们沿着这个脉络,开始学习redis丰富的数据结构之旅,当然先从最简单且常用的string开始. 1.新增 a)set 语法:set key value 解释:把值value赋给key,如果key不存在,新增:否则,更新 [[email protected] ~]# redis-cli redis 127.0.0.1:6379> set user.1.name zh