说明
该篇文章用于大数据的初学人群进行交流学习
本章内容主要是对大数据概念,常用技术栈及常用架构Hadoop的介绍。以及hdfs相关的机制的介绍
大数据概述
什么是大数据:从狭义上来讲是处理海量数据的软件技术体系,从广义上来讲是数字化,信息化时代的支撑,以数据为生活赋能
大数据能够解决的问题:海量数据的存储,计算 ,传输问题。
大数据特征: 数据体量大,发展速度快,种类多,准确性未知,价值密度
大数据技术栈
存储:HDFS(Hadoop disturbited file system),Hbase等
计算: Mapreduce Hive Spark Flink等
传输: sqoop flume kafka Pulsar等
Hadoop简介
广义:整个Hadoop的生态圈,包括数据采集,存储,计算,传输,调度等组件
狭义:Hadoop框架本身,包括HDFS、Mapreduce、YARN
Hadoop基于linux的相关配置指令
(1)启动hadoop集群
#切换至linux的hadoop的文件目录下
cd /export/server/hadoop/
#同时启动
start-all.sh
hdfs start-dfs.sh
单独启动
yarn start -yarn.sh
同时关闭关闭
stop-all.sh
这样就算执行成功了
(2)启动历史服务
mapred --daemon start historyserver 启动历史日志
jps 查看正在进行的jar进程
(3)页面访问hadoop
1.访问HDFS 虚拟机地址:9870
如果看到以下页面说明你成功了
2.访问YARN 虚拟机地址:8088
如果看到以下页面说明你成功了
3.访问历史日志 虚拟机地址:19888
如果看到以下页面说明你成功了
Haddop集群案列(相当于各种语言的helloworld)
评估圆周率
第一步:切入Hadoop mapreduce文件下
具体命令为:cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce
第二步:找到example路径:hadoop-mapreduce-examples-3.3.0.jar
第三步:评估圆周率命令为:hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 10 10
如果看到以下页面说明你成功了
HDFS的架构
1.概念
hdfs是一种分布式的文件存储系统
为什么要进行分布式存储?
避免文件太大,单台服务器无法承担,靠多台服务器分区存储。同时可以获得成倍的传输、写入
读取效率。
2.基础架构
HDFS集群有两个重要角色:Namenode Datanode
四个重要组件:HDFS Client、namenode、datanode 和Secondary Namenode
如图所示为hdfs的基础架构图及各个组件的主要功能
3.HDFS 切块
概念:hdfs存取文件时并不是直接存取的,而是将文件切成数个128M的block块
为什么要切块?
因为文件太大会影响传输效率和读取效率
4.NameNode 如何管理BLOCK块
需要了解俩个文件:
edits:用于记录hdfs的每一个操作,以及本次操作所影响的block
fsimage:edits 文件合并的结果
namenode元数据管理维护:每次对hdfs的操作都会记录在edits中,每个edits达到上限以后开启新的edits,多个edits会定期合并成fsimage。
SecondaryNameNode元数据合并:SecondaryNameNode会通过http从NameNode拉取数据(edits和fsimage)然后合并完成后提供给NameNode使用。
注:
对于元数据的合并,是一个定时过程,基于: dfs.namenode.checkpoint.period,默认3600(秒)即1小时 dfs.namenode.checkpoint.txns,默认1000000,即100W次事务)
5.HDFS的面向存储的三大机制
副本机制:为了保证数据安全和效率,block块信息存储多个副本
负载均衡机制:namenode为了保证不同的datanode中block块信息大体一样,分配存储任务的时候会优先保存在余量比较大datanode上
心跳机制:datanode每隔3秒钟向namenode汇报自己的状态信息,如果某个时刻,datanode连续10次不汇报了,namenode会认为datanode有可能宕机了,namenode就会每5分钟(300000毫秒)发送一次确认消息,连续2次没有收到回复,就认定datanode此时一定宕机了
6.HDFS数据的写入
第一步 客户端发送写入请求给namenode
第二步 namenode 接受到请求校验权限,文件,存储路径,无误后通知客户端文件可以写入
第三步 客户端收到确认将文件切成许多个默认大小为128m的block,再把block切成64kb的包
第四步 客户端将处理好的块信息再次返回给namenode,获取能够储存block的datanode列表
第五步 namenode查看位置较近且不忙的datanode,放入列表中返回给客户端
第六步 客户端连接namenode,并发送packet数据包,第一个datanode接受完以后给客户端ack应答,同时datanode开始复制刚才收到的数据包给node2.node2复制给node3(流式传输)
第七步 其他packet重复第五步的步骤
第八步 其他block重复4-7步
第九步 客户端和namenode互相确认文件数据已经保存完成
7.HDFS数据的读取
1.客户端发送读取文件请求给namenode
2.namdnode接收到请求,然后进行一系列校验(路径是否存在,文件是否存在,是否有权限等),如果没有问题,就告知可以读取
3.客户端需要再次和namenode确认当前文件在哪些datanode中存储
4.namenode查看当前距离下载位置较近且不忙的datanode,放入列表中返回给客户端
5.客户端找到最近的datanode开始读取文件对应的block块信息(每次传输是以64kb的packet数据包),放到内存缓冲区中
6.接着读取其他block块信息,循环上述3-5步,直到所有block块读取完毕(根据块编号拼接成完整数据)
7.最后从内存缓冲区把数据通过流写入到目标文件中
8.hdfs的其他机制 (仅做了解)
安全机制
归档机制
垃圾桶机制
9.hdfs元数据管理流程
1.namenode第一次启动的时候先把最新的fsimage文件中内容加载到内存中,同时把edits文件中内容也加载到内存中
2.客户端发起指令(增删改查等操作),namenode接收到客户端指令把每次产生的新的指令操作先放到内存中
3.然后把刚才内存中新的指令操作写入到edits_inprogress文件中
4.edits_inprogress文件中数据到了一定阈值的时候,把文件中历史操作记录写入到序列化的edits备份文件中
5.namenode就在上述2-4步中循环操作...
6.当secondarynamenode检测到自己距离上一次检查点(checkpoint)已经1小时或者事务数达到100w,就触发secondarynamenode询问namenode是否对edits文件和fsimage文件进行合并操作 7.namenode告知可以则进行合并
8.secondarynamenode将namenode上积累的所有edits和一个最新的fsimage下载到本地,并加载到内存进行合并(这个过程称checkpoint)
9.secondarynamenode把刚才合并后的fsimage.checkpoint文件拷贝给namenode
10.namenode把拷贝过来的最新的fsimage.checkpoint文件,重命名为fsimage,覆盖原来的文件
HDFS基于linux的shell命令
hadoop fs - #既可以操作hdfs也可以操作本地文件
hdfs #只能操作hdfs系统
ls 显示文件列表
-mkdir -p创建目录
put 从本地文件系统 上传到目标文件系统
get 将hdfs文件拷贝到本地文件系统
mv 将文件从原路径移动到目标路径
cp 将文件拷贝到目标路径中
cat 查看文件内容
appdendToFile 将本地linux文件追加到Hdfs文件中