1. 虚拟机环境准备
- 首先要准备一台虚拟机,CentOS7操作系统,最小化安装,新建用户myHadoop,IP地址是102,记得关闭防火墙,学习阶段容易忘可以禁用(更多细节不在此说明)。
- 安装可能需要依赖,避免后期有些命令无法使用。
sudo yum install -y epel-release sudo yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop
2. 安装JDK
- 解压
tar -zxvf jdk-8u212-linux-x64.tar.gz # 需要记住解压路径
- 配置环境变量
根据profile文件注释,系统不建议我更改此文件,因此根据文档要求我在 /etc/proprofile.d 目录下新建自定义系统文件my_env.sh# 这段代码是profile文件的注释 # It's NOT a good idea to change this file unless you know what you # are doing. It's much better to create a custom.sh shell script in # /etc/profile.d/ to make custom changes to your environment, as this # will prevent the need for merging in future updates.
[myHadoop@hadoop102 profile.d]$ sudo vim my_env.sh # JAVA JAVA_HOME=/opt/module/jdk1.8.0_212 # 将解压路径填入 PATH=$PATH:$JAVA_HOME/bin export PATH JAVA_HOME
- 刷新环境配置文件并验证
[myHadoop@hadoop102 profile.d]$ source /etc/profile [myHadoop@hadoop102 ~]$ 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)
3. hadoop环境安装
-
解压,步骤与Java类似;
-
配置环境变量
# 修改文件别忘了 sudo # JAVA JAVA_HOME=/opt/module/jdk1.8.0_212 PATH=$PATH:$JAVA_HOME/bin # Hadoop HADOOP_HOME=/opt/module/hadoop-3.1.3 PATH=$PATH:$HADOOP_HOME/bin PATH=$PATH:$HADOOP_HOME/sbin export PATH JAVA_HOME HADOOP_HOME
-
刷新配置文件并验证
[myHadoop@hadoop102 profile.d]$ source /etc/profile [myHadoop@hadoop102 ~]$ hadoop version Hadoop 3.1.3
-
修改集群配置文件(所有配置文件都在 /安装路径/hadoop/etc/hadoop目录下 )
- hadoop-env.shexport JAVA_HOME=/opt/module/jdk1.8.0_212
- core-site.xml<!-- 指定NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:9820</value> </property> <!-- 指定hadoop数据的存储目录 <property> <name>hadoop.data.dir</name> <value>/opt/module/hadoop-3.1.3/data</value> </property>
- hdfs-site.xml<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定NameNode数据的存储目录 --> <!-- 本地文件路径已经在core-site.xml文件中配置过 --> <property> <name>dfs.namenode.name.dir</name> <value>file://${hadoop.data.dir}/name</value> </property> <!-- 指定Datanode数据的存储目录 --> <property> <name>dfs.datanode.data.dir</name> <value>file://${hadoop.data.dir}/data</value> </property> <!-- 指定SecondaryNameNode数据的存储目录 --> <property> <name>dfs.namenode.checkpoint.dir</name> <value>file://${hadoop.data.dir}/namesecondary</value> </property> <!-- nn web端访问地址--> <property> <name>dfs.namenode.http-address</name> <value>hadoop102:9870</value> </property> <!-- 2nn web端访问地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:9868</value> </property> </configuration>
- yarn-site.xml<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定ResourceManager的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</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://hadoop102:19888/jobhistory/logs</value> </property> <!-- 日志保存时间 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> </configuration>
- mapred-site.xml<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!—指定MapReduce程序运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop102:10020</value> </property> <!-- 历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop102:19888</value> </property> </configuration>
- Workers,将集群内所有主机名添加hadoop102 hadoop103 hadoop104
-
关闭虚拟机,克隆。将新克隆的虚拟机打开,修改IP地址和主机名。
-
配置SSH免密登录。启动三台虚拟机,在每台虚拟机上都要做如下操作:
[myHadoop@hadoop102 ~]$ cd ~/.ssh/ # 若没有.ssh目录,先输入 ssh hadoop102 生成该目录 [myHadoop@hadoop102 .ssh]$ ssh-keygen -t rsa # 敲四下回车生成密钥对 [myHadoop@hadoop102 .ssh]$ ssh-copy-id hadoop102 # 将密钥对发给集群内所有节点,包括自己 [myHadoop@hadoop102 .ssh]$ ssh-copy-id hadoop103 [myHadoop@hadoop102 .ssh]$ ssh-copy-id hadoop104
-
在主节点hadoop102上格式化集群
[myHadoop@hadoop102 hadoop-3.1.3]$ ./bin/hdfs namenode -format
出现该语句即格式化成功! -
启动集群
在NameNode主节点hadoop102启动hdfs服务,在ResourceManager主节点hadoop103上启动yarn服务。[myHadoop@hadoop102 hadoop-3.1.3]$ start-dfs.sh # 注意节点不同 [myHadoop@hadoop103 hadoop-3.1.3]$ start-yarn.sh # 注意节点不同
-
使用Java命令查看进程
[myHadoop@hadoop102 hadoop-3.1.3]$ jps [myHadoop@hadoop103 hadoop-3.1.3]$ jps [myHadoop@hadoop104 hadoop-3.1.3]$ jps
hadoop102上应出现如下四个进程(进程号可能不同)
hadoop103上应出现如下四个进程(进程号可能不同)
hadoop104上应出现如下四个进程(进程号可能不同)
问题总结
搭建好集群后做一些总结
- 集群规划
hadoop102 | hadoop103 | hadoop104 | |
---|---|---|---|
NameNode | √ | ||
DataNode | √ | √ | √ |
SecondayNameNode | √ | ||
ResourceManager | √ | ||
NodeManger | √ | √ | √ |
这样分配的意义是为了避免单节点负载过重。
2. 注意以下基础问题:防火墙没关闭、主机名称配置错误、IP地址配置错误、ssh没有配置好、配置文件修改不细心、配置环境变量后没有刷新
3. 若发现 NameNode 和 DataNode 总有一个会宕机,应:
- 关闭集群;
- 删除hadoop目录下生成的 data 和 logs 目录;
- 仔细检查步骤2中可能出现的问题;
- 重新格式化,重新启动集群