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.shsbin/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 SECONDSFound 7 itemsdrwxr-xr-x   - v2admin supergroup          0 2020-12-23 20:37 /flumedrwxr-xr-x   - v2admin supergroup          0 2020-12-28 17:23 /hbasedrwxr-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 /student2020-12-29 10:32:34,660 INFO  [main] Configuration.deprecation (Configuration.java:logDeprecation(1395)) - No unit for dfs.client.datanode-restart.timeout(30) assuming SECONDSFound 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]$ lsbbb.txt  f  pos.log  words.txt[v2admin@hadoop10 demo]$ hadoop fs -moveFromLocal bbb.txt /student2020-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]$ lsf  pos.log  words.txt[v2admin@hadoop10 demo]$ hadoop fs -ls /student2020-12-29 10:40:40,097 INFO  [main] Configuration.deprecation (Configuration.java:logDeprecation(1395)) - No unit for dfs.client.datanode-restart.timeout(30) assuming SECONDSFound 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 aaabbb

下载文件除了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是协作关系,数据流个别如下图:

  1. 通过ETL工具将数据源抽取到HDFS存储;
  2. 通过Hive荡涤、解决和计算原始数据;
  3. HIve荡涤解决后的后果,如果是面向海量数据随机查问场景的可存入Hbase;
  4. 数据利用从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...