一.hadoop概述
1.4高(优势)
1).高可靠性:hadoop底层多个数据副本,即使某个计算节点存储出现故障,不会导致数据丢失。
2).高扩展性:可以动态增加服务器节点。
3).高效性:在MapReducer思想下,hadoop并行工作,加快任务处理速度。
4).高容错性:能将失败的任务,进行自动分配。
缺点:
1).不适合低延时数据访问,比如:快速查询,快速增删改查做不到。
2).无法高效的对大量小文件进行存储。存储大量小文件会造成namenode大量的内存来存储文件目录和块的信息。(namenode内存有限)
3).小文件寻址时间过长,会超过读取时间,违背了hdfs的设计目标。
4).不支持并发写入,文件随机修改。(一个文件只有一个写,不允许多个线程同时并发写入)
5).支持追加写入,不支持文件随机修改。
2.hdfs组成
namenode:数据都存储在什么位置
datanode:具体存储文件块数据
2nn:备份数据,辅助namenode工作
common:
3.yarn组成
rm:资源老大
nodemanager:单节点资源老大
appmaster:单个任务老大
contain:容器,独立的cpu,内存,磁盘,网络等。
4.mapreduce组成
map:
reduce:
5.hdfs-yarn-mapreduce三者之间关系(重点)
sbin:跟hdfs,yarn,mapreduce有关
hdfs存储,yarn
6.hdfs客户端:对集群进行增删改查操作的:
HDFS WEB UI、HDFS Shell命令以及Http方式访问HDFS,
参考必看:http://www.cnblogs.com/tesla-turing/p/11488100.html
6.hdfs块大小
hdfs块大小的一般是2.x版本128M,1.x版本64m,256M主要用于大型公司
7.为何不能设置块太大或者太小
HDFS等下设置的时间太小,会增加磁盘寻址时间,程序一直在找块的初始位置。
如果块设置的过大,从磁盘传输数据的时间会明显大于块定位这个块开始位置所需的时间。
HDFS块大小设置主要取决于磁盘传输速率。
7.HDFS的shell操作(开发重点)
hdfs客户端创建文件夹:hadoop fs /sanguo
删除命令一定注意!
修改文件副本数:hadoop fs -setrep 数量 /XXX
8.Windows Hdfs客户端代码
在集群上创建一个目录:
客户端代码常用模版:
①.获取一个客户端对象
②.执行想关的命令
③.关闭资源
Hdfs API的使用代码3遍:
9.机架感知(3种方式)
进展60章节
10.集群时间同步
如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;
在内网环境,要配置集群时间同步。否则,时间久了,会导致时间偏差,导致集群执行任务时间不同步。
2)时间服务器配置(必须root用户)
(1)查看所有节点ntpd服务状态和开机自启动状态
[atguigu@hadoop102 ~]$ sudo systemctl status ntpd
[atguigu@hadoop102 ~]$ sudo systemctl start ntpd
[atguigu@hadoop102 ~]$ sudo systemctl is-enabled ntpd
(2)修改hadoop102的ntp.conf配置文件
[atguigu@hadoop102 ~]$ sudo vim /etc/ntp.conf
修改内容如下
(a)修改1(授权192.168.10.0-192.168.10.255网段上的所有机器可以从这台机器上查询和同步时间)
#restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
为restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
(b)修改2(集群在局域网中,不使用其他互联网上的时间)
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
为
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
(c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
(3)修改hadoop102的/etc/sysconfig/ntpd 文件
[atguigu@hadoop102 ~]$ sudo vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
(4)重新启动ntpd服务
[atguigu@hadoop102 ~]$ sudo systemctl start ntpd
(5)设置ntpd服务开机启动
[atguigu@hadoop102 ~]$ sudo systemctl enable ntpd
3)其他机器配置(必须root用户)
(1)关闭所有节点上ntp服务和自启动
[atguigu@hadoop103 ~]$ sudo systemctl stop ntpd
[atguigu@hadoop103 ~]$ sudo systemctl disable ntpd
[atguigu@hadoop104 ~]$ sudo systemctl stop ntpd
[atguigu@hadoop104 ~]$ sudo systemctl disable ntpd
(2)在其他机器配置1分钟与时间服务器同步一次
[atguigu@hadoop103 ~]$ sudo crontab -e
编写定时任务如下:
*/1 * * * * /usr/sbin/ntpdate hadoop102
(3)修改任意机器时间
[atguigu@hadoop103 ~]$ sudo date -s “2021-9-11 11:11:11”
(4)1分钟后查看机器是否与时间服务器同步
[atguigu@hadoop103 ~]$ sudo date
11.HDFS的API操作
1)hdfs客户端环境准备
2)HDFS的API实操
客户端代码常用套路:hdfs,zookeeper
①、获取一个客户端的对象
②、执行相关的操作命令
③、关闭资源
12.参数优先级
参数优先级排序:(1)客户端代码中设置的值 >(2)ClassPath下的用户自定义配置文件 >(3)然后是服务器的自定义配置(xxx-site.xml) >(4)服务器的默认配置(xxx-default.xml)
副本数设置:dfs.replication 在hdfs-default.xml中设置
参数优先级:最低优先级:hdfs-default.xml==》hdfs-site.xml==>在项目资源目录下的配置文件
13.hdfs功能解释
HDFS客户端:就是客户端。
1、提供一些命令来管理、访问 HDFS,比如启动或者关闭HDFS。
2、与 DataNode 交互,读取或者写入数据;读取时,要与 NameNode 交互,获取文件的位置信息;写入 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储
NameNode:即Master,
1、管理 HDFS 的名称空间。
2、管理数据块(Block
)映射信息
3、配置副本策略
4、处理客户端读写请求。
DataNode:
就是Slave。NameNode 下达命令,DataNode 执行实际的操作。
1、存储实际的数据块。
2、执行数据块的读/写操作。
Secondary NameNode:
并非 NameNode 的热备。当NameNode 挂掉的时候,它并不能马上替换 NameNode 并提供服务。
1、辅助 NameNode,分担其工作量。
2、定期合并 fsimage和fsedits,并推送给NameNode。
3、在紧急情况下,可辅助恢复 NameNode。
14.网络拓扑-节点距离计算
节点距离,是到达共同祖先之和。
15.副本节点选择
第一副本在机架1:节点最近,上传更快。
第二个副本在另外一个机器的随机一个节点:
第三个副本在第二个副本所在机架的随机节点
16.元数据
元数据:是描述其它数据的数据。
文件元数据:包含文件名,大小,创建日期,修改日期,作者,权限等。
等
17.namenode是放在内存还是磁盘