大数据特征:
4V特征:
Volume(大数据量)
Velocity(速度快)
Varitey(多样化)
结构化数据、半结构化数据、非结构化数据
Value(价值密度低)
固有特性:
时效性
不可变性
Hadoop发行版本:
社区版:Apache Hadoop
Cloudera发行版:CDH(开源)
Hortonworks发行版:HDP(半开源)
Hadoop的特点
高扩展性,可伸缩
高可靠性:
多副本机制,容错高
低成本
无共享架构
灵活,可存储任意类型数据
开源,社区活跃
Hadoop生态圈
Hadoop核心:
HDFS、MapReduce、YARN、common、core
数据查询分析:
Hive、Pig、Impala、Presto
协调管理:
HCatalog、Zookeeper、Ambari
数据迁移:
Sqoop、Flume
Spark、NoSQL(Hbase)、机器学习、任务调度等
Zookeeper
分布式应用程序协调服务
解决分布式急群众应用系统的一致性问题
提供的功能
配置管理、明明服务、分布式同步、队列管理、集群管理等
特性
全局数据一致
可靠性、顺序性、实时性
数据更新原子性
Zookeeper集群
角色:Leader、Follower、Observer
Hadoop架构
HDFS(Hadoop Distributed File System)
分布式文件系统,解决分布式存储
MapReduce
分布式计算框架
YARN
分布式资源管理系统
在Hadoop 2.x中引入
Common
支持所有其他模块的公共工具程序
HDFS特点
HDFS优点
支持处理超大文件
可运行在廉价机器上
高容错性
流式文件写入
HDFS缺点
不适合低延时数据访问场景
不适合小文件存取场景
不适合并发写入,文件随机修改场景
HDFS CLI(命令行)
基本格式
hdfs dfs -cmd<args>
haddop fs -cmd<args>(已过时)
命令和linux类似
创建存放数据文件的目录:
hdfs dfs -mkdir /hdfs/shell
查看目录
hdfs dfs -ls /hdfs/shell
递归查看目录
hdfs dfs -ls -R /hdfs
上传文件:
hdfs dfs -put /a.txt /hdfs
下载文件到本地:
hdfs dfs -get /hdfs/shell/a.txt
查看文件:
hdfs dfs -test /hdfs/shell/a.txt
hdfs dfs -cat /hdfs/shell/a.txt
统计目录下文件大小
hdfs dfs -du /hdfs/shell/a.txt
hdfs dfs -count /hdfs/shell/a.txt
删除移动数据文件和目录
hdfs dfs -rm /hdfs/shell/a.txt
hdfs dfs -rm -R /hdfs 递归删除目录下所有子目录和文件
HDFS角色
Client:客户端
NameNode (NN):元数据节点
管理文件系统的Namespace/元数据
一个HDFS集群只有一个Active的NN
DataNode (DN):数据节点
数据存储节点,保存和检索Block
一个集群可以有多个数据节点
Secondary NameNode (SNN):从元数据节点
合并NameNode的edit logs到fsimage文件中
辅助NN将内存中元数据信息持久化
HDFS副本机制
Block:数据块
HDFS最基本的存储单元
默认块大小:128M(2.x)
副本机制
作用:避免数据丢失
副本数默认为3
存放机制:
一个在本地机架节点
一个在同一个机架不同节点
一个在不同机架的节点
HDFS高可用(High Availability)
在1.x版本中
存在Namenode单点问题
在2.x版本中
解决:HDFS Federation方式,共享DN资源
Active Namenode
对外提供服务
Standby Namenode
Active故障时可切换为Active
HDFS文件格式
HDFS支持以不同格式存储所有类型的文件
文本、二进制
未压缩、压缩
为了最佳的Map-Reduce处理,文件需可分割
SequenceFile
Avro File
RCFile&ORCFile
Parquet File
HDFS读文件的流程
1、跟namenode通信查询元数据(block所在的datanode节点),找到文件块所在的datanode服务器
2、挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流
3、datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)
4、客户端以packet为单位接收,先在本地缓存,然后写入目标文件,后面的block块就相当于是append到前面的block块最后合成最终需要的文件。
HDFS写文件的流程
1、根namenode通信请求上传文件,namenode检查目标文件是否已存在,父目录是否存在
2、namenode返回是否可以上传
3、client会先对文件进行切分,比如一个blok块128m,文件有300m就会被切分成3个块,一个128M、一个128M、一个44M请求第一个 block该传输到哪些datanode服务器上
4、namenode返回datanode的服务器
5、client请求一台datanode上传数据(本质上是一个RPC调用,建立pipeline),第一个datanode收到请求会继续调用第二个datanode,然后第二个调用第三个datanode,将整个pipeline建立完成,逐级返回客户端
6、client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位(一个packet为64kb),当然在写入的时候datanode会进行数据校验,它并不是通过一个packet进行一次校验而是以chunk为单位进行校验(512byte),第一台datanode收到一个packet就会传给第二台,第二台传给第三台;第一台每传一个packet会放入一个应答队列等待应答
7、当一个block传输完成之后,client再次请求namenode上传第二个block的服务器。