Hadoop运行环境搭建
学习Hadoop的第一步一定是环境搭建,但是安装不是目的,通过安装认识Hadoop才是目的。
(一)部署模式
- 单机 (Standalone):默认情况下,Hadoop被配置成以非分布式模式运行的一个独立Java进程。这对调试非常有帮助。单机情况下,文件存储在Linux中!
- 伪分布式(Pesudo Distributed):Hadoop可以在单节点上以所谓的伪分布式模式运行,此时每一个Hadoop守护进程都作为一个独立的Java进程运行。文件存储在HDFS中
- 集群 (Cluster):会将N个节点组成Hadoop集群,主节点和从节点分开部署在不同的机器上
- HA高可用 (High Available):主要用于生产环境部署,即高可用(7*24小时不中断服务)。解决hadoop的单点故障
这里我们搭建的是完整的集群模式。
(二)安装前准备
因为Hadoop是由java编写的,他的运行一定离不开jdk,又因为hadoop是分布式的需要多个节点去操作,这时一定要保证多个节点的时间同步,我们首先来配置jdk和时钟同步。
1、jdk的安装
- 卸载现有jdk
- 查询是否安装java软件:
[root@node-1 ~]$ rpm -qa | grep java
- 如果安装的版本低于1.8,卸载该jdk,将第一步查出的jdk卸载。
[root@node-1 ~]$ rpm -e --nodeps 软件包
- 对用户offcn增加权限
[root@node-1 offcn]# visudo
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
%offcn ALL=(ALL) NOPASSWD: ALL
- 切换用户offcn,在/opt/下创建目录
[offcn@node-1 ~]$ echo "softwaress apps" | xargs sudo mkdir
[offcn@node-1 ~]$ sudo chmod -R 777 /opt/
- 用文件传输工具将jdk导入到softwaress文件夹下面
- 在/home/offcn目录中查看软件包是否导入成功
[offcn@node softwaress]$ pwd
/opt/softwaress
[offcn@node softwaress]$ ll
total 190444
-rw-rw-r--. 1 offcn offcn 195013152 May 11 2022 jdk-8u212-linux-x64.tar.gz
[offcn@node softwaress]$
- 解压jdk到/opt/app目录下
[offcn@node-1 softwares]$ tar -zxvf jdk-8u212-linux-x64.tar.gz -C ../apps/
- 配置jdk环境变量
- 先获取jdk路径:
[offcn@node-1 jdk-1.8]$ pwd
/opt/apps/jdk-1.8
- 编辑内容/etc/profile
[offcn@node-1 softwares]$ sudo vim /etc/profile
# jdk-1.8
export JAVA_HOME=/opt/apps/jdk-1.8
export PATH=$PATH:$JAVA_HOME/bin
- 让修改后的文件生效:
[offcn@node-1 jdk-1.8]$ source /etc/profile
- 测试jdk是否安装成功
[offcn@node jdk-1.8]$ java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
[offcn@node jdk-1.8]$
2、时钟同步策略
时间同步的方式:在集群中找一台机器,作为时间服务器,集群中其他机器与这台机器定时的同步时间,比如,每隔十分钟,同步一次时间。
配置时间同步实操:
- 时间服务器配置
- 检查ntp是否安装,若没有安装则使用yum install -y ntp进行安装
[offcn@node-1 ~]$sudo rpm -qa|grep ntp
ntpdate-4.2.6p5-28.el7.centos.x86_64
python-ntplib-0.3.2-1.el7.noarch
fontpackages-filesystem-1.44-8.el7.noarch
ntp-4.2.6p5-28.el7.centos.x86_64
[offcn@node-1 ~]$ sudo systemctl start ntpd
- 执行:
[offcn@node-1 ~]$ sudo systemctl enable ntpd
[offcn@node-1 ~]$ crontab -e
#编写脚本
*/10 * * * * sudo /usr/sbin/ntpdate -u ntp.aliyun.com
- 修改任意机器时间
[offcn@node-2 ~]$ sudo date -s "2008-08-08 08:08:08"
- 十分钟后查看机器是否与时间服务器同步
[offcn@node-2 ~]$ date
(三)安装配置
1、安装Hadoop
Hadoop下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.2.1/
(1)将hadoop-3.2.1.tar.gz 上传到/opt/softwaress
[offcn@node-1 softwares]$ pwd
/opt/softwaress
[offcn@node-1 softwares]$ ll
总用量 531948
-rw-r--r--. 1 root root 359196911 3月 8 11:00 hadoop-3.2.1.tar.gz
-rw-r--r--. 1 root root 185515842 3月 5 16:22 jdk-8u144-linux-x64.tar.gz
(2)将hadoop-3.2.1.tar.gz解压到/opt/apps
[offcn@node-1 softwares]$ tar -zxvf hadoop-3.2.1.tar.gz -C ../apps/
[offcn@node-1 softwares]$ ll
-rw-r--r--. 1 root root 359196911 3月 8 11:00 hadoop-3.2.1.tar.gz
(3)将Hadoop添加到环境变量
[offcn@node-1 apps]$ sudo vim /etc/profile
# hadoop-3.2.1
export HADOOP_HOME=/opt/apps/hadoop-3.2.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
(4)让修改后的文件生效
[offcn@node-1 apps]$ source /etc/profile
(5)测试是否安装成功
[offcn@node-1 apps]$ hadoop version
Hadoop 3.2.1
2、集群规划
node-1 | node-2 | node-3 | |
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
3、修改配置文件
(1)hadoop-env.sh
[offcn@node-1 hadoop]$ cd $HADOOP_HOME/etc/hadoop
[offcn@node-1 hadoop]$ pwd
/opt/apps/hadoop-3.2.1/etc/hadoop
[offcn@node-1 hadoop]$ vim hadoop-env.sh
# Java的环境变量
export JAVA_HOME=/opt/apps/jdk-1.8
(2)core-site.xml
[offcn@node-1 hadoop]$ vim core-site.xml
文件内容如下:
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node-1:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/apps/hadoop-3.2.1/datas</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为offcn -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>offcn</value>
</property>
<!-- 配置该offcn(superUser)允许通过代理访问的主机节点 -->
<property>
<name>hadoop.proxyuser.offcn.hosts</name>
<value>*</value>
</property>
<!-- 配置该offcn(superUser)允许通过代理用户所属组 -->
<property>
<name>hadoop.proxyuser.offcn.groups</name>
<value>*</value>
</property>
<!-- 配置该offcn(superUser)允许通过代理的用户-->
<property>
<name>hadoop.proxyuser.offcn.users</name>
<value>*</value>
</property>
(3)hdfs-site.xml
[offcn@node-1 hadoop]$ vim hdfs-site.xml
文件内容如下:
<!-- secondaryNamenode web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node-3:9868</value>
</property>
(4)yarn-site.xml
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node-2</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.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://node-1:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<!-- 防止和Doris的backend端口冲突 -->
<property>
<name>yarn.nodemanager.localizer.address</name>
<value>0.0.0.0:8040</value>
</property>
(5)mapred-site.xml
[offcn@node-1 hadoop]$ vim mapred-site.xml
文件内容如下:
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>node-1:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node-1:19888</value>
</property>
(6)配置workers(去掉localhost,添加如下内容)
[offcn@node-1 hadoop]$ vim workers
node-1
node-2
node-3
远程分发:
cd /opt/apps/
scp -r hadoop-3.2.1/ node-2:$PWD
scp -r hadoop-3.2.1/ node-3:$PWD
sudo scp /etc/profile node-2:/etc/
sudo scp /etc/profile node-3:/etc/
source /etc/profile
hadoop version
(四)集群启停及测试
1、单点启动
(1)如果集群是第一次启动,需要格式化NameNode(格式化只进行一次!!!)
在格式化时,要保证一切正常,不要出现错误、异常、或者提示让选择yes或者no;如果出现错误等情况,把所有的配置检查一遍确认无误后,将hadoop安装目录下的data、pid、logs目录删除重新格式化。
[offcn@node-1 hadoop-3.2.1]$ hadoop namenode -format
- 在node-1上启动NameNode
hdfs --daemon start namenode
hdfs --daemon start datanode
hdfs --daemon start secondarynamenode
(5)启动yarn进程
yarn --daemon start resourcemanager
yarn --daemon start nodemanager
mapred --daemon start historyserver
2、集群群起启动
(1)如果集群是第一次启动,需要格式化NameNode(格式化只进行一次!!!),操作方式详见单点启动。
(2)启动HDFS
[offcn@node-1 hadoop-3.2.1]$ sbin/start-dfs.sh
Starting namenodes on [node-1]
Starting datanodes
Starting secondary namenodes [node-3]
(3)在配置了ResourceManager的节点(node-2)启动YARN
[offcn@node-2 hadoop-3.2.1]$ sbin/start-yarn.sh
Starting resourcemanager
Starting nodemanagers
3、查看Web界面
(1)查看Hdfs的Web界面
浏览器输入地址:http://node-1:9870/