第1章 Hadoop运行环境搭建
1.1 虚拟机环境准备
1.1.1 克隆虚拟机
虚拟机配置要求如下:
单台虚拟机:cpu2个,内存4G,硬盘50G,最小化安装。
(1)安装必要环境
(2)修改克隆虚拟机的静态IP(注意:IP网段需和主机网段不一样)
改成
(3)查看Linux虚拟机的虚拟网络编辑器,编辑->虚拟网络编辑器->VMnet8
(4)查看Windows系统适配器VMware Network Adapter VMnet8的IP地址
(5)保证Linux文件中IP地址、Linux虚拟网络编辑器地址和Windows系统VM8网络IP地址相同。
1.1.2 修改主机名
(1)修改主机名称为hadoop101
(2)配置主机名称映射,打开/etc/hosts
添加如下内容,根据配多少台服务器添加
(3)修改window7的主机映射文件(hosts文件)
a. 进入C:\Windows\System32\drivers\etc路径
b. 打开hosts文件并添加如下内容
(4)修改window10的主机映射文件(hosts文件)
a. 进入C:\Windows\System32\drivers\etc路径
- 注意:win10系统有的版本中,该路径没有hosts文件,可以通过cmd执行以下命令。
for /f %P in ('dir %windir%\WinSxS\hosts /b /s') do copy %P %windir%\System32\drivers\etc & echo %P & Notepad %P
b. 拷贝hosts文件到桌面
c. 打开桌面hosts文件并添加如下内容
d. 将桌面hosts文件覆盖C:\Windows\System32\drivers\etc路径hosts文件
e.测试,可在windows的cmd命令窗口中用ping hadoop101
来测试以上配置是否成功。
1.1.3 关闭防火墙
1.1.4 创建用户
例如,创建lstudents用户:
1.1.5 重启虚拟机
1.1.6 配置用户权限
例如,配置lstudents用户具有root权限
修改/etc/sudoers文件,找到下面一行(91行),在root下面添加一行,如下所示:
1.1.7 创建软件路径和安装路径
(1)在/opt目录下创建module、software文件夹
(2)修改module、software文件夹的所有者cd
1.2 安装JDK
1.如果原本有JDK,需要卸载现有JDK
2.下载好JDK,将JDK上传到opt目录下面的software文件夹下面。
3.在Linux系统下的opt目录中查看软件包是否导入成功
看到如下结果:
4.解压JDK到/opt/module目录下
5.配置JDK环境变量
(1)新建/etc/profile.d/my_env.sh文件
添加如下内容
(2)保存后退出
(3)让环境变量生效
6.测试JDK是否安装成功
如果能看到以下结果、则Java正常安装
注意:重启(如果java -version可以用就不用重启)
1.3 安装Hadoop
Hadoop下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/
1.将hadoop-3.1.3.tar.gz上传到opt目录下面的software文件夹下面。
2.进入到Hadoop安装包路径下
3.解压安装文件到/opt/module下面
4.查看是否解压成功
5.将Hadoop添加到环境变量
(1)获取Hadoop安装路径
(2)打开/etc/profile.d/my_env.sh文件
在my_env.sh文件末尾添加HADOOP路径:(shitf+g)
(3)保存后退出
(4)让修改后的文件生效
6.测试是否安装成功
7.重启(如果Hadoop命令不能用再重启)
1.4 Hadoop目录结构
1、查看Hadoop目录结构
2、重要目录
(1)bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本
(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例
第2章Hadoop运行模式
1.Hadoop 官方网站:http://hadoop.apache.org/
2.Hadoop 运行模式包括:本地模式、伪分布式模式以及完全分布式模式。
(1)本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。
(2)伪分布式模式:也是单机运行,但是具备 Hadoop 集群的所有功能,一台服务器模拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。
(3)完全分布式模式:多台服务器组成分布式环境。生产环境使用。
2.1完全分布式运行模式
分析:
1)准备3台客户机(关闭防火墙、静态IP、主机名称)
2)安装JDK,配置环境变量
3)安装Hadoop,配置环境变量
4)配置集群
5)单点启动
6)配置ssh
7)群起并测试集群
2.1.1编写xsync集群分发脚本
(1)需求:循环复制文件到所有节点的相同目录下
(2)需求分析:
- rsync命令原始拷贝:
rsync -av /opt/module lstudents@hadoop102:/opt/
- 期望脚本:
xsync要同步的文件名称 - 期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径),如下,经过查看我们可以选择home/lstudents/bin这个路径。
(3)脚本实现
- 在/home/lstudents/bin目录下创建xsync文件
- 在该文件中编写如下代码
- 修改脚本 xsync 具有执行权限
- 测试脚本,执行以下代码后可以在另外两台服务器相同目录看到xsync文件
- 将脚本复制到/bin中,以便全局调用
- 同步环境变量配置(root所有者)
注意:如果用了sudo,那么xsync一定要给它的路径补全。
- 让另外两台服务器的环境变量生效
2.1.2SSH无密登录配置
1).ssh文件夹下(~/.ssh)的文件功能解释
文件 | 功能解释 |
---|---|
known_hosts | 记录ssh访问过计算机的公钥(public key) |
id_rsa | 生成的私钥 |
id_rsa.pub | 生成的公钥 |
authorized_keys | 存放授权过的无密登录服务器公钥 |
2)生成公钥和私钥
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
3)将公钥拷贝到要免密登录的目标机器上
注意:由于分发脚本中也会给自己分发文件,所以也需要把公钥拷贝发给自己一份。因为需要互相互发文件,hadoop102和hadoop103也同样需要这样配置一遍。如果root用户需要分发文件,那么也需要切换至root用户操作一遍。
2.1.3集群配置
1)集群部署规划
- NameNode和SecondaryNameNode不要安装在同一台服务器
- ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
hadoop101 | hadoop102 | hadoop103 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
2)Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
(1)默认配置文件:
要获取的默认文件 | 文件存放在Hadoop的jar包中的位置 |
---|---|
[core-default.xml] | hadoop-common-3.1.3.jar/core-default.xml |
[hdfs-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 |
可以使用find $HADOOP_HOME -name 'hadoop-common-3.1.3.jar'
命令查找jar包位置,进入jar包所在目录,
然后使用jar -xf hadoop-common-3.1.3.jar --include "core-default.xml"
命令将对应xml文件提取到当前路径下。
(2)自定义配置文件:
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。
3)配置集群
(1)配置核心配置文件--core-site.xml
文件内容如下:
可选项:如果需要在hdf页面上对文件进行操作,可添加如下配置。
(2)配置HDFS配置文件--hdfs-site.xml
文件内容如下:
(3)配置YARN配置文件--yarn-site.xml
文件内容如下:
(4)配置MapReduce配置文件--mapred-site.xml
文件内容如下:
4)在集群上分发配置好的Hadoop配置文件
5)去103和104上查看文件分发情况
2.1.4群起集群
1)配置workers
在该文件中增加如下内容:
- 注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件
2)启动集群
(1)如果集群是第一次启动,需要在hadoop101节点格式化NameNode( 注意: 格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)
(2)启动HDFS
(3)在配置了ResourceManager的节点(hadoop103)启动YARN
(4)Web端查看HDFS的NameNode
- 浏览器中输入:http://hadoop101:9870
- 查看HDFS上存储的数据信息
(5)Web端查看YARN的ResourceManager
- 浏览器中输入:http://hadoop102:8088
- 查看YARN上运行的Job信息
2.1.5配置历史服务器
为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
1)配置mapred-site.xml
在该文件里面增加如下配置。
2)分发配置
3)在hadoop101启动历史服务器
4)查看历史服务器是否启动
5)查看JobHistory
2.1.6配置日志的聚集
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意: 开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。
开启日志聚集功能具体步骤如下:
1)配置yarn-site.xml
在该文件里面增加如下配置。
2)分发配置
3)关闭NodeManager 、ResourceManager和HistoryServer
4)启动NodeManager 、ResourceManage和HistoryServer
5)查看日志
历史服务器地址:
http://hadoop101:19888/jobhistory
2.1.7集群启动/停止方式总结
1)各个模块分开启动/停止(配置ssh是前提)常用
(1)整体启动/停止HDFS
start-dfs.sh/stop-dfs.sh
(2)整体启动/停止YARN
start-yarn.sh/stop-yarn.sh
2)各个服务组件逐一启动/停止
(1)分别启动/停止HDFS组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
(2)启动/停止YARN
yarn --daemon start/stop resourcemanager/nodemanager
2.1.8编写Hadoop集群常用脚本
1)Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver):myhadoop.sh
输入如下内容:
保存后退出,然后赋予脚本执行权限。
2)查看三台服务器Java进程脚本:jpsall
输入如下内容:
保存后退出,然后赋予脚本执行权限
3)分发/home/lstudents/bin目录,保证自定义脚本在三台机器上都可以使用
2.1.9常用端口号说明
端口名称 | Hadoop2.x | Hadoop3.x |
---|---|---|
NameNode内部通信端口 | 8020/9000 | 8020/9000/9820 |
NameNode HTTP UI | 50070 | 9870 |
MapReduce查看执行任务端口 | 8088 | 8088 |
历史服务器通信端口 | 19888 | 19888 |
2.1.10集群时间同步
如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;
如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。
1)需求
找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,生产环境根据任务对时间的准确程度要求周期同步。测试环境为了尽快看到效果,采用1分钟同步一次。
2)时间服务器配置(必须root用户)
(1)查看所有节点ntpd服务状态和开机自启动状态,假定
(2)修改hadoop101的ntp.conf配置文件
[lstudents@hadoop101 ~]$ 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(集群在局域网中,不使用其他互联网上的时间)
为
(c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
(3)修改hadoop102的/etc/sysconfig/ntpd 文件
[lstudents@hadoop101 ~]$ sudo vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
(4)重新启动ntpd服务
[lstudents@hadoop101 ~]$ sudo systemctl start ntpd
(5)设置ntpd服务开机启动
[lstudents@hadoop101 ~]$ sudo systemctl enable ntpd
3)其他机器配置(必须root用户)
(1)关闭所有节点上ntp服务和自启动
(2)在其他机器配置1分钟与时间服务器同步一次
[lstudents@hadoop102 ~]$ sudo crontab -e
编写定时任务如下:
(3)修改任意机器时间
[lstudents@hadoop102 ~]$ sudo date -s "2021-9-11 11:11:11"
(4)1分钟后查看机器是否与时间服务器同步
[lstudents@hadoop102 ~]$ sudo date
评论区