A 学习内容
详细教程:Hadoop之HDFS:Hadoop分布式文件系统–具体知识点
A1:概况
前面稍微简单点,主要是环境扫盲,讲了开发环境,以及运行安装环境。
A2:学习目标
- 理解分布式文件系统
- 理解hdfs架构
- 熟练hdfs基本命令使用
- 掌握hdfs编程
- 理解namenode及secondarynamenode交互
A3:具体知识点
B 学习笔记
- 完整系统笔记:📎HDFS:Hadoop分布式文件系统.md
1. hadoop的发展历史
nutch:全网爬虫项目
主要是想要抓取全网的网页,回来做搜索引擎lucene
抓取回来的数据很多,如何存储,如何计算
google做搜索做的最好的
如果想要快速的学习IT技术,科学上网必不可少
参见了谷歌的开源的三篇论文:谷歌的三驾马车 GFS Mapreduce BigTable
Doug Cutting 大神 在全世界开源排行榜上有名的
hadoop框架 08年开源提供给apache,然后就一路火了
衍生出来了周边的很多生态框架
造成hadoop技术是一个生态圈
2013年的时候国内开始有大数据的迹象
2008年淘宝就开始引入了分布式计算的框架hadoop
2. hadoop的版本介绍
3. hadoop生产环境版本选择
可有的选择性很多:阿里的大数据平台maxComputer 腾讯的大数据平台 华为大数据平台 星环大数据平台(国内的政府,银行等机构用的比较多) ClouderaManager(6.x的版本以及开始收费了) Ambari 类似于CM这样的一个东西(国内一些互联网公司用的还行)
很多一些大的公司选择自研大数据平台:大数据平台开发工程师 纯粹技术性的岗位
以上这些都是各种基于hadoop的各种大数据平台
4. hadoop的架构模块介绍
学习大数据的生态从hadoop 开始
hadoop是一个分布式的框架:
由三个模块组成:分布式存储HDFS、分布式计算MapReduce、资源调度引擎Yarn
hdfs:分布式文件系统
文件系统:管理计算机硬盘上面的各种文件 avi文件,torrent文件 各种文件等等
操作系统,windows操作系统:文件管理系统
主节点:namenode 主要负责管理整个集群,以及维护集群当中的元数据信息
从节点:datanode 主要用于保存数据,说白了就是一块硬盘
yarn:资源调度平台
什么是资源:计算机当中比较珍贵的都算作资源 内存 CPU
硬盘:当然也算,但是不是太珍贵
主从结构:
主节点:resourceManager 主要用于接收任务,分配资源
从节点:nodeManager 主要用于计算任务,执行任务等等
5 hdfs功能详解
5.1 理解分布式文件系统
5.2 hdfs的架构详细剖析
分布式文件存储系统:将所有的数据一视同仁,抽象成为一个个的block块 ,block块其实就是一块块的文件
hdfs如何实现分布式文件的存储:都是抽象成为block块
blockpool:专门用于管理block块 类似于一个水桶,水桶里面最多可以装128斤水,但是你也可以只装1斤
hadoop1.x当中,block块默认是64M
hadoop2.x当中,block块默认是128M
hadoop2.x当中,block块默认是256M
可以配置的
表示可以存放文件的大小
5.3 hdfs的shell命令操作
马晓环:磁盘阵列吗
磁盘阵列一般用于存放namenode元数据的信息
hdfs dfs -rm -skipTrash /xcall
使用这个命令,跳过hdfs的垃圾桶删除文件
hdfs dfs -rmr -skipTrash /hello.txt
5.4 hdfs的安全模式
- 安全模式是hdfs的一种保护机制,主要是为了保存block块数量的完整性,避免数据出现丢失的可能性
- 集群启动的时候,会去检查block块的完整性
- 如果block块不完整,有丢失,需要进入到安全模式,对外不提供写入数据的功能,只提供读取数据的功能,进行block快的修复,复制等等的工作
- 注意:hdfs常见的操作,一定要去自己动手尝试一遍(待练习1:13:)视频
Q&A
Q:生产环境hdfs数据每天是不是定时备份啊
A:有两个集群之间进行数据的同步,但是本来数据就是安全的,有数据的副本机制
Q:删除了,所有的副本数据不会马上删除吧》
A:删除的话,整个文件都会删掉
HDFS的代码的开发:需要我们来配置开发的环境
Q:最小副本数量要求 也说下呢
A:最小副本的数量是3 ,自己可以配置的dfs.replications,副本数配置的是2.5(奇葩)
Q:回收站的数据如何还原?
A:hdfs dfs -mv /user/hadoop/.Trash/Current/xcall /
5.5 hdfs的javaAPI的开发:
需要构建windows的开发环境:
1、需要在windows安装jdk
2、需要在windows安装maven
3、需要在windows安装idea
4、需要在windows配置hadoop的环境变量
在windows当中开发代码去访问linux当中的hadoop集群
涉及到跨平台的问题
需要在windows当中安装hadoop的客户端的配置
Q:mac的话会有跨平台问题吗,还需要在mac配置hadoop吗?
A:macn不存在跨平台的问题
Q:替换bin和拷贝hadoop.dll的原因是啥
A:替换bin,里面有一个winutils.exe文件是需要的,hadoop.dll是一个windows下面的一个可执行脚本文件
Q:杨俊:官网有下载么,以后去哪升级
A:升级哪一个软件啊???
Q:windows必需安装hadoop环境才能开发吗? 可以直接在windows下的idea链接linux下的hadoop?
A:不行的,必须配置,不然后面写其他的代码,还会有问题的。只能通过端口远程访问,访问linux的hadoop也是通过端口远程访问
Q:以前安装的JDK和maven移动一下目录重新配一下环境变量,不受影响吧,现在放的地方有点乱
A:没问题
Q:windows的Hadoop版本与集群的Hadoop版本不一样行不行
A:可以,没问题,只要你的有hadoop.dll以及winutils.exe文件即可
Q:hadoop-3.1.4.tar解压不了,我用的7Z
A:试试看其他的解压缩工具
Q:JAVA代码还是scala
只能写java代码
实操:
运行报了个错
https://blog.csdn.net/weixin_45077780/article/details/107329186
https://www.jianshu.com/p/ea2de77eb9d4(采用了这个方法)
https://my.oschina.net/u/4266655/blog/3999399
结构并不是这个问题
java.net.ConnectException: Call From DESKTOP-BV4G06A/172.17.80.113 to node01:8080 failed on connection exception: java.net.ConnectException: Connection refused: no further information; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
Q:快捷顺带讲了,操作太快了,没玩过IDEA
- ctrl + shift + alt + N ===> 查找某一个类
- ctrl + 鼠标左击 ====》进入源代码
- Shift+ Alt + <- idea往后退一步:
file:/// 本地文件系统
分布式文件系统是 hdfs://node01:8020
Q:hdfs快 还是fdfs快
A:fastDFS是一个文件存储系统;hdfs是一个分布式文件系统:
fastDFS更快点,hdfs重在存储海量的数据,hdfs上面的文件都是顺序读写的
断点续传的功能:类似于百度网盘的功能
可以记录传输了都少个字节,下一次继续上一次的字节数据读取
namenode以及secondaryNamenode功能解析
DanielCry:这些代码是不是用Python也能做?
小兔弗雷迪:我可是要改hadoop源码的男人,怎么能不搞?
一定要搞,而且还要搞到底
Q:知识点,面试点内容,也讲讲
A:面试点:小文件的解决方案,读写文件的过程等等()
6. NameNode和SecondaryNameNode功能剖析
namenode主要是做元数据信息的管理:
-
**元数据信息:**描述数据的数据
-
- 其实就是类似于一个小的记事本,记录了我们的文件存储在哪个盘,哪个隐藏文件夹
- **描述数据的数据:**类似于新华字典的目录
- 举个例子:新华字典里面有很多字,查找某一个字很难 ==》 通过这个字的偏旁部首,发音等等各种方式,先去查找目录,然后再去看这个字在第多少页
- 再举个例子:鼠标右键 ===》 查看某个文件的属性 ==》 都是描述这个文件的信息
- 所有的元数据信息为了快速的查找都是存放在内存当中:丢失的问题
-
为了保证元数据信息的安全的问题,引入了fsimage文件 ===》 其实就是类似于元数据信息某一个时刻的快照
-
- 快照:snapShot 类似于某个时间点拍一个照片 类似于玩游戏存档 下一次玩的时候,继续你上一次的等级
- 九点钟拍了一个快照,做了fsimage的快照。到了九点十分:服务器宕机 09:00 到09:10的时候 元数据全部都丢了
-
为了解决平时操作元数据的记录:引入了edits文件
-
- 记录了你平时每一次操作的日志
- fsimage+edits = 一份完整的元数据信息
Q:拍照的时候edits会清空么
A:做快照的时候,edits文件会同步给secondaryNamenode,老的edits文件会被删掉
Q:snn检查时间可以更改么?
A:可以的,可以配置,默认两个条件去检查进行合并
1、时间达到1个小时合并一次
2、edits文件操作次数达到100W次
Q:跟redis持久化挺像的
A:对的,redis的持久化rdb和aof
Q:namenode内存要大
A:secondAryNamenode内存也要大
Q:老王,这个频率在哪个文件里配置
A:有配置文件可以改的
Q:修改完不会实时生效?每小时扫描以后才生效?
A:修改完重启hdfs的服务生效
Q:要满足的条件可以设置么
A:可以设置
Q:edits没有被删掉?
A:历史的数据的edits不会马上被删掉
:比如改成两个小时
- 元数据信息的配置:非常珍贵
Q:HA环境都用JournalNode合并editslog和fsimage吧
A:不是的,HA环境,使用的是journalNode来保存edits的共享文件,实时的进行同步到其他的standBy的namenode集群节点
Q:secondary是一个单独的节点吗
A:是滴,是一个进程,一般实际工作当中如果用到了,放在一台单独的服务器上面
Q:生产会这么用吗
A:测试可能会这么用,生产环境一般都做高可用
Q:jn有一个节点数据人为删除,能恢复么?
A:如果在垃圾站可以恢复,如果没了就恢复不了啦
Q:还是没太弄明白,为什么要在windows环境下配置hadoop才能操作linux下的hadoop,
我一直以为直接引入jar包,然后链接hadoop的端口就可以操作了,到底这个dll文件做 了什么事情。
A:dll是一个脚本配合winutils.exe,使用window模拟了一个linux的环境
Q:我们搭建的hadoop集群没有配置secondaryNameNode吧?
A:有的,我们没有配置HA,太吃内存了
Q:我们之前安装的是hadoop集群 还是HDFS集群
A:之前安装的是hadoop集群,包含了hdfs以及yarn的集群
Q:做hadoop集群时namenode datanide都配置了相同的内存,实际部署应该是namenode要配很大的内存吗
A:对的,namenode大内存,datanode大磁盘
Q:要扩展hdfs 机器 还需要扩展 hadoop吗
A:需要的
Q:mac怎么搞
A:mac不用搭建开发环境,安装idea即可
Q:secondarynode和journalnode是包含于的关系么
Q:环境配置需要 全部理解吗?
A:不用理解,照着做一遍即可
http://www.dayanzai.me/
软件下载网站
C 零散知识点
- 虚拟化:简单认为,就是帮我们把一台电脑弄成多台
- 集群的时钟一定要保持同步:两种方式
-
- 同步网络时间:学习时候使用这种方式比较简单
- 同步某一台机器的时间 实际工作当中都是这种方式
- 全部统一创建普通用户hadoop
- 删库命令 rm -rf / 使用root用户来执行最有效,不想干了就执行一把(滑稽)
- 以后工作当中如何进行集群的服务的安装规划:
-
- 刚开始起步做大数据的一些公司,服务的规划就是你来做
-
-
- 评估需求
- 预估每天的数据量
- 申请服务器的数量
- 如何帮公司开源节流 降本增效
- 进行服务的规划
-
D 其他备注
- 每次上完课都会有一定作业,如果作业太难,就会直播讲,作业都是直播讲过的内容
- 如果没有javaSE的基础,需要先看前面的javaSE的录播视频
- 需要一定的linux的基础,常用的命令一定要熟练,还是要多敲敲命令,在公司一般不会让人直接通过文本编辑器去连接服务器
- 这里面的安装步骤,跟服务器安装linux的操作系统是一样的
- 注意:网络的配置,如果之前没有配置过的同学,一定要参见视频
- 环境的问题不是大问题:如果在4个小时之内没有解决掉,直接找我和助教
- 远程的工具使用的是向日葵
- notepad++ 可以快捷配置hadoop信息(liux不熟悉可用)
Q&A
Q1:map reduce过程中,shuffle failed可能是什么原因造成的?Failed Shuffles=0
A1:原因可能有很多:网络延迟太大,数据的序列化和反序列化失败
Q2:公司的环境可以吗?版本不太一样
A2:只要大的版本差别不大即可
Q3:企业是不是用HA集群了,有两个主节点,不然一个主节点那台机器挂了不都是没了
A3:对的,hadoop3.x 当中支持多个namenode,可以不止有两个
Q4:namenode和DataNode哪个是做数据处理的,哪个是做数据收发的
A4:namenode主要是做客户端的请求的处理
datanode与客户端进行通信,做数据的读取和写入的过程
练习
- 将开发环境构建好
- 熟悉hdfs的常用的shell命令