HDFS
1、HDFS概述
1.1 简介
HDFS(Hadoop Distributed File System) ,Hadoop分布式文件系统,用来解决海量数据的存储问题。
核心组件:
HDFS(分布式文件系统)
YARN(运算资源调度系统)
MAPREDUCE(分布式运算编程框架)
1.2 特点
1)优势
- 高容错性:HDFS多副本分布式存储,当一个副本丢失了,能够自动恢复,所以HDFS具有高容错性,默认是3副本。
- 大数据处理:HDFS处理数据的规模甚至可以达到PB级别,文件数量甚至百万之上。
- HDFS是设计成适应一次写入,多次读出的场景,且不支持文件的修改。
2)劣势
- HDFS不擅长大量小文件的存储,因为NameNode的内存是有限的,但大量小文件存储,会耗用大量NameNode的内存,来存储文件的目录、块信息等。
- HDFS高延时,不适合低延时的访问。
- HDFS不支持并发写和文件的修改
1.3 HDFS架构图解
1)NameNode(nn)
它是一个主管、管理者,Master节点,负责维护整个hdfs文件系统的目录树,以及每一个路径(文件)所对应的block块信息。
(1)管理HDFS的名称空间;
(2)配置副本策略;
(3)管理数据块(Block)映射信息;
(4)处理客户端读写请求。
2)DataNode
就是Slave。NameNode下达命令,DataNode执行实际的操作,负责存储client发来的数据块block;执行数据块的读写操作。Datanode是HDFS集群从节点,每一个block都可以在多个datanode上存储多个副本,副本数量也可以通过参数dfs.replication设置。
HDFS存储文件是分块存储(block),默认大小在hadoop2.x版本中是128M,老版本中是64M。这个可以通过配置参数dfs.blocksize来进行调整。HDFS块的大小设置主要取决于磁盘传输速率
3)Secondary NameNode
充当小弟的角色。
(1)辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode ;
(2)在NameNode挂掉时,可辅助恢复NameNode,不过现在有HA,所以很少使用Secondary NameNode。
4)Client
顾名思义,就是客户端。
(1)文件切分。Client将文件切分成一个一个的Block,然后进行上传到HDFS上。
(2)与NameNode交互,获得读取或写入文件的位置信息;
(3)与DataNode交互,读写数据;
(4)Client提供一些命令管理HDFS,比如NameNode格式化操作;
(5)Client提供一些命令访问HDFS,比如对HDFS增删查改操作;
5)Rack
每个DataNode是一部服务器,这些服务器放在一个机架里,构成一个Rack。一个Rack里的所有DataNode共享电源、网线和交换机,因此每次出故障时容易导致一整个Rack的DataNode都丢失数据,因此不能把一个block的所有备份都放在同一个Rack中,需要分散到不同的Rack上存储。
原文链接:https://blog.csdn.net/weixin_...
1.4读、写过程
1)读过程
一般HDFS默认为每个data block设置3个备份,存放在不同的DataNode上,读取文件的时候,选择网络延迟最小的DataNode访问即可。
2)写过程
由于一个data block有3个备份,因此写文件时需要写三个DataNode。具体是Client传输数据给第一个DataNode,然后这个DataNode传递数据给第二个DataNode,第二个DataNode再传给第三个DataNode,每个DataNode写入数据,即完成整个写过程。
2、Hdfs Shell命令
2.1 语法操作
1)hadoop fs 命令
2)hdfs dfs 命令
2.2 常用命令
hadoop的shell命令使用起来非常简单,和linux Shell命令十分相似。
1.启动集群
sbin/start-dfs.sh
sbin/start-yarn.sh
2.查看命令帮助
hadoop fs -help ls
3.查看系统系统目录
[v2admin@hadoop10 sbin]$ hadoop fs -ls /
2020-12-29 10:20:58,645 INFO [main] Configuration.deprecation (Configuration.java:logDeprecation(1395)) - No unit for dfs.client.datanode-restart.timeout(30) assuming SECONDS
Found 7 items
drwxr-xr-x - v2admin supergroup 0 2020-12-23 20:37 /flume
drwxr-xr-x - v2admin supergroup 0 2020-12-28 17:23 /hbase
drwxr-xr-x - v2admin supergroup 0 2020-12-23 14:43 /home
4.创建文件夹
[v2admin@hadoop10 sbin]$ hadoop fs -mkdir /student
5.多级文件夹创建
[v2admin@hadoop10 sbin]$ hadoop fs -mkdir /student/zhangsan/course_count
6.上传和下载文件从本地拷贝文件至hdfs
[v2admin@hadoop10 sbin]$ cd /home/v2admin/demo
[v2admin@hadoop10 demo]$touch words.txt
[v2admin@hadoop10 demo]$echo aaa > words.txt
[v2admin@hadoop10 demo]$ hadoop fs -put words.txt /student
// words 是我本地的文件 后面跟上传hdfs的目录
[// hadoop fs -copyFromLocal words.txt /student
// 等同于put
[v2admin@hadoop10 demo]$ hadoop fs -ls /student
2020-12-29 10:32:34,660 INFO [main] Configuration.deprecation (Configuration.java:logDeprecation(1395)) - No unit for dfs.client.datanode-restart.timeout(30) assuming SECONDS
Found 2 items
-rw-r--r-- 3 v2admin supergroup 4 2020-12-29 10:31 /student/words.txt
从本地剪贴到HDFS
[v2admin@hadoop10 demo]$ touch bbb.txt[v2admin@hadoop10 demo]$ ls
bbb.txt f pos.log words.txt[v2admin@hadoop10 demo]$ hadoop fs -moveFromLocal bbb.txt /student
2020-12-29 10:40:20,634 INFO [main] Configuration.deprecation (Configuration.java:logDeprecation(1395)) - No unit for dfs.client.datanode-restart.timeout(30) assuming SECONDS
[v2admin@hadoop10 demo]$ ls
f pos.log words.txt[v2admin@hadoop10 demo]$ hadoop fs -ls /student
2020-12-29 10:40:40,097 INFO [main] Configuration.deprecation (Configuration.java:logDeprecation(1395)) - No unit for dfs.client.datanode-restart.timeout(30) assuming SECONDS
Found 3 items
-rw-r--r-- 3 v2admin supergroup 0 2020-12-29 10:40 /student/bbb.txt
-rw-r--r-- 3 v2admin supergroup 151 2020-12-21 14:45 /student/stu.txt
-rw-r--r-- 3 v2admin supergroup 4 2020-12-29 10:31 /student/words.txt
追加文件到已经存在的文件末尾
[v2admin@hadoop10 demo]$ echo bbb > bbb.txt
[v2admin@hadoop10 demo]$ hadoop fs -appendToFile bbb.txt /student/words.txt
那么下载words.txt文件,看看文件发生什么变化吧
[v2admin@hadoop10 demo]$ mkdir download
[v2admin@hadoop10 demo]$ hadoop fs -get /student/words.txt ./download/
[v2admin@hadoop10 demo]$ cat download/words.txt
aaa
bbb
下载文件除了get还有其他两个
[v2admin@hadoop10 demo]$ hadoop fs -copyToLocal /student/words.txt ./download/// 等同于get
[v2admin@hadoop10 demo]$ hadoop fs -getmerge /student/* ./download/// 合并下载多个文件
7.从HDFS一个路径拷贝到HDFS另一个路径
[v2admin@hadoop10 demo]$hadoop fs -mkidr /newStu
[v2admin@hadoop10 demo]$hadoop fs -cp /student/bbb.txt /newStu8.在HDFS上移动文件[v2admin@hadoop10 demo]$hadoop fs -mv /student/words.txt /newStu
9.在HDFS上删除文件
// 常规删除
[v2admin@hadoop10 demo]$hadoop fs -rm /newStu/bbb.txt
// 强制删除
[v2admin@hadoop10 demo]$hadoop fs -rm -r /newStu
10 查看文件内容
[v2admin@hadoop10 demo]$hadoop fs -cat /student/bbb.txt
更多命令参考http://hadoop.apache.org/docs...
3、MapReduce
3.1 概念
分布式运算程序的编程框架。
MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。MapReduce的作用就是大数据处理。
MapReduce设计思想的核心就是"分而治之",它将复杂的、运行在大规模集群上的并行计算过程高度抽象成两个Map和Reduce两个函数。
4、 hive
1)概念
Hive 是建立在 Hadoop 上的数据仓库基础构架。
Hive依赖于Hadoop,实际存储是依赖于Hadoop的HDFS模块,计算依赖于Hadoop的Mapreduce模块。
Hadoop使用hdfs存储数据,Hive则是把hdfs数据文件映射成数据表,通过Hive SQL操作HDFS中的数据,其中Hive将SQL语句转换成MapReduce任务进行,因此Hive实质就是一个基于 HDFS 的 MapReduce 计算框架,对存储在 HDFS 中的数据进行分析和管理。
2)hive与关系数据库的区别
(1)Hive 和关系数据库存储文件的系统不同,Hive 使用的是 hadoop 的 HDFS(hadoop 的分布式文件系统),关系数据库则是服务器本地的文件系统;
(2)hive 使用的计算模型是 mapreduce,而关系数据库则是自己设计的计算模型;
(3)关系数据库都是为实时查询的业务进行设计的,而 Hive 则是为海量数据做数据挖掘设计的,实时性很差;实时性的区别导致 Hive 的应用场景和关系数据库有很大的不同;
(4)Hive 很容易扩展自己的存储能力和计算能力,这个是继承 hadoop 的,而关系数据库在这个方面要比数据库差很多。
5、HBase
Hbase就是Hadoop database,可以提供数据的实时随机读写。Hbase与Mysql、Oralce、db2、SQLserver等关系型数据库不同,它是一个NoSQL数据库(非关系型数据库) 。
RowKey:是Byte array,是表中每条记录的“主键”,方便快速查找,Rowkey的设计非常重要。
Column Family:列族,拥有一个名称(string),包含一个或者多个相关列
Column:属于某一个columnfamily,familyName:columnName,每条记录可动态添加
Version Number:类型为Long,默认值是系统时间戳,可由用户自定义
Value(Cell):Byte array
Hbase的表模型与关系型数据库的表模型不同:
Hbase的表没有固定的字段定义
Hbase的表中每行存储的都是一些key-value对
Hbase的表中有列族的划分,用户可以指定将哪些kv插入哪个列族
Hbase的表在物理存储上,是按照列族来分割的,不同列族的数据一定存储在不同的文件中
Hbase的表中的每一行都固定有一个行键,而且每一行的行键在表中不能重复
Hbase中的数据,包含行键,包含key,包含value,都是byte[ ]类型,hbase不负责为用户维护数据类型
HBASE对事务的支持很差
Hbase使用场景
大数据量存储,大数据量高并发操作
需要对数据随机读写操作
读写访问均是非常简单的操作
6、Yarn
6.1 概念
Yarn是一个分布式程序的运行调度平台,是hadoop2.X版本后新加入的模块。
yarn中有两大核心角色:
(1)Resource Manager
接受用户提交的分布式计算程序,并为其划分资源。
管理、监控各个Node Manager上的资源情况,以便于均衡负载。
(2)Node Manager
管理它所在机器的运算资源(cpu + 内存)。
负责接受Resource Manager分配的任务,创建容器、回收资源
6.2 工作机制
(1)用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
(2)ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster。
(3)ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。
(4)ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。
(5)一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。
(6)NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
(7)各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。
在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。
(8)应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。
7、hdfs、hive、hbase关系
7.1区别
Hbase和Hive在大数据架构中处在不同位置,Hbase主要解决实时数据查询问题,Hive主要解决数据处理和计算问题,一般是配合使用。
一、区别:
Hbase: Hadoop database 的简称,也就是基于Hadoop数据库,是一种NoSQL数据库,主要适用于海量明细数据(十亿、百亿)的随机实时查询,如日志明细、交易清单、轨迹行为等。
Hive:Hive是Hadoop数据仓库,严格来说,不是数据库,主要是让开发人员能够通过SQL来计算和处理HDFS上的结构化数据,适用于离线的批量数据计算。
- 通过元数据来描述Hdfs上的结构化文本数据,通俗点来说,就是定义一张表来描述HDFS上的结构化文本,包括各列数据名称,数据类型是什么等,方便我们处理数据,当前很多SQL ON Hadoop的计算引擎均用的是hive的元数据,如Spark SQL、Impala等;
基于第一点,通过SQL来处理和计算HDFS的数据,Hive会将SQL翻译为Mapreduce来处理数据;
7.2关系
在大数据架构中,Hive和HBase是协作关系,数据流一般如下图:
- 通过ETL工具将数据源抽取到HDFS存储;
- 通过Hive清洗、处理和计算原始数据;
- HIve清洗处理后的结果,如果是面向海量数据随机查询场景的可存入Hbase;
- 数据应用从HBase查询数据
8、架构图
文章参考:
1)https://segmentfault.com/a/11...
2)https://blog.csdn.net/weixin_...
3)https://blog.csdn.net/qq_3860...
4)https://blog.csdn.net/qq_2080...
5)https://www.zhihu.com/questio...