Hadoop
Hadoop
小楼夜听雨概念
是什么
分布式系统基础架构,主要解决海量数据的储存和分析计算
发行版本
- Apache:阿帕奇,免费,首发
- Cloudera:封装阿帕奇,集成了很多大数据框架,收费,21年合二为一,形成CDP
- Hortonworks:封装阿帕奇,集成了很多大数据框架,收费,21年合二为一,形成CDP
优势
高可靠性:底层维护多个数据副本
高拓展性:在集群间分配任务,可拓展数以千计的节点
高效:并行工作
高容错:自动将错误的任务
组成
- 1.x:common(辅助工具)+HDFS(数据储存)+MapReduce(计算+资源调度)
- 2.x:common+HDFS+MapReduce(计算)+yarn(资源调度)
- 3.x:同2.x
HDFS架构
- NameNode:储存文件的元数据。如文件名,文件结构目录,文件属性,每个文件的块列表和块所在的DataNode等
- DataNode:储存文件块数据以及块数据的校验和
- Secondary NameNode(2nn):每隔一段时间对NameNode元数据备份
YARN架构
- ResourceManager(RM):管理整个集群
- NodeManager(NM):管理单个节点服务器
- APPlicationMaster(AM):管理单个任务运行
- Container:容器(相当于一台服务器)里面封装了任务运行需要的资源(内存,CPU,磁盘,网络等)
- client:客户端用户
MapReduce
Map阶段:并行处理输入的数据
Reduce阶段:对Map结果进行汇总
三者的运行关系
- client发布任务给RM,
- RM找一个NM开启一个container,
- container运行一个AM,
- AM向RM申请计算需要的资源,
- RM接收到之后开启需要的各NM的容器container,
- 各NM的容器container各运行Map阶段的Map Task,
- Map Task在各自的DataNode中查找,
- 各Map Task将结果返回NM的容器container的Reduce Task ,
- Reduce 阶段会将结果写入新的DataNode并且返回给NameNode,
- 2nn进行备份
生态
推荐系统案例
环境准备
模版虚拟机准备
安装VM,创建虚拟机
自定义模式
稍后安装操作系统
处理器2,内核2,内存4,磁盘50
设置cd镜像
启动,设置手动分区
添加/boot为1g,文件系统为ext4
添加swap为4g
/为剩下系统盘
关闭KDUMP
配置VM的网络选择NAT模式和子网网段都为10
配置Windows设备中的VMnet8网卡的ip等也为10网段,网关为2
配置虚拟机网络
修改BOOTPROTO=”static”
再最后添加
IPADDR=192.168.10.100
GATEWAY=192.168.10.2
DNS1=192.168.10.2
修改主机名称 vi /etc/hostname 为hadoop100
配置ip和主机名映射 vi /etc/hosts 添加
1
2
3
4
5
6
7
8
9192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108reboot重启
在电脑C:\Windows\System32\drivers\etc中也找到hosts,添加
1
2
3
4
5
6
7
8
9192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108备份原有 yum 源配置
1
cp -r /etc/yum.repos.d /etc/yum.repos.d.bak
打开配置文件
1
2vi /etc/yum.repos.d/CentOS-Base.repo
替换为以下配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25[base]
name=CentOS-7 - Base - aliyun
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/os/x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-7
[updates]
name=CentOS-7 - Updates - aliyun
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/updates/x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-7
[extras]
name=CentOS-7 - Extras - aliyun
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/extras/x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-7
[centosplus]
name=CentOS-7 - Plus - aliyun
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/centosplus/x86_64/
gpgcheck=1
enabled=0
gpgkey=https://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-7清理并重建 yum 缓存
1
2yum clean all
yum makecache安装以下软件
1
2
3
4yum install -y epel-release
yum install -y vim
yum install -y net-tools
yum install -y rsync关闭防火墙和自启动
1
2systemctl stop firewalld
systemctl disable firewalld.service配置用户权限
1
2
3
4vim /etc/sudoers
在%wheel下面添加一行
yzf522 ALL=(ALL) NOPASSWD:ALL在/opt目录下创建 module software文件夹,并且修改所属主和组
1
2
3
4
5
6
7
8
9
10mkdir /opt/module
mkdir /opt/software
修改所有者和组均为yzf522
chown yzf522:yzf522 /opt/module
chown yzf522:yzf522 /opt/software
查看
cd /opt/
llreboot重启
克隆
完整克隆Hadoop102,103,104
各修改ip和主机名
安装JDK
在hadoop102安装,cd进入/opt/software
将软件用xftp传入,并且解压到/opt/module/
1 | tar -zxvf OpenJDK8U-jdk_x64_linux_hotspot_8u504b01.tar.gz -C /opt/module/ |
添加环境变量
1 | #cd 到环境变量目录 |
安装Hadoop
同样安装好之后配置环境变量
1 | #HADOOP_HAME |
Hadoop集群搭建
本地模式
数据储存中Linux本地,测试偶尔用一下
在hadoop文件夹里面创建一个文件夹wcinput
在wcinput中创建一个文件word.txt
里面写一些名称
现在要统计名称出现次数
1 | #创建完成之后回到hadoop的文件夹 |
打开wcoutput文件夹,有2个文件,一个是标记(0内存),一个是计算结果(有内存)
注意:输出地址是不能存在的,不然报错
完全分布式集群
SCP完全安全拷贝
是完全增量拷贝,会拷贝一整份,用途广泛,可以推,可以拉,可以当中间机,推拉其他主机
推的语法:scp -r /opt/module/hadoop-3.3.0/ yzf522@hadoop103:/opt/module/
解析:scp 递归文件 源文件地址 目标地用户@主机:目的地地址
拉的语法:scp -r yzf522@hadoop102:/opt/module/hadoop-3.3.0/ /opt/module/
解析:scp 递归文件 出发地用户@主机:文件地址 目的地地址
中间语法:scp -r yzf522@hadoop102:/opt/module/hadoop-3.3.0/ yzf522@hadoop103:/opt/module/
解析:scp 递归文件 出发地用户@主机:文件地址 目标地用户@主机:目的地地址
实验:
1.在102将jdk推到103
1 | scp -r /opt/module/jdk8u504-b01/ yzf522@hadoop103:/opt/module/ |
2.在103将hadoop从102拉过来
1 | scp -r yzf522@hadoop102:/opt/module/hadoop-3.3.0 /opt/module/ |
3.在103,将102的2个文件推到104
1 | scp -r yzf522@hadoop102:/opt/module/* yzf522@hadoop104:/opt/module/ |
rsync增量同步工具
rsync是一个同步工具,不是拷贝整个文件,关于地址部分和scp相同
语法:rsync -av /opt/module/hadoop-3.3.0/ yzf522@hadoop103:/opt/module/
解析:rsync a归档拷贝 v显示拷贝内容 源文件地址 目标地用户@主机:目的地地址
实验:
1.删除103hadoop内的wc2个文件夹
2.在102将Hadoop同步到103,以恢复wc
1 | rsync -av /opt/module/hadoop-3.3.0/ yzf522@hadoop103:/opt/module/hadoop-3.3.0/ |
xsync集群
这是集成封装rsync的命令,可以简化输入一大串代码进行同步
原理:循环复制文件到所有节点的相同目录下
在102的yzf522家目录下 添加一个a.txt文件和一个bin目录,进入bin创建一个xsync文件
1 | cd /home/yzf522 |
1 | #!/bin/bash |
添加可执行权限 ,ll会发现变绿
1 | chmod 777 xsync |
同步bin目录
1 | cd |
将前面的环境变量也同步,由于需要root权限,但是xsync在yzf522下,没有配置全局环境,root权限找不到xsync的地址,所以加上xsync的详细地址
1 | sudo ./bin/xsync /etc/profile.d/my_env.sh |
103和104执行
1 | source /etc/profile |
ssh无密码登录配置
两台服务器之间会各自生成一对公钥和私钥,将公钥相互保存在授权的文件夹之后,即可免密通信,102将信息通过A私钥加密发送给103,103用A公钥将102需要的信息用A公钥加密发回102,102要通过A私钥才能解密获取到
在102执行进入ssh文件夹,创建秘钥对,按3下回车即可
1 | ll -al |
分别在103和104是同样执行
在102上同步a.txt测试效果
1 | xsync a.txt |
配置集群
注意:
NameNode和secondaryNameNode不要安装在同一个服务器上
resourcemanager也很消耗内存,不要NameNode和secondaryNameNode配置在一台服务器
配置安排:
| Hadoop102 | Hadoop103 | Hadoop104 | |
|---|---|---|---|
| HDFS | NameNode DataNode |
DataNode | SecondaryNameNode DataNode |
| YARN | NodeManager | ResourceManager NodeManager |
NodeManager |
配置文件说明:
Hadoop配置文件分为2类:默认配置文件和自定义配置文件。只有用户需要修改某一默认配置值的时候,才需要修改自定义配置文件,更改相应属性值
默认配置文件:
| 要获取的默认文件 | 存放在Hadoop的jar包中的位置 |
|---|---|
| core-default.xml | hadoop-common-3.1.3.jar/core-default.xml |
| bdfs-default.xml | hadoop-hdfs-3.1.3.jar/hdfs-default.xml |
| yarn-default.xml | hadoop-yarn-common-3.1.3.jar/yarn-default.xml |
| mapred-default.xml | hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml |
自定义配置文件:
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在
/opt/module/hadoop-3.3.0/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。
执行:
1 | cd /opt/module/hadoop-3.3.0/etc/hadoop |
配置core-site.xml:
1 | vim core-site.xml |
1 | #在<configuration> |
配置hdfs-site.xml:
1 | vim hdfs-site.xml |
1 | <!-- nn web 端访问地址--> |
配置yarn-site.xml:
1 | vim yarn-site.xml |
1 | <!-- 指定 MR 走 shuffle --> |
配置mapred-site.xml:
1 | vim mapred-site.xml |
1 | <!-- 指定 MapReduce 程序运行在 Yarn 上 --> |
同步到103104
1 | xsync hadoop/ |
启动集群
同样在Hadoop的etc中,编辑workers文件,删除localhost,添加集群节点名称,有多少节点就添加多少,不可以出现空格和空行
然后同步
1 | vim workers |
初始化集群(第一次启动的才需要)
1 | hdfs namenode -format |
获取id





