环境准备
主机名 | IP | 系统 | HDFS |
---|---|---|---|
master | 192.168.154.135 | CentOS 7 | NameNode + DataNode 主节点 |
slave1 | 192.168.154.139 | CentOS 7 | DataNode |
slave2 | 192.168.154.140 | CentOS 7 | DataNode +SecondaryNamenode |
部署过程
一、基础环境配置
在3台服务器上面操作:
1.防火墙关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce 0 systemctl stop firewalld systemctl disable firewalld
2.修改主机名
hostnamectl set-hostname master && bash hostnamectl set-hostname slave1 && bash hostnamectl set-hostname slave2 && bash
3.配置/etc/hosts文件
vi /etc/hosts
#末尾添加:
192.168.154.135 master
192.168.154.139 slave1
192.168.154.140 slave2
在master上面操作:
4.免密登陆认证
1. 使用rsa加密技术,生成公钥和私钥。一路回车即可
cd ~ ssh-keygen -t rsa
2.推送公钥
ssh-copy-id master ssh-copy-id slave1 ssh-copy-id slave2
3. 进行验证
ssh master
软件部署
1.jdk的安装
rpm -qa | grep jdk #如果有,请卸载 rpm -e xxx --nodeps #将查询到的内置jdk代替xxx
2.上传jdk1.8
将jdk-8u221-linux-x64.tar.gz上传到linux环境
3.解压jdk到/usr/local下
tar -zxvf jdk-8u221-linux-x64.tar.gz -C /opt/apps
4.更名java
cd /usr/local mv jdk1.8.0_221/ java
5.配置jdk的环境变量
sed -i '$aJAVA_HOME=/usr/local/java\nCLASSPATH=$JAVA_HOME/lib\nPATH=$PATH:$JAVA_HOME/bin\nexport PATH JAVA_HOME CLASSPATH' /etc/profile
6.更新环境变量
source /etc/profile
7.验证jdk环境
java -version
三、Hadoop部署
1.上传并解压Hadoop
unzip hadoop-2.7.2.zip
2.配置hadoop的环境变量
vim /etc/profile
#在最后加入以下两行
export HADOOP_HOME=/usr/local/hadoop-2.7.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
3.使当前配置生效
source /etc/profile
4.完全分布式的相关文件的配置
1.配置core-site.xml文件
cd /usr/local/hadoop-2.7.2/etc/hadoop vim core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-2.7.2/tmp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
2.配置hdfs-site.xml文件
vim hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///usr/local/hadoop-2.7.2/tmp/namenode </value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///usr/local/hadoop-2.7.2/tmp/datanode </value>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>slave2:50090</value>
</property>
</configuration>
3.配置mapred-site.xml文件
vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
4.配置hadoop-site.xml文件
vim yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8089</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
<description>YARN集群主节点所在节点</description>
</property>
</configuration>
5.配置hadoop-env.sh脚本文件和yarn-env.sh文件
vim hadoop-env.sh
#修改这2处:
export JAVA_HOME=/usr/local/java
export HADOOP_CONF_DIR=/usr/local/hadoop-2.7.2/etc/hadoop
vim yarn-env.sh
export JAVA_HOME=/usr/local/java
6.配置slaves文件,此文件用于指定datanode守护进程所在的机器节点主机名
vim slaves
master
slave1
slave2
5.配置另外两台机器,使用scp
cd /usr/local scp -r ./hadoop-2.7.2 slave1:/usr/local scp -r ./hadoop-2.7.2 slave2:/usr/local
6.同步/etc/profile到slave节点上
scp /etc/profile slave1:/etc/ scp /etc/profile slave2:/etc/
7. slave节点上的同步jdk。
scp -r ./java slave1:/usr/local scp -r ./java slave2:/usr/local
8.检查是否同步了/etc/hosts文件
scp /etc/hosts slave1:/etc/ scp /etc/hosts slave2:/etc/
9.格式化NameNode
1.在master机器上运行命令
hdfs namenode -format
2.格式化的相关信息解读
1. 生成一个集群唯一标识符:clusterid
2. 生成一个块池唯一标识符:BlockPoolId
3. 生成namenode进程管理内容(fsimage)的存储路径: 默认配置文件属性hadoop.tmp.dir指定的路径下生成dfs/name目录
4. 生成镜像文件fsimage,记录分布式文件系统根路径的元数据
5. 其他信息都可以查看一下,比如块的副本数,集群的fsOwner等
10.启动集群相关命令
1. 启动脚本
-- start-dfs.sh :用于启动hdfs集群的脚本
-- start-yarn.sh :用于启动yarn守护进程
-- start-all.sh :用于启动hdfs和yarn
2. 关闭脚本
-- stop-dfs.sh :用于关闭hdfs集群的脚本
-- stop-yarn.sh :用于关闭yarn守护进程
-- stop-all.sh :用于关闭hdfs和yarn
3. 单个守护进程脚本
-- hadoop-daemons.sh :用于单独启动或关闭hdfs的某一个守护进程的脚本
-- hadoop-daemon.sh :用于单独启动或关闭hdfs的某一个守护进程的脚本
-- yarn-daemons.sh :用于单独启动或关闭hdfs的某一个守护进程的脚本
-- yarn-daemon.sh :用于单独启动或关闭hdfs的某一个守护进程的脚本
11.jps查看进程
master进程:
slave1 进程:
slave2 进程: