废话不多说
1.环境介绍
1.1 hadoop版本 3.1.4 (hadoop-3.1.4.tar.gz )
1.2 java版本 1.8 (需要卸载机器上自带openjdk) ,jdk安装步骤省略
1.3 三台虚拟机节点 node1,node2,node3
2.步骤准备
2.1 关闭防火墙
代码语言:javascript复制systemctl stop firewalld
关闭防火墙自启动
systemctl disable firewalld
2.2 上传hadoop包到node1节点的 /app/hadoop 目录下 ,并解压hadoop包
代码语言:javascript复制tar -zxvf hadoop-3.1.4.tar.gz
查看hadoop目录结构
2.3集群规划
1个NameNode ,3个DataNode ,1个SecondaryNameNode ,1个ResourceManager 3个NodeManager
因为只有三台机器,考虑到资源占用情况,将NameNode 、SecondaryNameNode 、 ResourceManager占用资源较多的服务分布到不同的节点上。
node1 | node2 | node3 | |
---|---|---|---|
HDFS | NameNode , DataNode | DataNode | SecondaryNameNode ,DataNode |
YARN | NodeManager | ResourceManager,NodeManager | NodeManager |
2.4 ssh免密设置
进入 当前用户~ 目录
查看 ~ 目录下的.ssh 文件 ,存在则删除(删除以前生成的密钥)
node1,node2,node3分别执行一下指令,来生成各自密钥
代码语言:javascript复制ssh-keygen -t rsa
一直回车即可
执行完毕之后可见每个node节点下 用户 ~ 目录下存在 .ssh 文件。 .ssh下存在公钥 id_rsa.pub和私钥id_rsa
将ndoe1生成的公钥覆盖到authorized_keys
代码语言:javascript复制cp id_rsa.pub authorized_keys
分发密钥 将node2 , node3的公钥分别scp到node1 的~ 目录下,改名为 node2.pub 和node3.pub 作为临时文件(事后删除)
在node1节点上 分别将node2.pub 文件和 node.pub文件追加到 刚才生成的authorized_keys 文件中
代码语言:javascript复制cat ~/node2.pub >> ~/.ssh/authorized_keys
cat ~/node3.pub >> ~/.ssh/authorized_keys
此时的authorized_keys 文件就分别拥有了 node1,node2,node3的公钥
查看authorized_keys
使用scp 分发 authorized_keys 文件到node2,node3 的~/.ssh/ 目录下
分别为每个节点.ssh目录 和 authorized_keys 授权 (注意很重要) .ssh 授权为700 authorized_keys 授权为600
代码语言:javascript复制chmod 600 authorized_keys
chmod 700 .ssh/
(删除node1节点上的 node2.pub 和node3.pub 两个临时文件 )
至此每个节点之间完成相互ssh免密登陆
验证ssh 免密登陆
代码语言:javascript复制ssh root@node2
ssh root@node1
ssh root@node3
若无密码输入,则配置完成
3.hadoop安装
前面准备步骤已经将hadoop压缩包上传到了node1节点下 /app/hadoop 目录下
配置hadoop的环境变量 在 /etc/profile下配置
代码语言:javascript复制export HADOOP_HOME=/app/hadoop/hadoop-3.1.4
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
hadoop version 验证版本
修改node1节点hadoop的配置文件 hadoop配置文件位置 在hadoop 解压目录的/etc/hadoop 下
首先在hadoop-env.sh、mapred-env.sh、yarn-env.sh文件中指定JDK的路径
代码语言:javascript复制export JAVA_HOME=/app/java/jdk1.8 #此处配置你自己的java安装路径即可
配置操作用户 在hadoop-env.sh中配置
代码语言:javascript复制export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"
export YARN_RESOURCEMANAGER_USER="root"
export YARN_NODEMANAGER_USER="root"
配置master节点 修改core-site.xml
代码语言:javascript复制<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/app/hadoop/hadoop-3.1.4/tmp</value>
</property>
</configuration>
配置hdfs-site.xml
代码语言:javascript复制<configuration>
<property>
<name>dfs.name.dir</name>
<value>/usr/hadoop/hdfs/name</value>
<description>namenode上存储hdfs名字空间元数据 </description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/app/hadoop/hadoop-3.1.4/data</value>
<description>datanode上数据块的物理存储位置</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node3:50090</value>
</property>
</configuration>
配置yarn-site.xml
代码语言:javascript复制<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node2</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
配置 mapred-site.xml
代码语言:javascript复制<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
配置workers (3.0以前叫slaves)
代码语言:javascript复制#指定datanode节点
node1
node2
node3
配置之后将node1的环境配置分发到node2,node3
之后再将node1的hadoop 分发到node2, node3相同位置
4.启动
4.1 启动hadoop集群之前需要格式化集群
格式化hdfs(只在首次启动需要格式化)
代码语言:javascript复制hdfs namenode -format 格式化namenode
启动集群
启动 hdfs (node1节点启动)
代码语言:javascript复制sbin/start-dfs.sh
启动yarn (node2节点启动,否则找不到ResourceManager)
代码语言:javascript复制sbin/start-yarn.sh
jps查看各节点的启动进程
node1下的
代码语言:javascript复制 NodeManager
NameNode
DataNode
node2下的
代码语言:javascript复制 DataNode
NodeManager
ResourceManager
node3下的
代码语言:javascript复制SecondaryNameNode
NodeManager
DataNode
查看hadoop管理页面 默认端口3.X以后9870
查看yarn管理页面 默认端口8088
出现上述web管理页面。
至此hadoop三节点集群安装成功。