0%

Hadoop(1)Hadoop基础

Java数据类型与Hadoop数据类型的对应关系

Java Hadoop 意义
Long LongWritable 整数型
String Text 字符串

1. 走进大数据

大数据4V特征

  1. Volume(量大):存储量大,计算量大
  2. Variety(多样):来源多,格式多
  3. Velocity(快速):数据增长速度快,处理速度要求快
  4. Value(价值):价值密度低,和数据总量的大小成反比

2. Hadoop

2.1 什么是Hadoop

我们生活在一个数据大爆炸的时代,数据飞快的增长,急需解决海量数据的存储和计算问题

Hadoop适合海量数据分布式存储分布式计算

2.2 Hadoop发行版介绍

目前Hadoop已经演变为大数据的代名词,形成了一套完整的大数据生态系统,所以针对Hadoop就出现了很多发行版

Apache Hadoop:官方版本,开源

Cloudera Hadoop(CDH):商业版本,对官方版本做了一些优化,提供收费技术支持,提供界面操作,方便集群运维管理

HortonWorks(HDP):开源,提供界面操作,方便运维管理

注意:目前HDP已经被CDH收购,都属于一个公司的产品

建议在实际工作中搭建大数据平台时选择CDH或者HDP,方便运维管理。

2.3 Hadoop版本演变历史

Hadoop1.x ——Hadoop2.x——Hadoop3.x

image-20211130113730054

Hadoop3.x的细节优化

  • Java改为支持8及以上

  • HDFS支持纠删码

  • HDFS支持多NameNode

  • MR任务级本地优化

  • 多重服务默认端口变更

2.4 Hadoop三大核心组件介绍

Hadoop主要包括三大组件:HDFS+MapReduce+YARN

image-20211130114234274

  • HDFS负责海量数据的分布式存储
  • MapReduce是一个计算模型,负责海量数据的分布式计算
  • YARN主要负责集群资源的管理和调度

2.5 Hadoop集群安装部署

  • 伪分布集群安装:使用一台Linux机器【建议在后续学习阶段使用伪分布集群】
  • 分布式集群安装:使用三台Linux机器

2.5.1 伪分布集群

image-20211130114644684

2.5.1.1 设置静态IP

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
# 进入网口目录
[root@master network-scripts]# cd /etc/sysconfig/network-scripts/
# 编辑ifcfg-ens33文件
[root@master network-scripts]# vim ifcfg-ens33
# 修改文件内容为
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static # 设置静态IP

DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=ff5bf7ab-9679-4a06-bfc6-e2c91ed99c06
DEVICE=ens33
ONBOOT=yes # 是否开机启用

IPADDR=192.168.128.130 # IP地址
GATEWAY=192.168.128.2 # 网关
DNS1=192.168.128.2 # DNS服务器地址

2.5.1.2 设置主机名

1
2
3
4
5
# 编辑hostname文件
[root@master network-scripts]# vim /etc/hostname
# 文件内容即为主机名,例如:
mater
# 重启就生效

2.5.1.3 关闭防火墙

1
2
3
4
# 查看防火墙状态
[root@master network-scripts]# systemctl status firewalld
# 永久关闭防火墙
[root@master network-scripts]# systemctl disable firewalld.service

2.5.1.4 ssh无密码登录

1
2
ssh-keygen -t rsa
cp ~/.ssh/xxx.pub ~/.ssh/authorized_keys

在目录~/.ssh/下会生成3个文件,其中.pub结尾的文件为ssh公钥,将该文件复制到需要远程登录机器的

~/.ssh/authorized_keys该目录下。

2.5.1.5 安装JDK

1
2
3
4
# 解压
tar -xzvf jdk-8u202-linux-x64.tar.gz
# 修改名字
mv jdk1.8.0_202/ jdk1.8

设置环境变量

1
2
3
4
5
6
[root@master network-scripts]# vim /etc/profile
# 在底部加上
export JAVA_HOME=/data/soft/jdk1.8
export PATH=.:$JAVA_HOME/bin:$PATH
# 重新载入profile文件
source /etc/profile

查看java是否安装成功

1
2
3
4
[root@slave1 soft]# java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)

2.5.1.6 安装Hadoop

  • bin:包含操作HDFS和YARN的一些脚本。
  • sbin:包含启动和停止集群中的组件。

bin和sbin目录需要配置到环境变量中。

  • etc/hadoop:hadoop中的配置文件,安装hadoop需要修改该目录下的文件。

    1 . hadoop-env.sh

1
2
export JAVA_HOME=/data/soft/jdk1.8
export Hadoop_LOG_DIR=/data/hadoop_repo/logs/hadoop

​ 2 . core_site.xml

1
2
3
4
5
6
7
8
9
10
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop_repo</value>
</property>
</configuration>

​ 3 . hdfs-site.xml

1
2
3
4
5
6
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value> #只有一台集群
</property>
</configuration>

​ 4 . mapred-site.xml

1
2
3
4
5
6
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

​ 5 . yarn-site.xml

1
2
3
4
5
6
7
8
9
10
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>

​ 6 . workers

1
master

2.5.1.7 格式化HDFS文件系统

1
bin/hdfs namenode -format  # 只能执行一次,类似于格式化硬盘,如果要重装需要先删掉/data/hadoop_repo这个目录

2.5.1.8 启动伪分布集群

1
sbin/start-all.sh  # 启动所有服务

消除错误信息(缺失很多用户信息)

​ 1 . start-dfs.sh

1
2
3
4
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

​ 2 . stop-dfs.sh

1
2
3
4
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

​ 3 . start-yarn.sh

1
2
3
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

​ 4 . stop-yarn.sh

1
2
3
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

重新启动集群

1
sbin/start-all.sh  # 启动所有服务

输入jps查看启动的服务

1
2
3
4
5
6
7
jps
14560 ResourceManager
15700 Jps
14058 DataNode
14282 SecondaryNameNode
14714 NodeManager
13885 NameNode

如果看到6大组件都启动成功说明,集群启动成功。

此时在本地主机内输入http://master:8088/clusterhttp://master:9870/dfshealth.html#tab-overview 可查看hadoop中的YEAR和HDFS服务页面。

设置主机名访问

修改主机hosts文件,加上

192.168.128.130 master

2.5.1.9 关闭伪分布集群

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@master hadoop-3.2.0]# sbin/stop-all.sh 
Stopping namenodes on [master]
上一次登录:二 11月 30 15:02:43 CST 2021从 192.168.128.1pts/2 上
Stopping datanodes
上一次登录:二 11月 30 15:47:32 CST 2021pts/1 上
Stopping secondary namenodes [master]
上一次登录:二 11月 30 15:47:34 CST 2021pts/1 上
Stopping nodemanagers
上一次登录:二 11月 30 15:47:36 CST 2021pts/1 上
Stopping resourcemanager
上一次登录:二 11月 30 15:47:38 CST 2021pts/1 上
[root@master hadoop-3.2.0]# jps
16638 Jps

2.5.2 分布式集群

所有机器完成2.5.1.1~2.5.1.5步骤。

也可以一台机器完成后再克隆2台,修改hostname和ip即可。

2.5.2.1 **设置静态IP

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
# 进入网口目录
[root@master network-scripts]# cd /etc/sysconfig/network-scripts/
# 编辑ifcfg-ens33文件
[root@master network-scripts]# vim ifcfg-ens33
# 修改文件内容为
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static # 设置静态IP

DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=ff5bf7ab-9679-4a06-bfc6-e2c91ed99c06
DEVICE=ens33
ONBOOT=yes # 是否开机启用

IPADDR=192.168.128.130 # IP地址,不同机器IP地址不能相同
GATEWAY=192.168.128.2 # 网关
DNS1=192.168.128.2 # DNS服务器地址

2.5.2.2 **设置主机名

1
2
3
4
5
# 编辑hostname文件
[root@master network-scripts]# vim /etc/hostname
# 文件内容即为主机名,例如:
mater
# 重启就生效

2.5.2.3 **关闭防火墙

1
2
3
4
# 查看防火墙状态
[root@master network-scripts]# systemctl status firewalld
# 永久关闭防火墙
[root@master network-scripts]# systemctl disable firewalld

2.5.2.4 **ssh无密码登录

1
ssh-keygen -t rsa

在目录~/.ssh/下会生成3个文件,其中.pub结尾的文件为ssh公钥,将该文件复制到需要远程登录机器的

~/.ssh/authorized_keys该目录下。

2.5.2.5 **安装JDK

1
2
3
4
# 解压
tar -xzvf jdk-8u202-linux-x64.tar.gz
# 修改名字
mv jdk1.8.0_202/ jdk1.8

设置环境变量

1
2
export JAVA_HOME=/data/soft/jdk1.8
export PATH=.:$JAVA_HOME/bin:$PATH

查看java是否安装成功

1
2
3
4
[root@slave1 soft]# java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)

2.5.2.6 **修改/etc/hosts文件

作用:使得机器之间能够相互识别

1
2
3
4
192.168.128.130 master
192.168.128.131 slave1
192.168.128.132 slave2
192.168.128.1 win

2.5.2.7 **同步时间

使得三台机器时间一致,避免在工作的时候出现问题(三台机器都要做)

1
2
# 下载ntpdate命令
yum install -y ntpdate

同步时间服务器(ntp.sjtu.edu.cn)

1
ntpdate -u ntp.sjtu.edu.cn

添加到定时任务,使得每次开启集群自动同步时间

1
2
vim /etc/crontab
* * * * * root /usr/sbin/ntpdate -u ntp.sjtu.edu.cn

2.5.2.8 主节点无密码登录从节点

使用

scp工具将主节点的公钥信息发送给从节点

1
2
scp ~/.ssh/authorized_keys slave1:~/
scp ~/.ssh/authorized_keys slave2:~/

然后进入从节点将主节点的公钥追加到自己公钥后面

1
2
[root@slave1 ~]# cat authorized_keys >> ~/.ssh/authorized_keys 
[root@slave2 ~]# cat authorized_keys >> ~/.ssh/authorized_keys

实现无密码登录

1
2
3
4
5
6
7
8
[root@master /]# ssh slave1
Last login: Tue Nov 30 17:20:35 2021 from master
[root@slave1 ~]# exit
登出
Connection to slave1 closed.
[root@master /]# ssh slave2
Last login: Tue Nov 30 17:17:54 2021 from master
[root@slave2 ~]#

2.5.2.9 hadoop安装

  • 1 . hadoop-env.sh
1
2
export JAVA_HOME=/data/soft/jdk1.8
export Hadoop_LOG_DIR=/data/hadoop_repo/logs/hadoop

​ 2 . core_site.xml

1
2
3
4
5
6
7
8
9
10
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop_repo</value>
</property>
</configuration>

​ 3 . hdfs-site.xml

1
2
3
4
5
6
7
8
9
10
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value> #多台机器
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
</configuration>

​ 4 . mapred-site.xml

1
2
3
4
5
6
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

​ 5 . yarn-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>

​ 6 . workers

1
2
slave1
slave2

2.5.2.10 修改分布式集群启动脚本

消除错误信息(缺失很多用户信息)

​ 1 . start-dfs.sh

1
2
3
4
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

​ 2 . stop-dfs.sh

1
2
3
4
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

​ 3 . start-yarn.sh

1
2
3
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

​ 4 . stop-yarn.sh

1
2
3
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

2.5.2.11 将修改好的hadoop文件发送给从节点

1
2
[root@master soft]# scp -rq hadoop-3.2.0 slave1:/data/soft/
[root@master soft]# scp -rq hadoop-3.2.0 slave2:/data/soft/

2.5.2.12 格式化HDFS文件系统

1
bin/hdfs namenode -format  # 只能执行一次,类似于格式化硬盘,如果要重装需要先删掉/data/hadoop_repo这个目录

2.5.2.13 启动hadoop

只需要在主节点中运行下面代码即可

1
[root@master hadoop-3.2.0]# sbin/start-all.sh 

2.5.2.14 Hadoop的客户端节点

  • 在实际工作中不建议直接连接集群中的节点来操作集群,直接把集群中的节点暴露给普通开发人员是不安全的
  • 建议在业务机器上安装Hadoop,这样就可以在业务机器上操作Hadoop集群了,此机器就被称为是Hadoop的客户端节点

image-20211130180735050

-------------本文结束感谢您的阅读-------------