我使用的安装文件是 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安装路径配置】
# 查询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
- core-site.xml
[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脚本
[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
start-dfs.sh,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 服务是否已经启动:
[root@tcloud ~]# jps 27346 DataNode 27603 SecondaryNameNode 29398 Jps 27198 NameNode
方式二:查看 Web UI 界面
根据配置的地址进行访问:
<property> <name>dfs.namenode.http-address</name> <value>tcloud:9870</value> </property>
至此,Hadoop单机版安装部署成功。