一、搭建集群
1、准备服务器(这里以我的3台Centos7为例)
- 1个主节点:Carlota1(192.168.33.21),
- 2个子节点:Carlota2(192.168.33.22),Carlota3(192.168.33.23)
2、配置主节点名
在主节点命令行输入: vi /etc/sysconfig/network 添加内容:
代码语言:javascript复制NETWORKING=yes
HOSTNAME=Carlota1
3、配置两台子节点名
分别在子节点命令行输入: vi /etc/sysconfig/network 添加内容:
代码语言:javascript复制NETWORKING=yes
HOSTNAME=Carlota2
代码语言:javascript复制NETWORKING=yes
HOSTNAME=Carlota3
4、配置hosts
打开主节点的hosts文件,注释掉 将文件的前两行(当前主机的信息),并在文件中添加所有hadoop集群的主机信息。
在命令行输入: vi /etc/hosts ,添加3台服务器的节点名信息:
代码语言:javascript复制192.168.33.21 Carlota1
192.168.33.22 Carlota2
192.168.33.23 Carlota3
保存之后,分别将主节点的hosts分别拷贝到其他两个子节点:
- scp /etc/hosts root@192.168.33.22:/etc/
- scp /etc/hosts root@192.168.33.23:/etc/
分别执行 /bin/hostname hostsname 使更改生效,(例如:Carlota1上执行 /bin/hostsname Carlota1,使之生效。)(重启可以代替/bin/hostname hostsname命令)
5、关闭防火墙
- 查看防火墙状态 :firewall-cmd --state
- 停止firewall :systemctl stop firewalld.service
- 禁止firewall开机启动:systemctl disable firewalld.service
6、配置ssh无密码访问(使每个节点上的/root/.ssh/authorized_keys文件中都包含所有的节点生成的公钥内容)
- 生成公钥密钥对:在每个节点上分别执行命令行输入:ssh-keygen -t rsa , 一直按回车或Yes直到生成结束(执行结束之后每个节点上的/root/.ssh/目录下生成了两个文件 id_rsa 和 id_rsa.pub其中前者为私钥,后者为公钥)
- 在主节点上执行命令行输入:cp id_rsa.pub authorized_keys
- 将两个子节点的公钥拷贝到主节点上,分别在两个子节点上执行:
scp /root/.ssh/id_rsa.pub root@Carlota1:/root/.ssh/id_rsa_Carlota2.pub
scp /root/.ssh/id_rsa.pub root@Carlota1:/root/.ssh/id_rsa_Carlota3.pub
- 在主节点上,将拷贝过来的两个公钥合并到authorized_keys文件中
cat id_rsa_Carlota2.pub>> authorized_keys
cat id_rsa_Carlota3.pub>> authorized_keys
- 将主节点的authorized_keys文件分别替换子节点的authorized_keys文件
scp authorized_keys root@Carlota2:/root/.ssh/
scp authorized_keys root@Carlota3:/root/.ssh/
- 最后测试是否配置成功:在Carlota1上分别执行,ssh Carlota2,ssh Carlota3 能正确跳转到两台子节点的操作界面即可
二、Hadoop集群配置
7、准备工作 下载好相应的Hadoop与JDK版本
8、分别上传JDK与Hadoop的tar.gz文件到三台服务器 这里使用windows下的文件传输软件进行上传(其中我这里上传路径分别为/usr/local/java/和/usr/local/apps/)
9、安装配置JAVA
- tar -zxvf jdk-8u251-linux-x64.tar.gz
- mv jdk1.8.0_251 jdk1.8
配置环境变量vi /etc/profile 添加以下内容
代码语言:javascript复制#JAVA
export JAVA_HOME=/usr/local/java/jdk1.8
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
- source /etc/profile
测试是否安装成功:java -version
10、安装hadoop
- tar -zxvf hadoop-3.2.1.tar.gz
配置环境变量vi /etc/profile 添加以下内容
代码语言:javascript复制#Hadoop
export HADOOP_HOME=/usr/local/apps/hadoop-3.2.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- source /etc/profile
11、配置Hadoop /sbin下 将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数
代码语言:javascript复制#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
start-yarn.sh,stop-yarn.sh顶部也需添加以下参数:
代码语言:javascript复制#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
12、配置Hadoop /etc下 需要修改的有以下几个文件:
- hadoop-env.sh
- yarn-env.sh
- core-site.xml
- hdfs-site.xml
- mapred-site.xml
- yarn-site.xml
- workers (Hadoop3.0以前的版本叫做slaves)
(1)、hadoop-env.sh和yarn-env.sh 分别添加JAVA_HOME路径到hadoop-env.sh和yarn-env.sh中
代码语言:javascript复制export JAVA_HOME=/usr/local/java/jdk1.8
(2)、core-site.xml 添加如下代码
代码语言:javascript复制<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Carlota1:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/temp</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
其中/usr/temp文件夹需要新建! (3)、hdfs-site.xml 添加如下代码:
代码语言:javascript复制<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Carlota1:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.web.ugi</name>
<value>supergroup</value>
</property>
</configuration>
其中/usr/dfs/name与/usr/dfs/data文件夹需要新建!
(4)、mapred-site.xml(没有mapred-site.xml文件可以将mapred-site.xml.template进行重命名为mapred-site.xml)
代码语言:javascript复制<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>Carlota1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Carlota1:19888</value>
</property>
</configuration>
(5)、yarn-site.xml 添加如下代码:
代码语言:javascript复制<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>Carlota1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>Carlota1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>Carlota1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>Carlota1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>Carlota1:8088</value>
</property>
</configuration>
(6)、workers 将原内容修改为
代码语言:javascript复制Carlota2
Carlota3
拷贝hadoop安装文件到子节点
代码语言:javascript复制scp -r etc/hadoop root@Carlota2:/usr/local/apps/hadoop-3.2.1/etc
scp -r etc/hadoop root@Carlota3:/usr/local/apps/hadoop-3.2.1/etc
13、启动Hadoop集群
- 格式化主节点的namenode:./bin/hdfs namenode -format
- 主节点上在hadoop目录下执行:./sbin/start-all.sh
主节点上jps进程如下:
子节点上jps进程如下:
hadoop集群配置成功!!!