Centos-7.5安装完全分布式Hadoop教程

257 阅读2分钟

1.硬件配置

3台 4核 16G 虚机,内存大小180GB

2.版本选择

Hadoop 3.3.4+openjdk1.8.0_352

2.1 jdk下载安装

JDK 环境配置 这里我选择的是openjdk,直接通过yum命令下载的。

1.搜索yum库中的jdk版本

yum search java|grep jdk

2.yum命令安装JDK 1.8

yum install java-1.8.0-openjdk

3.java -version 查看是否安装成功

image.png 准备配置环境变量,通过yum下载后,默认安装路径为 /usr/lib/jvm

4.ls /usr/lib/jvm

image.png 这里看到我们使用的版本是java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64(建议copy下,后面有用)

5. vi /etc/profile 修改配置文件

在文件末尾insert如下内容

#set java environment
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64
JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64/jre
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME  CLASSPATH  PATH

ctrl+c退出,shift+z快捷保存,或者:wq

6. source /etc/profile使其生效

7.echo命令查看安装状态

echo $JAVA_HOME echo $PATH echo $CLASSPATH

image.png

2.2 Hadoop下载安装

2.21 hadoop安装包下载

官网下载Hadoop:hadoop.apache.org/ 这里我用的是hadoop 3.3.4 image.png 点击binary,进入下载页面 image.png

准备好软件安装包之后,开始基础环境配置。 本次环境使用三台虚机,一个namenode,3个datanode(除两个从节点外,namenode所在虚机本身也可以作为datanode,因此是一主三从)。为方便管理,首先改下这三台虚机的主机名称。 在namenode主节点执行

sudo hostnamectl set-hostname master

随后设置每台主机与IP名的对应关系

sudo vi /etc/hosts

若源文件中最上方有127.0.0.1 要先删除,设置如下并保存。

image.png

image.png 主节点设置完毕。 从节点worker01重复上述操作 执行

sudo hostnamectl set-hostname worker01

完成后设置主机与IP名的对应关系 image.png

从节点worker02 重复上述操作

sudo hostnamectl set-hostname worker02

image.png

hadoop一般的操作用户是普通用户而不是超管用户,因此首先创建一个hadoop普通用户。

使用命令useradd hduser 完成后可以看到home目录下多出普通用户

image.png 为用户设置密码passwd hduser

image.png 分配权限 使用chmod  目标用户:目标群组   文件夹名字    进行拥有者和分组修改 chmod 777 hduser:root /home/hduser

image.png

在hduser下新建两个目录,software放置安装包,bigdata放置软件。

image.png 将Hadoop压缩包,解压缩到"/home/hduser/bigdata"目录(用户主目录/bigdata)下 : 主节点进入到我们之前放置软件的安装位置 tar -zxvf ~/software/hadoop-3.3.4.tar.gz 打开"/etc/profile"配置文件,配置hadoop环境变量(注意,标点符号全都要是英文半角):

export HADOOP_HOME=/home/hduser/bigdata/hadoop-3.3.4
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native"

source /etc/profile 使其生效,切换到hduser cd ~/bigdata/hadoop-3.3.4/etc/hadoop

1.配置hadoop-env.sh文件:

vi hadoop-env.sh 找到export JAVA_HOME这一栏,修改为 export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64 配置完成后可查看到当前hadoop版本

image.png

2.配置core-site.xml

vi core-site.xml 找到其中的""标签,在其中指定各个配置参数,如下所示:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:8020/</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hduser/bigdata/hadoop-3.3.4/dfs/tmp</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hduser.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hduser.groups</name>
        <value>*</value>
    </property>
</configuration>
3.配置hdfs-site.xml文件:

vi hdfs-site.xml 找到其中的""标签,在其中指定各个配置参数,如下所示:

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/hduser/bigdata/hadoop-3.3.4/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/hduser/bigdata/hadoop-3.3.4/dfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.datanode.max.transfer.threads</name>
        <value>4096</value>
    </property>
</configuration>
4.配置mapred-site.xml文件:

vi mapred-site.xml 找到其中的""标签,在其中指定各个配置参数,如下所示:

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.application.classpath</name>
        <value>$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*</value>
    </property>
</configuration>
5.配置yarn-site.xml文件:

vi yarn-site.xml 找到其中的""标签,在其中指定各个配置参数,如下所示:

<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.hostname</name>
        <value>master</value>
    </property>
</configuration>

以上完成配置

3. 配置SSH免密登录

SSH无密登录原理: namenode作为客户端,要实现无密码公钥认证,连接到服务端datanode上时,需要在namenode上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到datanode上。当namenode通过ssh连接datanode时,datanode就会生成一个随机数并用namenode的公钥对随机数进行加密,并发送给namenode。namenode 收到加密数之后再用私钥进行解密,并将解密数回传给datanode,datanode确认解密数无误之后就允许namenode进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将namenode公钥复制到datanode上。

3.1 在每台机器上,执行如下命令:

$ cd ~
$ ssh localhost
$ ssh exit	             # 记得最后通过这个命令退出ssh连接

3.2 在namenode(master主机)上,使用如下命令生成公私钥:

$ cd .ssh
$ ssh-keygen -t rsa

一路回车 3.3 将namenode(master主机)上的公钥分别加入master、worker01和worker02机器的授权文件中。 在namenode(master主机)上,执行如下命令:

$ ssh-copy-id hduser@master
$ ssh-copy-id hduser@worker01
$ ssh-copy-id hduser@worker02

使用cp命令,将公钥文件复制成authorized_keys文件。 参考命令:cp ~/.ssh/id_dsa.pub ~/.ssh/authorized_keys 此时ssh登录本机不再需要输入密码

image.png 让主节点能通过SSH免密码登录两个子节点 将主服务器的公钥文件内容添加到从服务器的authorized_keys文件里,就可以实现主服务器免密码登录从服务器了。使用scp命令,将主服务器的公钥文件id_dsa.pub复制到从服务器上,并命令为master.pub。 参考命令:scp ~/.ssh/id_dsa.pub hduser@worker01:~/.ssh/master.pub

image.png

再将上一步生成的master.pub文件内容追加到worker01的authorized_keys文件中,可以登录到worker01上去操作,也可以在master上使用ssh命令远程操作。 参考命令: ssh hduser@worker01 "cat ~/.ssh/master.pub>> ~/.ssh/authorized_keys"

worker 02 重复上述操作

image.png 至此完成master到worker01 与worker02的ssh免密登录操作,测试一下,在master上执行

ssh master
exit

ssh worker01'
exit

ssh worker02
exit

image.png

4.将主节点安装好的文件夹分发到从节点

1.将配置好的hadoop-3.3.4文件夹,分别拷贝到worker01和worker02的bigdata目录下:

$ scp -r ~/bigdata/hadoop-3.3.4  hduser@worker01:~/bigdata
$ scp -r ~/bigdata/hadoop-3.3.4  hduser@worker02:~/bigdata

2.master主节点格式化hdfs系统

hdfs namenode -format

image.png

5.启动hadoop

首先启动hdfs

start-dfs.sh