HDFS&Hive介绍
HDFS
HDFS:Hadoop分布式文件存储系统
HDFS架构包含Client、NameNode和DataNode。可以简单的认为有一个NameNode和多个DataNode。(NameNode不一定只有一个)
Client
用户需要通过HDFS Client向HDFS提交命令,Client负责与NameNode和DataNode建立连接以及传输数据。
NameNode
NameNode负责管理整个文件系统信息。
- 记录数据存储位置:HDFS可以存储很大的文件,每个文件都被分割成多个data block,存放在不同的DataNode上,而NameNode就负责记录一个文件有哪些data block,这些data block分别存放在哪些DataNode上。
- 执行文件系统常用操作:创建、重命名一个文件/文件夹之类的常用操作,都由NameNode负责。
DataNode
DataNode是实际存放data block的节点。
读写过程
每次访问读写HDFS,Client需要先联系NameNode,得知目标文件由哪些data block组成,以及这些data block的存储在哪些DataNode中。然后Client再联系这些DataNode进行数据读写。
读过程
一般HDFS默认为每个data block设置3个备份,存放在不同的DataNode上,读取文件的时候,选择网络延迟最小的DataNode访问即可。
写过程
由于一个data block有3个备份,因此写文件时需要写三个DataNode。具体是Client传输数据给第一个DataNode,然后这个DataNode传递数据给第二个DataNode,第二个DataNode再传给第三个DataNode,每个DataNode写入数据,即完成整个写过程。
数据备份
HDFS存储文件是以block为单位的,因此数据备份也是以block为单位的。HDFS可以设置每个data block存多少份,默认存储3份。
Rack
每个DataNode是一部服务器,这些服务器放在一个机架里,构成一个Rack。一个Rack里的所有DataNode共享电源、网线和交换机,因此每次出故障时容易导致一整个Rack的DataNode都丢失数据,因此不能把一个block的所有备份都放在同一个Rack中,需要分散到不同的Rack上存储。
Hive
Hadoop使用hdfs存储数据,Hive则是把hdfs数据文件映射成数据表,通过Hive SQL操作HDFS中的数据,其中Hive将SQL语句转换成MapReduce任务进行,因此Hive实质就是一个基于 HDFS 的 MapReduce 计算框架,对存储在 HDFS 中的数据进行分析和管理。
Hive | 关系型数据库 | |
---|---|---|
存储系统 | hadoop的hdfs(分布式文件系统) | 服务器本地文件系统 |
计算模型 | MapReduce | |
使用场景 | 对海量数据做数据挖掘(实时性差) | 实时性查询 |