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 的内存,来存储文件的目录、块信息等。
- HDF S 高延时,不适宜低延时的拜访。
- 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…