Hadoop的安装与配置——搭建完全分布式集群

2022-12-01 08:51:52 浏览数 (1)

一、搭建集群

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、关闭防火墙

  1. 查看防火墙状态 :firewall-cmd --state
  2. 停止firewall :systemctl stop firewalld.service
  3. 禁止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
  • 将两个子节点的公钥拷贝到主节点上,分别在两个子节点上执行:
代码语言:javascript复制
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文件中
代码语言:javascript复制
cat id_rsa_Carlota2.pub>> authorized_keys
cat id_rsa_Carlota3.pub>> authorized_keys
  • 将主节点的authorized_keys文件分别替换子节点的authorized_keys文件
代码语言:javascript复制
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集群配置成功!!!

0 人点赞