复习回顾
一、Linux操作指令
1、命令提示符
root:用户名
localhost:主机名
$/#:代表当前用户权限,#号表示超级管理员权限,$表示普通用户权限
2.与目录相关
pwd:查看当前目录的具体路径
mkdir:目录创建指令
touch:文件创建的指令
cd:进行目录切换的指令
-:表示返回当前操作的前一个操作的目录,(有点类似与遥控器返回键)
cp:(1)进行文件复制 文件:cp 文件名 目标目录
目录:cp -r 目录名 目标目录
(2)改名操作 cp -r 文件/目录名 要修改的文件/目录名
mv:(1) 进行文件或者目录的移动 文件:mv 文件名 目标目录
目录: mv 目录名 目标目录
(2) 改名:mv 文件/目录名 要修改的文件/目录名
【注意】cp的改名操作,先将文件/目录进行复制,然后对复制的文件/目录进行改名操作;
mv是在源文件/源目录上直接进行修改(重命名操作)
vi/vim:文件编辑指令
一般模式/编辑模式
(1) 一般模式:具有光标,有内容的主题文职。在左下角有关于当前文件的详细信息(只有只读操作)
(2)编辑模式:小写i可以将一般模式切换到编辑模式(对文件内容进行操作)
tar:文件压缩指令 tar -xvf 文件压缩包名字
rm:文件/目录删除操作 文件-rm 文件名 目录 rm -rf 目录名
-r:递归操作 -f:强制执行
3.ssh远程登录:设置免密登录
(1)在客户端利用ssh设置免密登录操作在客户端生成一对密钥对公钥a,私钥a
(2)客户端会向服务器发送连接请求——将公钥a发送给服务器端
(3)服务器端接收到公钥a,将密码进行加密操作做,生成随机字符串
(4)服务器端将加密的生成的随机字符串返回给客户端
(5)接收到服务器端发来的随机字符串,用私钥a进行解密操作
(6)将解密之后的内容发送给服务器端
(7)接收到解密内容,与未加密之前的内容进行对比,一致则配置成功,反之失败。
二、HDFS的技术细节
1.hdfs模块
-
block——是hdfs中最小的存储单元
切分规则:默认是128M,最大值但不是固定值
存储在datanode
-
NameNode——维护元数据信息——block块的存储位置,以及块的内容等
元数据信息是存到内存当中,但是为了数据的安全性与完整性,会在磁盘文件中备份
-
Datanode——用来存储block的(但是不知道其文件块的具体内容)
-
Secondarynode——用来协助namenode文件合并
2.文件合并:
磁盘内部资源:
-
fsimage:磁盘文件备份元数据信息
-
edits:日志文件,记录元数据修改信息
-
fstime:记录元数据合并的时间
触发文件合并的前提条件:
(1)当edits日志文件中的数据达到64M(2)当fstime里记录的时间达到3600s
文件合并具体操作
(1)在Namenode里先将edits日志文件进行复制,产生新的日志文件edits.new——原始日志文件不会再记录元数据的修改信息,而是新的日志文件进行记录
(2)SNN利用http get 获取NN中的磁盘文件fsimage以及原始日志文件edits,进行文件合并——产生新的磁盘文件fsimage.ckpt
(3)将新的磁盘文件复制给namenode
(4)namenode接收到新的磁盘文件,首先会将原始日志文件删除,并对新的日志文件进行重命名操作改名为edits,然后将原始磁盘文件进行删除,将新的磁盘文件进行重命名操作
【注意】NN是如何与DN进行沟通?——DN每隔3s向NN发送心跳报告,如果超过十分钟,NN未接收到DN的心跳,会向其他的DN发送文件复制指令
3.副本存放策略
(1)副本1有一个规则——就近原则(如果当前客户端就是一个DN会直接存放在本机)
【注意】当前机器是否空闲
(2)副本2放置在与副本1不同机架上
(3)副本3放置在与副本2相同机架上不同机器上,其他副本随机
三、HDFS的执行流程
1.读流程
(1)客户端向服务器端发送请求
(2)服务器端——验证当前用户是否具有访问权限,校验当前文件是否存在
(3)服务器端会向客户端发送文件的存储地址
(4)客户端接收到文件存储地址进行文件的读取操作
(5)文件内容读取完毕,向服务器端发送读取完毕信息,断开连接,释放资源
2.写流程
(1)客户端向服务器发送连接请求
(2)服务器端——验证当前用户是否具有数据写入的权限,校验当前文件是否存在
(3)服务器端会向客户端返回文件写入的地址信息
(4)客户端接收到地址信息之后——将文件进行切块的操作
(5)客户端会拿着这个dn的地址信息,进行block块的存储操作
(6)block——一次存储,在dn内部以管道流(channel)的形式进行副本存储
(7)存储完毕之后dn会逐级向上返回ack信息,直至返回给客户端,再执行下一个block块的存储操作
(8)文件彻底存储完毕,客户端会向服务器端发送文件写入完成的信息,释放资源,关闭连接
四、hdfs的优缺点
1.优点:
-
支持超大文件
-
具有检测和快速应对硬件故障的机制
-
可以进行流式数据的访问
-
简化的一致性模型
-
具有高容错性
-
可以将集群搭建在廉价的机器上面
2.缺点
- 具备高吞吐但是不具备低延迟的数据访问(毫秒级别)
- 具有大量的小文件占据内存
- 用户只支持一次写入,多次读取,但是不支持行级别的增删改(但是在Hadoop2.0添加了追加操作)
- 不支持超强的事务
【注意】在面试过程中,hdfs的缺点会经常被问到。
五、JavaAPI操作hdfs
1.下载
- 创建文件系统对象
- 创建文件下载输入流
- 创建文件下载输出流
- 对接流
- 释放资源,关闭连接
2.上传
- 创建文件系统对象
- 创建文件上传输入流
- 创建文件上传输出流
- 对接流
- 释放资源,关闭连接
3.删除
- 创建文件系统对象
- 删除操作(在Hadoop2.0默认可以直接对目录进行删除操作,若要关闭删除权限,添加一个Boolean类型的参数false)
- 释放资源,关闭连接
4.创建
- 创建文件系统对象
- 创建操作
- 释放资源关闭连接
六、MapReduce的技术细节
(一)执行流程
1.进行数据切片的操作(默认情况下与block块一致,默认有几个block块就有几个数据分片)
2.mapper阶段调用map函数(按行读取k1v1——k1是偏移量,v1是当前行内容)——数据分片有几行数据就会调用几次map函数
3.经过数据v1的读取以及切分操作输出k2v2(以单词读取为例,k2是,v2是每行当前单词的数量)
4.k2v2经过shuffle的过程执行执行分区排序的操作——hash取余(模)算法 k2.hashcode()%num(reduce的数量),输出的是k3v3——键不变,值以数组的形式进行表示
5.k3v3执行reducer阶段调用reduce函数,输出k4v4
(二)序列化与反序列化操作
将基本数据类型进行打包操作——以包装类进行表示——实现一个writable接口
(三)yarn资源调度
在Hadoop2.0之前没有yarn,只有jobtracker以及tasktracker
在Hadoop2.0引入yarn概念,将job以及task进行合并,并改名为resourcemanager以及nodemanager
(四)yarn的执行流程
1.写一个mapreduce程序运行在job客户端上
2.job客户端向jobtracker发送作业的存储请求
3.jobt会向job客户端发送一个作业编号以及存储作业的hdfs地址
4.job客户端会拿着这个hdfs的存储地址将作业上传
5.jobt会获取存储好的作业进行初始化操作,进行作业的处理
作业处理规则:(1)遵循本地化策略——将每个任务分发给与当前datanode在同一台机器上的nodemanager(2)验证当前dn是否空闲
6.nodemanager接收到作业任务,会创建一个虚拟子进程(work)——将作业任务交给work处理
【注意】如果当前work在处理任务时出现异常情况,nodemanager会再次创建一个虚拟子进程work继续处理
7.work处理接收到的作业任务
(五)Sqoop:
连接非结构化工具以及结构化工具的中间件
一般在开发环境中:是用于连接hive以及mysql的。