我使用的安装文件是 hadoop-3.1.3.tar.gz ,以下内容均以此版本进行说明。
1.前置条件
Hadoop 的运行依赖 jdk 我安装的 openjdk11【这里有个很深的坑,随后会说明】。
[root@tcloud ~]# java -version
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
2.配置免密登录
Hadoop 组件之间需要基于 SSH 进行通讯。
2.1 配置映射
配置 ip 地址和主机名映射:==很关键==通过ifconfig查询本机的ip地址,这个地方没有配置正确的话节点会有问题。
vim /etc/hosts
# 文件末尾增加 通过ifconfig查询到的ip地址
xxx.xx.x.x tcloud tcloud
2.2 生成公私钥
执行下面命令行生成公匙和私匙:
[root@tcloud ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
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:BtWqdvRxf90QPhg5p2OOIBwgEGTu4lxAd92icFc5cwE root@tcloud
The key's randomart image is:
+---[RSA 2048]----+
|+*...o. +Eo... |
|+ .o...= =..+ o |
| o o.+...+ B . |
|. . .o.+ . * + |
|.. . +So * o oo|
|+ . o.. o . . +|
| o . . . |
| |
| |
+----[SHA256]-----+
2.3 授权
进入 /root/.ssh/ 目录下,查看生成的公匙和私匙,并将公匙写入到授权文件:
[root@tcloud .ssh]# ll
total 16
-rw------- 1 root root 786 Jul 6 11:57 authorized_keys
-rw-r--r-- 1 root root 0 Jul 5 11:06 config
-rw-r--r-- 1 root root 0 Jul 5 11:06 iddummy.pub
-rw------- 1 root root 1679 Jul 27 17:42 id_rsa
-rw-r--r-- 1 root root 393 Jul 27 17:42 id_rsa.pub
-rw-r--r-- 1 root root 1131 Jul 6 13:31 known_hosts
# 写入公匙到授权文件
[root@tcloud .ssh]# cat id_rsa.pub >> authorized_keys
[root@tcloud .ssh]# chmod 600 authorized_keys
3.HDFS环境搭建
3.1 解压
# 解压安装包并移动到/usr/local/下
tar -zxvf hadoop-3.1.3.tar.gz
mv ./hadoop-3.1.3 /usr/local/
3.2 配置环境变量
配置环境变量的方法比较多,这里统一将环境变量放在 /etc/profile.d/my_env.sh 内。
# 配置环境变量:
vim /etc/profile.d/my_env.sh
# 添加 Hadoop的PATH要配置上bin和sbin
export HADOOP_HOME=/usr/local/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
# 使得配置的环境变量立即生效:
# 首先是要赋权限【只操作一次就行】
chmod +x /etc/profile.d/my_env.sh
source /etc/profile.d/my_env.sh
3.3 修改Hadoop配置
进入 ${HADOOP_HOME}/etc/hadoop/ 目录下,修改以下配置:
- hadoop-env.sh 【JDK安装路径配置】
```shell查询jdk路径
[root@tcloud ~]# echo $JAVA_HOME
/usr/local/java
[root@tcloud ~]# vim /usr/local/hadoop-3.1.3/etc/hadoop/hadoop-env.sh
添加jdk路径
export JAVA_HOME=/usr/local/java
2. core-site.xml
```bash
[root@tcloud ~]# vim /usr/local/hadoop-3.1.3/etc/hadoop/core-site.xml
<configuration>
<!--指定 namenode 的 hdfs 协议文件系统的通信地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://tcloud:8020</value>
</property>
<!--指定 hadoop 存储临时文件的目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
<!-- 设置用户及代理 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<!-- 不开启权限检查 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
</configuration>
- hdfs-site.xml
[root@tcloud ~]# vim /usr/local/hadoop-3.1.3/etc/hadoop/hdfs-site.xml
<configuration> <!--由于我们这里搭建是单机版本,所以指定 dfs 的副本系数为 1--> <property> <name>dfs.replication</name> <value>1</value> </property> <!-- 开启webhdfs --> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <!-- 配置namenode和datanode --> <property> <name>dfs.namenode.http-address</name> <value>tcloud:9870</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>tcloud:9868</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///${hadoop.tmp.dir}/dfs/name1,file:///${hadoop.tmp.dir}/dfs/name2</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value> </property> </configuration>
- slaves 特别注意:hadoop3.0 以后 slaves 变为 workers。
[root@tcloud ~]# vim /usr/local/hadoop-3.1.3/etc/hadoop/workers # 配置所有从属节点的主机名或 IP 地址,由于是单机版本,所以指定本机即可【原文件配置的是localhost】: tcloud
3.4 关闭防火墙
不关闭防火墙可能导致无法访问 Hadoop 的 Web UI 界面【使用云服务器还需要在安全组内开启端口】:# 查看防火墙状态 [root@tcloud hadoop]# firewall-cmd --state not running # 如果是开启状态,关闭防火墙: [root@tcloud hadoop]# systemctl stop firewalld.service
3.5 初始化
第一次启动 Hadoop 时需要进行初始化,进入 ${HADOOP_HOME}/bin/ 目录下,执行以下命令:[root@tcloud bin]# ./hdfs namenode -format
3.6 修改启动和停止shell脚本
start-dfs.sh,stop-dfs.sh 这两个文件顶部添加以下参数:[root@tcloud hadoop]# vim /usr/local/hadoop-3.1.3/sbin/start-dfs.sh [root@tcloud hadoop]# vim /usr/local/hadoop-3.1.3/sbin/stop-dfs.sh
HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
3.7 启动HDFS
进入 ${HADOOP_HOME}/sbin/ 目录下,启动 HDFS:[root@tcloud sbin]# ./start-dfs.sh
3.8 验证是否启动成功
方式一:执行 jps 查看 NameNode、SecondaryNameNode 和 DataNode 服务是否已经启动:
方式二:查看 Web UI 界面[root@tcloud ~]# jps 27346 DataNode 27603 SecondaryNameNode 29398 Jps 27198 NameNode
根据配置的地址进行访问:
至此,Hadoop单机版安装部署成功。<property> <name>dfs.namenode.http-address</name> <value>tcloud:9870</value> </property>