hadoop架构知识 04

1.hadoop的架构模型:

1.x架构模型:

	hdfs:分布式文件存储系统
		namenode:主节点,管理元数据信息,接收客户端的请求
	元数据信息:描述数据的数据	
		datanode:从节点 存储数据
	    mapreduce:分布式的文件计算系统
		JobTracker: 主节点,接收客户端的计算任务请求,分配任务
		taskTracker:从节点,执行jobtracker分配的任务

2.x架构模型:

	hdfs:分布式的文件存储系统
		namenode:管理元数据信息,接收客户端的请求
		datanode:存储数据
		snn:辅助namenode管理元数据信息
	如果namenodeHA 
		journalNode:两个namenode之间同步元数据信息
		zkfc:namenode的守护进程,监看namenode的健康状况
	yarn:资源调度系统
		resourceManager:主节点,主要用于接收客户端的计算任务请求,并且分配资源
		nodemanager:从节点,主要负责执行任务

1.HDFS 介绍

HDFS 是 Hadoop Distribute File System 的简称,意为:Hadoop 分布式文件系统。是 Hadoop 核心组件之一,作为最底层的分布式存储服务而存在。
分布式文件系统解决的问题就是大数据存储。它们是横跨在多台计算机上的存储系统。分布式文件系统在大数据时代有着广泛的应用前景,它们为存储和处理超大规模数据提供所需的扩展能力。
hadoop架构知识 04

2. hdfs的特性

首先,它是一个文件系统,用于存储文件,通过统一的命名空间目录树来定位文件;
其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。

2.1 master/slave 架构

HDFS 采用 master/slave 架构。一般一个 HDFS 集群是有一个 Namenode 和一定数目的Datanode 组成。Namenode 是 HDFS 集群主节点,Datanode 是 HDFS 集群从节点,两种角色各司其职,共同协调完成分布式的文件存储服务。

2.2 分块存储

HDFS 中的文件在物理上是分块存储(block)的,块的大小可以通过配置参数来规定,默认大小在 hadoop2.x 版本中是 128M。
9.4.3、 名字空间(NameSpace)
HDFS 支持传统的层次型文件组织结构。用户或者应用程序可以创建目录,然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建、删除、移动或重命名文件。
Namenode 负责维护文件系统的名字空间,任何对文件系统名字空间或属性的修改都将被Namenode 记录下来。
HDFS 会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。

2.3 Namenode 元数据管理

我们把目录结构及文件分块位置信息叫做元数据。Namenode 负责维护整个hdfs文件系统的目录树结构,以及每一个文件所对应的 block 块信息(block 的id,及所在的datanode 服务器)。

2.4 Datanode 数据存储

文件的各个 block 的具体存储管理由 datanode 节点承担。每一个 block 都可以在多个datanode 上。Datanode 需要定时向 Namenode 汇报自己持有的 block信息。 存储多个副本(副本数量也可以通过参数设置 dfs.replication,默认是 3)。

2.5 副本机制

为了容错,文件的所有 block 都会有副本。每个文件的 block 大小和副本系数都是可配置的。应用程序可以指定某个文件的副本数目。副本系数可以在文件创建的时候指定,也可以在之后改变。

2.6 一次写入,多次读出

HDFS 是设计成适应一次写入,多次读出的场景,且不支持文件的修改。
正因为如此,HDFS 适合用来做大数据分析的底层存储服务,并不适合用来做.网盘等应用,因为,修改不方便,延迟大,网络开销大,成本太高。

3. hdfs的命令行使用

  • ls
    hdfs dfs -ls [-R]

  • lsr
    hdfs dfs -lsr

  • mkdir
    hdfs dfs -mkdir [-p]

  • moveFromLocal
    hdfs dfs -moveFromLocal
    hdfs dfs -moveToLocal [-crc]

  • mv
    hdfs dfs -mv URI [URI …]
    hdfs dfs -mv /user/hadoop/file1 /user/hadoop/file2

  • put
    hdfs dfs -put …
    hdfs dfs -put localfile /user/hadoop/hadoopfile

  • appendToFile
    hdfs dfs -appendToFile …
    追加一个或者多个文件到hdfs指定文件中.也可以从命令行读取输入.
    hdfs dfs -appendToFile localfile /user/hadoop/hadoopfile

  • cat
    Usage: hdfs dfs -cat URI [URI …]
    查看内容.
    Example:
    hdfs dfs -cat hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
    Exit Code:
    Returns 0 on success and -1 on error.

  • cp
    Usage: hdfs dfs -cp [-f] [-p | -p[topax]] URI [URI …]
    复制文件(夹),可以覆盖,可以保留原有权限信息

3. hdfs的高级使用命令

3.1 HDFS文件限额配置

hdfs文件的限额配置允许我们以文件大小或者文件个数来限制我们在某个目录下上传的文件数量或者文件内容总量,以便达到我们类似百度网盘网盘等限制每个用户允许上传的最大的文件的量

  • 数量限额
hdfs dfs -mkdir -p /user/root/lisi     #创建hdfs文件夹
hdfs dfsadmin -setQuota 2 lisi      # 给该文件夹下面设置最多上传两个文件,上传文件,发现只能上传一个文件
hdfs dfsadmin -clrQuota /user/root/lisi    # 清除文件数量限制
  • 空间大小限额
hdfs dfsadmin -setSpaceQuota 4k /user/root/lisi   # 限制空间大小4KB
hdfs dfs -put  /export/softwares/zookeeper-3.4.5-cdh5.14.0.tar.gz /user/root/lisi
上传超过4Kb的文件大小上去提示文件超过限额
hdfs dfsadmin -clrSpaceQuota /user/root/lisi   #清除空间限额
hdfs dfs -put  /export/softwares/zookeeper-3.4.5-cdh5.14.0.tar.gz /user/root/lisi

#重新上传成功hadoop架构知识 04

  • 查看hdfs文件限额数量
hdfs dfs -count -q -h /user/root/lisi

hadoop架构知识 04

3.2 hdfs的安全模式

  • 安全模式是HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接受删除、修改等变更请求。
  • 在NameNode主节点启动时,HDFS首先进入安全模式,DataNode在启动的时候会向namenode汇报可用的block等状态,当整个系统达到安全标准时,HDFS自动离开安全模式。
  • 如果HDFS出于安全模式下,则文件block不能进行任何的副本复制操作,因此达到最小的副本数量要求是基于datanode启动时的状态来判定的,启动时不会再做任何复制(从而达到最小副本数量要求),
  • hdfs集群刚启动的时候,默认30S钟的时间是出于安全期的,只有过了30S之后,集群脱离了安全期,然后才可以对集群进行操作
hdfs  dfsadmin  -safemode

4. mapreduce程序测试

实际生产环境当中,hadoop的环境搭建完成之后,第一件事情就是进行压力测试,测试我们的集群的读取和写入速度,测试我们的网络带宽是否足够等一些基准测试

  • 写入数据20-30M/s
  • 读取数据 50-100M/s

4.1 测试写入速度

向HDFS文件系统中写入数据,10个文件,每个文件10MB,文件存放到/benchmarks/TestDFSIO中

hadoop jar /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.6.0-cdh5.14.0.jar TestDFSIO  -write -nrFiles 10 -fileSize 10MB

完成之后查看写入速度结果

hdfs dfs -text /benchmarks/TestDFSIO/io_write/part-00000

4.2 测试读取速度

测试hdfs的读取文件性能
在HDFS文件系统中读入10个文件,每个文件10M

hadoop jar /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.6.0-cdh5.14.0.jar TestDFSIO -read -nrFiles 10 -fileSize 10MB

查看读取结果

hdfs dfs -text /benchmarks/TestDFSIO/io_read/part-00000

清除测试数据

hadoop jar /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.6.0-cdh5.14.0.jar TestDFSIO -clean