简介:Hadoop是Apache开源组织的一个并行计算开源框架,借助hadoop框架,开发人员可以很容易实现大规模并行分布式计算。
1. 目的
本文主要对完全分布式hadoop集群环境的安装与配置步骤进行说明,描述了如何安装、配置和管理有实际意义的Hadoop集群,其规模可从几个节点的小集群到几千个节点的超大集群。
2.前期准备
2.1节点规划
本次测试的分布式环境为:Master 1台,Slave 1台
| Host Name | IP Address | Node Type | User Name | 配置 |
|---|---|---|---|---|
| Master | 192.168.100.148 | SecondaryNameNode/NameNode/ResourceManager | root/root | 8C/8G |
| Slave | 192.168.100.149 | DataNode/NodeManager | root/root | 8C/8G |
2.2软件版本
| 软件 | 版本 | 必须 | 说明 |
|---|---|---|---|
| JAVA | JDK1.8.x | 是 | 64位版本 |
| 操作系统 | CentOS7.5 | 是 | 64位版本 |
| HADOOP | hadoop-2.10.1.tar.gz | 是 | 官网下载 |
3.Hadoop安装
用户在生产环境按照标准操作需要创建新的用户和用户组,具体创建过程我们这里不做详细介绍,朋友们可自行搜索,我们测试环境默认使用root超级管理员账号。
3.1修改主机名称
分别在两台主机上,按照如下命令修改主机名称,并设置hosts。
设置主机名
[root@dbus-n2 ~]# vim /etc/hostname
在打开的文件中输入dbus-n2,保存并退出,如果没有vim,可用vi代替。另外一台主机操作相同,主机名修改为dbus-n3
设置host
[root@dbus-n2 ~]# vim /etc/hosts
在打开的文件增加入如下列表, IP地址和主机名称根据实际情况书写 \
192.168.100.148 dbus-n2
192.168.100.149 dbus-n3
3.2在各节点配置SSH免密登陆
当客户端向服务端发送链接请求时无需输入密码,即在master节点,执行ssh root@slave不需要输入密码。按照如下命令逐条执行:
[root@dbus-n2 ~]# cd ~
[root@dbus-n2 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:pvR6iWfppGPSFZlAqP35/6DEtGTvaMY64otThWoBTuk root@dbus-n2
The key's randomart image is:
+---[RSA 2048]----+
| . o. |
|.o . . |
|+. o . . o |
| Eo o . + |
| o o..S. |
| o ..oO.o |
| . . ..=*oo |
| ..o *=@+ . |
| .oo=+@+.o.. |
+----[SHA256]-----+
一路回车之后会在用户的根目录生成一个 “.ssh”的文件夹,进入“.ssh”会生成以下几个文件
[root@dbus-n2 ~]# cd .ssh/
[root@dbus-n2 .ssh]# ll
total 16
-rw------- 1 root root 1976 Aug 4 2021 authorized_keys
-rw------- 1 root root 1675 Aug 4 2021 id_rsa
-rw-r--r-- 1 root root 394 Aug 4 2021 id_rsa.pub
-rw-r--r--. 1 root root 1239 Feb 16 13:41 known_hosts
如果authorized_keys文件不存在,可以使用命令进行修改
[root@dbus-n2 .ssh]# cp id_rsa.pub authorized_keys
3.2.1本机配置免密登陆
[root@dbus-n2 ~]$ chmod -R 700 .ssh
[root@dbus-n2 ~]$ cd .ssh
[root@dbus-n2 .ssh]$ chmod 600 authorized_keys
[root@dbus-n2 .ssh]$ ll
total 16
-rwx------. 1 hadoop hadoop 1230 Jan 31 23:27 authorized_keys
-rwx------. 1 hadoop hadoop 1679 Jan 31 23:26 id_rsa
-rwx------. 1 hadoop hadoop 410 Jan 31 23:26 id_rsa.pub
-rwx------. 1 hadoop hadoop 874 Feb 13 19:40 known_hosts
在没有提示输入密码的情况下,通过如下命令验证本机免密是否成功,如果提示输入密码则表示免密失败。
[root@dbus-n2 .ssh]# ssh root@dbus-n2
Last login: Tue Feb 22 16:11:18 2022 from 192.168.10.42
[root@dbus-n2 ~]#
3.2.2主节点与其他节点之间免密登陆
从dbus-n2中把.ssh目录下的authorized_keys分发到各个结点上(会提示输入密码,输入dbus-n3相应的密码即可):
[root@dbus-n2 .ssh]# scp authorized_keys root@dbus-n3:/root/.ssh
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@dbus-n3's password:umber of key(s) added: 1Now try logging into the machine, with: "ssh root@dbus-n3" and check to make sure that only the key(s) you wanted were added.
[root@dbus-n3 .ssh]#
然后各个几点对authorized_keys执行访问权限修改
[root@dbus-n2 ~]# chmod -R 700 .ssh
[root@dbus-n2 ~]# cd .ssh
[root@dbus-n2 .ssh]# chmod 600 authorized_keys
测试从主节点dbus-n2上登陆dbus-n3是否成功,第一次ssh时会提示输入yes/no,输入yes即可:
[root@dbus-n2 ~]# ssh root@dbus-n3
Last login: Fri Feb 23 18:40:10 2018
[root@dbus-n3 ~]#
[root@dbus-n3 ~]$ exit
logout
Connection to dbus-n3 closed.
[root@dbus-n2 ~]$
3.3安装hadoop
下载前面提到的hadoop-2.10.1稳定版。 将稳定版的压缩包下载至/opt目录下,如果没有可通过mkdir /opt创建(多个节点都要分别创建),通过wget命令下载,
[root@dbus-n2 ~]# wget https://archive.apache.org/dist/hadoop/common/stable2/hadoop-2.10.1.tar.gz
解压压缩文件至opt目录
[root@dbus-n2 opt]# tar -zxvf hadoop-2.10.1.tar.gz -C /opt/
查看解压是否成功
[root@dbus-n2 hadoop-2.10.1]# cd /opt/hadoop-2.10.1/
[root@dbus-n2 hadoop-2.10.1]# pwd
/opt/hadoop-2.10.1
[root@dbus-n2 hadoop-2.10.1]# ll
total 8
drwxr-xr-x 2 1000 1000 126 Feb 16 14:00 bin
drwxr-xr-x 3 1000 1000 20 Sep 14 2020 etc
drwxr-xr-x 2 1000 1000 106 Sep 14 2020 include
drwxr-xr-x 3 1000 1000 20 Sep 14 2020 lib
drwxr-xr-x 2 1000 1000 239 Sep 14 2020 libexec
drwxr-xr-x 2 root root 4096 Feb 22 15:09 logs
drwxr-xr-x 3 1000 1000 4096 Feb 18 17:19 sbin
drwxr-xr-x 4 1000 1000 31 Sep 14 2020 share
drwxr-xr-x 2 root root 6 Feb 18 16:37 temp
drwxr-xr-x 3 root root 17 Feb 16 14:15 tmp
通过scp命令将解压目录远程拷贝到dbus-n3服务器
[root@dbus-n2 opt]# scp -r hadoop-2.10.1 root@dbus-n3:/opt/
# 远程到dbus-n3服务器
[root@dbus-n2 opt]# ssh dbus-n3
Last login: Tue Feb 22 14:36:59 2022 from dbus-n2
# 查看/opt目录下是否包含hadoop-2.10.1文件夹
[root@dbus-n3 ~]# ll /opt/
total 0
drwxr-xr-x 10 root root 109 Feb 22 14:50 flink-1.14.3
drwxr-xr-x 11 1000 1000 117 Feb 16 14:16 hadoop-2.10.1
drwxr-xr-x 10 root root 304 Feb 22 14:49 software
drwxr-xr-x. 9 root root 147 Jun 20 2018 VBoxGuestAdditions-5.2.12
drwxr-xr-x 8 root root 76 Feb 16 16:22 zookeeper-3.6.2
3.4设置hadoop环境变量
dbus-n2和dbus-n3都需要操作
[root@dbus-n2 ~]# vim /etc/profile 末尾添加,保证任何路径下可执行hadoop命令
export JAVA_HOME=/usr/local/jdk1.8.0
export HADOOP_HOME=/opt/hadoop-2.10.1
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH
让设置生效
[root@dbus-n2 ~]# source /etc/profile
或者
[root@dbus-n2 ~]# . /etc/profile
此刻,单点的hadoop就已经安装完成,下面的步骤就是集群部署的相关配置。
4 Hadoop集群配置
说明:集群配置之前关闭系统防火墙,具体操作方法大家可自行搜索。
Hadoop相关的配置文件全部在$HADOOP_HOME/etc/hadoop/目录下,接下来的所有配置均在该目录下进行。
4.1修改core-site.xml
[root@dbus-n3 hadoop]# pwd
/opt/hadoop-2.10.1/etc/hadoop
[root@dbus-n3 hadoop]# vim core-site.xml
在<configuration>节点中加入如下配置
<!--指定NameNode的master节点URL地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://dbus-n2:9000</value>
</property>
<!-- Hadoop的运行时文件存放路径,如果不存在此目录需要格式化,可以创建其他目录结构 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-2.10.1/tmp</value>
</property>
注意: <value>hdfs://dbus-n2:9000</value> 此处dbus-n2应与hostname保持一致
4.2修改hadoop-env.sh
将文件中的export JAVA_HOME=${JAVA_HOME}
修改为:
export JAVA_HOME=/usr/local/jdk1.8.0
说明:这里的JDK地址应该是本系统安装的JAVA环境变量地址,也可以单独配置。
4.3修改hdfs-site.xml
在<configuration>节点中加入如下配置
<configuration>
<!-- 配置副本的数量 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permission</name>
<value>false</value>
</property>
</configuration>
说明:dfs.permissions配置为false后,可以允许不要检查权限就生成dfs上的文件,方便倒是方便了,但是你需要防止误删除,请将它设置为true,或者直接将该property节点删除,因为默认就是true。
4.4新建并修改mapred-site.xml
有的版本中没有该xml文件,但是有一个mapred-site.xml.template,可以通过命令复制该文件后改名为mapred-site.xml。
[root@dbus-n3 hadoop]# cp mapred-site.xml.template mapred-site.xml
修改这个新建的mapred-site.xml文件,在<configuration>节点加入如下配置:
<!-- 指定Hadoop的MapReduce运行在YARN环境 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
4.5修改mapred-env.sh
去掉文件中JAVA_HOME前面的注释,修改JDK地址为JAVA环境变量地址
export JAVA_HOME=/usr/local/jdk1.8.0
4.6修改slaves文件
新版本没有slaves文件,3.2之后版本有worker文件,功能与slaves文件功能相同。
修改slaves文件,将里面的localhost删除,添加如下内容:
dbus-n2
dbus-n3
4.7修改yarn-env.sh
去掉文件中JAVA_HOME前面的注释,修改JDK地址为JAVA环境变量地址
export JAVA_HOME=/usr/local/jdk1.8.0
4.8修改yarn-site.xml
在<configuration>节点内加入配置
<!-- NodeManager获取数据方式:shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定YARN的master节点( ResourceManager) 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>dbus-n2</value>
</property>
4.9分发当前配置好的hadoop至其他主机节点
[root@dbus-n2 opt]# ll
total 0
drwxr-xr-x 10 501 games 109 Feb 22 09:47 flink-1.14.3
drwxr-xr-x 12 1000 1000 129 Feb 18 16:37 hadoop-2.10.1
drwxr-xr-x 9 root root 291 Feb 22 14:48 soft
drwxr-xr-x 2 root root 31 Feb 22 10:51 tmp
drwxr-xr-x. 9 root root 147 Jun 20 2018 VBoxGuestAdditions-5.2.12
drwxr-xr-x 8 root root 76 Feb 16 16:18 zookeeper-3.6.2
[root@dbus-n2 opt]# pwd
/opt
[root@dbus-n2 opt]# scp -r hadoop-2.10.1 root@dbus-n3:/opt/
4.10环境变量配置分发
将3.4配置好的环境变量分发给dbus-n3,并使其生效
[root@dbus-n2 opt]# scp -r /etc/profile root@dbus-n3:/etc/
[root@dbus-n2 opt]# ssh dbus-n3
Last login: Thu Feb 24 13:58:35 2022 from dbus-n2
[root@dbus-n3 ~]# source /etc/profile
[root@dbus-n3 ~]# exit
logout
Connection to dbus-n3 closed.
[root@dbus-n2 opt]#
5启动运行
5.1启动集群
对于刚配置完成的集群环境,第一次启动需要对namenode进行格式化
[root@dbus-n2 hadoop-2.10.1]# hdfs namenode -format
如果格式化日志没有任何异常信息,并在输出日志中包含:has been successfully formatted信息,则表示格式化完成。
5.1.1启动hdfs
[root@dbus-n2 sbin]# start-dfs.sh
Starting namenodes on [dbus-n2]
dbus-n2: starting namenode, logging to /opt/hadoop-2.10.1/logs/hadoop-root-namenode-dbus-n2.out
dbus-n3: starting datanode, logging to /opt/hadoop-2.10.1/logs/hadoop-root-datanode-dbus-n3.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /opt/hadoop-2.10.1/logs/hadoop-root-secondarynamenode-dbus-n2.out
5.1.2启动yarn
[root@dbus-n2 sbin]# start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /opt/hadoop-2.10.1/logs/yarn-root-resourcemanager-dbus-n2.out
dbus-n3: starting nodemanager, logging to /opt/hadoop-2.10.1/logs/yarn-root-nodemanager-dbus-n3.out
注意:Namenode和ResourceManger如果不是同一台机器,不能在NameNode上启动 yarn,应该在ResouceManager所在的机器上启动yarn
5.1.3查看进程
## dbus-n2主节点
[root@dbus-n2 hadoop-2.10.1]# jps
23428 SecondaryNameNode
23210 NameNode
23614 ResourceManager
23886 Jps
## dbus-n3工作节点
[root@dbus-n3 hadoop-2.10.1]# jps
3584 DataNode
3711 NodeManager
11135 Jps
5.1.4Web页面访问
打开浏览器在地址栏输入http://dubs-n2:50070后,显示如下页面
5.2启动与停止
1)各个服务组件逐一启动
分别启动hdfs组件: hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
启动yarn: yarn-daemon.sh start|stop resourcemanager|nodemanager
2)各个模块分开启动(配置ssh是前提)常用
start|stop-dfs.sh start|stop-yarn.sh
3)全部启动(不建议使用)
start|stop-all.sh