引言

这玩意是去年Linux考核内容,来来回回搭建了二三十次,但是都是参照别人的教程来的,而且全都装了图形界面,所以决定根据自己的经验写一篇记录一下,之前搭建的都是Hadoop-2.6.0和2.7.4,这次想搭建最新的3.3.0

关于两者的差距,可以参考下下面的文章

思考了一下步骤:

  • 虚拟机建立和克隆
  • 修改主机名,明确IP
  • 关闭防火墙
  • 设置ssh免密码登陆
  • 修改Hadoop的几个组件的配置文件

    • 比较重要的JDK路径添加
  • 启动Hadoop

搭建方式

Hadoop有三种搭建形式:

  • 单机模式:一台主机进行安装
  • 伪分布式模式:一台主机,但用不同Java节点模仿分布式运行的各类节点。

    • 从分布式存储的角度来说,集群中的结点由一个NameNode和若干个DataNode组成,另有一个SecondaryNameNode作为NameNode的备份。
    • 从分布式应用的角度来说,集群中的结点由一个JobTracker和若干个TaskTracker组成,JobTracker负责任务的调度,TaskTracker负责并行执行任务。TaskTracker必须运行在DataNode上,这样便于数据的本地计算。JobTracker和NameNode则无须在同一台机器上。一个机器上,既当namenode,又当datanode,或者说 既 是jobtracker,又是tasktracker。没有所谓的在多台机器上进行真正的分布式计算,故称为"伪分布式"。开启多个进程模拟完全分布式,但是并没有真正提高程序执行的效率
  • 完全分布式模式:真正的分布式,由3个及以上的实体机或者虚拟机组建的机群

本文是利用虚拟机来进行完全分布式搭建

提前准备

cnetos/ubuntu系统,我使用centos进行搭建。可以去镜像站下载
准备好Hadoop安装文件,可以直接去官网下载。这里我下载的是最近版本3.3.0

关于系统安装不在此赘述,不过在centos安装环境选择时候,建议将必要文件勾选

注意安装JDK,本文已经在系统安装环节预先装好所需环境,只需找到/jre/bin路径即可

安装


通过ftp文件将Hadoop传入

tar xvf hadoop-3.3.0.tar  #对文件解压
rm -rf hadoop-3.3.0.tar  #将压缩文件删除
mv hadoop-3.3.0/ hadoop       #重命名

修改主机名

三台主机,依次修改主机名为masternode1node2

hostnamectl set-hostname master #centos中修改主机名的指令
reboot #修改后重新启动即可查看到修改后的主机名

Ubuntu的修改主机可以$ vi /etc/sysconfig/network

关闭防火墙

关闭防火墙,并重启网卡

systemctl status firewalld.service #status查看状态
systemctl stop firewalld.service #关闭防火墙
systemctl disable firewalld.service #将防火墙设为不可用
systemctl restart network #重启网卡

再次查看status

显示为不可用状态

设置主机IP映射

vim /etc/hosts  #修改host文件
  • 添加后三行

将hosts文件拷贝到node1与node2

scp -r /etc/hosts node1:/etc/hosts
scp -r /etc/hosts node2:/etc/hosts

设置免密码登陆

ssh-keygen -t rsa

输入后一直回车

将密钥拷贝到node1、node2

ssh-copy-id -i node1
ssh-copy-id -i node2

实现免密码登陆到字节点

设置本地免密码

cd /root/.ssh/
cat ./id_rsa.pub >> ./authorized_keys  #将公钥写入本地执行命令
ll #查看写入结果

修改配置文件

添加JAVA路径

首先要先找到Java的路径
which java
ls -lrt /usr/bin/java
ls -lrt /etc/alternatives/java

得到
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.221-2.6.18.1.el7.x86_64/jre/bin/
为java执行路径,将路径添加到hadoop-env.sh文件中

vim hadoop-env.sh

修改core-site.xml

将下面的配置参数加入进去修改成对应自己的

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://master:9000</value>
        </property>
        <property>
                <name>io.file.buffer.size</name>
                <value>131072</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/root/hadoop/tmp</value>
        </property>
</configuration>

修改 hdfs-site.xml 将dfs.replication设置为1

<configuration>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:///${hadoop.tmp.dir}/dfs/nn</value>
        </property>
        <property>
                <name>dfs.blocksize</name>
                <value>268435456</value>
        </property>
        <property>
                <name>dfs.namenode.handler.count</name>
                <value>100</value>
        </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

修改文件yarn-site.xml

<configuration>
        <property>
                <name>yarn.acl.enable</name>
                <value>true</value>
        </property>
        <property>
                <name>yarn.admin.acl</name>
                <value>Admin ACL</value>
        </property>
        <property>
                <name>yarn.log-aggregation-enable</name>
                <value>false</value>
        </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

修改 mapred-site.xml

<configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
    </property>
</configuration>

启动

将hadoop文件夹同步给node1/2

scp -r /root/hadoop node1:/root/
scp -r /root/hadoop node2:/root/
cd /root/hadoop
./bin/hdfs namenode -format

./sbin/start-all.sh    # 启动脚本

ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [master]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.

百度得知解决方案:
在Hadoop安装目录下找到sbin文件夹
在里面修改四个文件
对于start-dfs.sh和stop-dfs.sh文件,添加下列参数:

#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

对于start-yarn.sh和stop-yarn.sh文件,添加下列参数:

#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

在搭建这个的过程中思考到了一个问题,并不是版本越新越好,而是要选择相对稳定的版本。

启动

./bin/hdfs namenode -format
./sbin/start-all.sh. #    启动所有

然后就可以在浏览器输入localhost:9870

这里和2.x不同,2.x启动端口号是50070
可以看见界面还是蛮炫酷的

显示两个节点,证明搭建成功

最后修改:2021 年 03 月 08 日
如果觉得我的文章对你有用,请随意赞赏