Hadoop 3.1安装与初步使用

查看操作系统版本

$ sudo lsb_release -a

一. 准备工作 (可选)

1.1 添加教育网的镜像
首先,对原来的/etc/apt/sources.list进行备份。

$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup

然后,用$ sudo vim /etc/apt/sources.list命令,将/etc/apt/sources.list中全部的内容替换为

# 清华大学镜像,默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
 
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse

或者

#上海交通大学更新服务器
deb http://ftp.sjtu.edu.cn/ubuntu/ lucid main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ lucid-backports main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ lucid-proposed main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ lucid-security main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ lucid-updates main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ lucid main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ lucid-backports main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ lucid-proposed main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ lucid-security main multiverse restricted universe
deb-src http://ftp.sjtu.edu.cn/ubuntu/ lucid-updates main multiverse restricted universe

最后,进行数据源的更新。

$ sudo apt-get update           #更新数据源 
$ sudo apt-get upgrade         #更新软件版本,可以不执行

1.2 修改主机名
ubuntu 18.04需要先修改/etc/cloud/cloud.cfg文件

$ sudo vim /etc/cloud/cloud.cfg     #找到preserve_hostname: false修改为preserve_hostname: true

三台计算机名分别为:Master, Slave01, Slave02。使用命令

$ sudo vim /etc/hostname       #永久修改主机名(需要重新启动$ sudo reboot)

进行修改、保存。然后必须重新启动计算机,才能够更改计算机名称。或者使用命令

$ sudo hostname Master         #临时修改主机名

注意:执行了这个命令后,临时性地修改主机名(在新建的终端才能看到主机名已经修改了),重启后主机名又恢复原来的了。


1.3 配置IP地址
Ubuntu 18.04配置/etc/netplan/50-cloud-init.yaml

$ sudo vim /etc/netplan/50-cloud-init.yaml         #双网卡地址配置 

在这里插入图片描述

$ sudo netplan apply                               #配置生效

配置三台计算机的静态IP地址(此处的网卡默认称为eth0,有的也有默认被称为ens160、ens32的,可以使用$ ifconfig命令进行查看)。

$ sudo vim /etc/network/interfaces

在这里插入图片描述


1.4 修改/etc/hosts
利用$ ifconfig命令查看计算机的IP地址。
依次在三台计算机中输入$sudo vim /etc/hosts命令,修改如下内容(注意IP地址根据实际情况来定):
在这里插入图片描述
修改完成后,使用ping命令测试三台计算机局可以连通。

$ ping Slave01
$ ping Slave02
$ ping Master

1.5 创建hadoop用户
在三台计算机中都设置一个hadoop用户,名为miles账号(可以根据具体情况设置hadoop用户名)

$ sudo useradd -m miles -s /bin/bash        #创建hadoop用户叫做miles,并使用/bin/bash作为shell
$ sudo passwd miles                         #为hadoop用户设置密码,之后需要连续输入两次密码(例如:密码为0123456789)
$ sudo adduser miles sudo                   #为hadoop用户增加管理员权限
$ su - miles                                #切换当前用户为用户miles(hadoop用户)
$ sudo apt-get update                       #更新hadoop用户的apt,方便后面的安装

1.6 安装SSH,设置SSH无密码登陆
如果已经由ssh服务的话,可以跳过这一步,直接设置SSH无密码。

$ sudo apt-get install openssh-server                      #安装SSH server

设置SSH无密码登录。

$ ssh localhost               #登陆SSH,第一次登陆输入yes
$ exit                        #退出登录的ssh localhost
$ cd ~/.ssh/                  #如果没法进入该目录,执行一次ssh localhost
$ ssh-keygen -t rsa 

输入完 $ ssh-keygen -t rsa 语句以后,需要连续敲击三次回车,如下图:
在这里插入图片描述
其中,第一次回车是让KEY存于默认位置,以方便后续的命令输入(注意记录)。第二次和第三次是确定passphrase,相关性不大。两次回车输入完毕以后,如果出现类似于下图所示的输出,即成功:
在这里插入图片描述
其中文件id_rsa为私钥(privite key),id_rsa.pub为公钥(public key)。默认情况下这两个秘钥都在目录~/.ssh/中,用$ cd ~/.ssh/命令进入该目录。然后再输入:

$ cat ./id_rsa.pub >> ./authorized_keys      #将id_rsa.pub追加到授权的key中,创建authorized_keys文件
$ chmod 600 authorized_keys       #修改authorized_keys的权限为:拥有者读写权
$ ssh localhost 

此时已不需密码即可登录localhost,并可见下图。如果失败则可以重复上述步骤,或者搜索“SSH免密码登录”来寻求答案。
在这里插入图片描述
每台计算机上重复步骤1.6(安装SSH,设置SSH无密码登陆),实现在Slave01和Slave02上分别生成公钥id_rsa.pub和authorized_keys。然后,分别在两个子节点上执行如下命令:

$ scp miles@Master:~/.ssh/id_rsa.pub ./master_rsa.pub        #将Master上的公钥id_rsa.pub复制到子节点上,并命名为master_rsa.pub

显示如下界面,回答“yes”和miles用户的密码。

$ cat master_rsa.pub >> ./authorized_keys            #将master_rsa.pub追加到子节点上授权的key中

回到主节点Master,输入命令$ ssh Slave01测试是否能够直接登录。此时,发现Master可以直接登录两台Slave节点(无需密码)。
问:如何实现Slave节点之间的不密码登录?


二. 安装jdk8

关于软件包下载的问题,请查阅https://www.cnblogs.com/gbyukg/p/3326825.html
截止2018.11.8,发现Hadoop3.1.1尚不支持最新的jdk11
Hadoop体系内的计算机都需要安装。首先在oracle官网下载jdk8 http://www.oracle.com/technetwork/java/javase/downloads/index.html 接下来进行安装与环境变量配置,根据个人电脑系统选择对应版本,我选的是jdk-8u191-linux-x64.tar.gz

$ sudo mkdir /usr/lib/jvm           #创建jvm文件夹
$ sudo tar -zxvf Downloads/jdk-8u191-linux-x64.tar.gz -C /usr/lib/jvm
                      #解压到/usr/lib/jvm目录下,jdk下载后默认路径为~/Downloads中
$ cd /usr/lib/jvm                           #进入该目录
$ sudo mv  jdk1.8.0_191 java                #将jdk1.8.0_191目录重命名为java
$ vim ~/.bashrc                             #给JDK配置环境变量

注:

  1. 其中如果权限不够,无法在相关目录下创建jvm文件夹,那么可以使用 $ sudo -i 命令进入root账户来创建文件夹。
  2. 另外推荐使用vim来编辑环境变量,如果没有安装,用$sudo apt-get install vim来安装。
    在.bashrc文件结尾处添加如下指令:
export JAVA_HOME=/usr/lib/jvm/java
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

如:
在这里插入图片描述
在文件修改完毕以后,输入命令:

$ source ~/.bashrc                       #使新配置的环境变量生效
$ java -version                             #检测是否安装成功,查看java版本

如果出现如下图所示的内容,即为安装成功。
在这里插入图片描述


三.安装hadoop-3.1.1

Hadoop体系内的计算机都需要安装。
可以从http://mirrors.hust.edu.cn/apache/hadoop/common/下载hadoop-3.1.1.tar.gz,进行安装:

$ sudo tar -zxvf  hadoop-3.1.1.tar.gz -C /usr/local       #解压到/usr/local目录下
$ cd /usr/local
$ sudo mv  hadoop-3.1.1   hadoop      #将hadoop-3.1.1目录重命名为hadoop
$ sudo chown -R miles ./hadoop        #修改文件权限,属于用户miles

给hadoop配置环境变量,使用$ vim ~/.bashrc命令,将下面代码添加到.bashrc文件:

export HADOOP_HOME=/usr/local/hadoop
export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"

如下图所示
在这里插入图片描述
执行source ~/.bashrc使设置生效。然后使用$ hadoop version 命令查看hadoop是否安装成功,如果成功,则返回如下信息,如图所示。
在这里插入图片描述


四. Hadoop操作模式

操作Hadoop集群有三种模式,分别是:

  1. 本地/独立模式:默认情况下使用该模式,用于运行Java程序。
  2. 模拟分布式模式(也称为伪分布模式):在一台计算机上的分布式模拟。Hadoop守护每一个进程,包括hdfs、yarn、MapReduce等,都将作为一个独立的Java程序运行,适合开发使用。
  3. 完全分布式模式:在两台以上(含)的多台计算机集群使用Hadoop,适合实际使用。本文使用该模式。
    另外,Hadoop 2.x和Hadoop 3.x有所不同,具体阅读《大数据Hadoop2.x与Hadoop3.x相比较有哪些变化》一文(https://blog.csdn.net/wshyb0314/article/details/82184680)。其中,它们默认使用的的端口号是不同,具体如下表所示。
    在这里插入图片描述

五. 完全分布式配置

5.1 创建目录(只在Master上配置)
在hadoop用户(用户名为miles)主目录下创建dfs和tmp目录分别用作数据存储和交换,并在dfs目录下创建name和data子目录,命令如下:

$ mkdir -p ~/dfs/name       #在普通用户主目录下同时创建dfs目录及其子目录name
$ mkdir ~/dfs/data         #创建dfs的子目录data
$ mkdir ~/tmp               #在普通用户主目录下创建目录tmp

5.2 修改配置文件
配置文件的路径(根据HADOOP_HOME的设置)为/usr/local/hadoop/etc/hadoop/目录中,切换到该目录。

$ cd /usr/local/hadoop/etc/hadoop/
  1. 执行$ sudo vim workers,添加三台计算机的主机名。

  2. 执行$ sudo vim core-site.xml,将文件最后的<configuration> </configuration> 替换为

<configuration>
        <property>
             <name>fs.defaultFS</name>
             <value>hdfs://Master:9000</value>
        </property>
        <property>
              <name>hadoop.tmp.dir</name>
              <value>/home/miles/tmp</value>
         </property>
</configuration>
  1. 执行$ sudo vim hadoop-env.sh,将JAVA_HOME设置为JDK的安装路径。
    Java主目录:JAVA_HOME=/usr/lib/jvm/java
    Hadoop主目录:HADOOP_HOME=/usr/local/hadoop(这个不用设置)
    具体如下:
    在这里插入图片描述
  2. 执行$ sudo vim hdfs-site.xml,将文件最后的 替换为
<configuration>
        <property>
            <name>dfs.namenode.http-address</name>
             <!-- Master为当前机器名或者IP地址 -->
             <value>hdfs://Master:9001</value>
        </property>
        <property>
              <name>dfs.namenode.name.dir</name>
              <!-- 以下为存放节点命名的路径 -->
              <value>/home/miles/dfs/name</value>
         </property>
        <property>
              <name>dfs.datanode.data.dir</name>
              <!-- 以下为存放数据命名的路径 -->
              <value>/home/miles/dfs/data</value>
        </property>
        <property>
              <name>dfs.replication</name>
              <!-- 备份次数,因为有2台DataNode-->
              <value>2</value>
         </property>
        <property>
              <name>dfs.webhdfs.enabled</name>
              <!-- Web HDFS-->
              <value>true</value>
         </property>
</configuration>
  1. 执行$ sudo vim mapred-site.xml,将文件最后的<configuration> </configuration> 替换为
<configuration>
        <property>
            <name>mapreduce.framework.name</name>
             <!-- MapReduce Framework -->
             <value>yarn</value>
        </property>
        <property>
              <name>mapreduce.jobhistory.address</name>
              <!-- MapReduce JobHistory, 当前计算机的IP -->
              <value>Master:10020</value>
         </property>
        <property>
              <name>mapreduce.jobhistory.webapp.address</name>
              <!-- MapReduce Web App JobHistory, 当前计算机的IP -->
              <value>Master:19888</value>
        </property>
        <property>
              <name>yarn.app.mapreduce.am.env</name>
              <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
        </property>
        <property>
              <name>mapreduce.map.env</name>
              <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
        </property>
              <name>mapreduce.reduce.env</name>
              <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
        </property>
</configuration>
  1. 执行$ sudo vim yarn-site.xml,将文件最后的<configuration> </configuration> 替换为
<configuration>
 <!-- Site specific YARN configuration properties -->
        <property>
            <name>yarn.resourcemanager.hostname</name>
             <!-- Master为当前机器名或者ip号 -->
             <value>Master</value>
        </property>
        <property>
              <name>yarn.nodemanager.aux-services</name>
              <!-- Node Manager辅助服务 -->
              <value>mapreduce_shuffle</value>
         </property>
        <property>
              <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
              <!-- Node Manager辅助服务类 -->
              <value>org.apache.hadoop.mapred.ShuffleHandler</value>
        </property>
        <property>
              <name>yarn.nodemanager.resource.cpu-vcores</name>
              <!-- CPU个数,需要根据当前计算机的CPU设置-->
              <value>2</value>
         </property>
        <property>
              <name>yarn.resourcemanager.admin.address</name>
              <!-- Resource Manager管理地址 -->
              <value>Master:8033</value>
         </property>
        <property>
              <name>yarn.resourcemanager.webapp.address</name>
              <!-- Resource Manager Web地址 -->
              <value>Master:8088</value>
         </property>
</configuration>

六. 复制Hadoop配置文件

Master配置完成后,需要将Master的/usr/local/hadoop(HADOOP_HOME)目录中的配置文件复制到所有Slave节点上。首先,在Master上执行如下命令:

$ cd /usr/local
$ sudo rm -r ./hadoop/tmp		#删除Hadoop临时文件
$ sudo rm -r ./hadoop/logs/*		#删除Hadoop日志文件
$ tar -zcf ~/hadoop.master.tar.gz ./hadoop		#将Hadoop的配置目录压缩成一个文件到用户主目录下
$ cd ~
$ scp ./hadoop.master.tar.gz miles@Slave01:~/	#将压缩包文件复制到Slave01主机上miles用户的主目录下

然后,在Slave节点上执行如下命令:

$ sudo rm -r /usr/local/hadoop	#删除原来的Hadoop文件和目录
$ sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local	#解压缩都/usr/local目录中
$ sudo chown -R miles /usr/local/hadoop	    #修改/usr/local/hadoop目录的拥有者为Hadoop用户miles

七. 启动Hadoop

1. 启动HDFS
● 初始化namenode
Master是namenode,Slave是datanode,所以只需要在Master上对HDFS进行格式化,命令如下:

$ hdfs namenode -format                     #初始化namenode

格式化会产生多条信息,其中倒数第三行如果出现
……Storage directory /home/miles/hdfs/name has been successfully formatted,则说明格式化HDFS成功。
不报错返回 “Exiting with status 0” 为成功,“Exiting with status 1”为失败。
● 测试启动HDFS
在Master上执行如下命令

$ start-dfs.sh                      #启动dfs
$ start-yarn.sh                    #启动yarn
$ mapred --daemon start historyserver		#启动historyserver,它不是必须的步骤

在Master上执行$jps命令,可以看到5个进程。

NameNode
SecondaryNameNode
NodeManager
ResourceManager
Jps
JobHistoryServer

在Slave上执行$jps命令,可以看到3个进程。

DataNode
NodeManager
Jps

注意:缺少任何一个进程都表示出错。可以通过浏览器访问http://Master:9870(Hadoop3)或者http://Master:50070(Hadoop2)查看日志Logs,或者名称节点和数据节点。
2. 查看Hadoop集群情况
在Master上执行$ hdfs dfsadmin -report命令,查看数据节点是否正常启动。如果正常启动,返回如下图所示信息。其中Live datanodes不为0,说明集群启动成功。下图说明集群中有3个datanode。
在这里插入图片描述
也可以在浏览器中输入http://master:9870或者用IP地址http://192.168.1.10:9870,通过Web查看集群的状态,如下图所示。
在这里插入图片描述


八. Hadoop平台测试

  • WordCount
    在Hadoop的安装目录下(/usr/local/hadoop/),提供了一个单词统计程序——WordCount。WordCount程序运行于Hadoop计算平台之上,充分利用了MapReduce和HDFS。它可以对文件中单词出现次数进行统计,然后给出统计结果。我们通过运行WordCount程序,可以检测Hadoop平台是否能够正常运行。
    1 在HDFS上建立相应的目录和相应的文本文件。在主目录下(/home/miles/)建立文件夹input,并进入文件夹input,执行命令如下:
$ mkdir /home/miles/input
$ cd /home/miles/input

建立文件file01和file02,并分别写入要统计的内容,命令如下:

$ echo "hello world bye world" > file01           #写内容到文件file01中
$ echo "hello hadoop goodbye hadoop" >file02      #写内容到文件file02中

2 在HDFS上建立目录input,将file01和file02上传至hdfs的input目录,执行命令如下

$ cd /home/miles/input
$ hadoop fs -mkdir /hadoopusers/miles/input            #创建HDFS的/hadoopusers/miles/input目录
$ hadoop fs -put * /hadoopusers/miles/input             #将/home/miles/input目录下的文件上传到HDFS的/hadoopusers/miles/input目录
$ hadoop fs -ls /hadoopusers/miles/input                  #/查看HDFS的/hadoopusers/miles/input目录下文件的状态

当终端显示:

-rw-r--r--   4 miles supergroup         22 2018-11-09 21:43 input/file01
-rw-r--r--   4 miles supergroup         28 2018-11-09 21:43 input/file02

则表示文件上传到HDFS成功。
3 运行WordCount程序
进入(根据HADOOP_HOME的设置)为/usr/local/hadoop/etc/hadoop//share/hadoop/mapreduce目录。然后执行WordCount程序,命令如下

#进入目录   
$ cd /usr/local/hadoop/share/hadoop/mapreduce
#执行Wordcount程序
$ hadoop jar hadoop-mapreduce-examples-3.1.1.jar wordcount /hadoopusers/miles/input  /hadoopusers/miles/output

注意:output必须是没有创建过的空目录。
终端会产生较多的系统运行信息,若显示如下信息:

18/11/09 21:56:18 INFO mapreduce.Job:  map 0% reduce 0%
18/11/09 21:56:29 INFO mapreduce.Job:  map 100% reduce 0% 
18/11/09 21:56:38 INFO mapreduce.Job:  map 100% reduce 100%
18/11/09 21:56:38 INFO mapreduce.Job: Job job_1410242637907_0001 completed successfully
18/11/09 21:56:38 INFO mapreduce.Job: Counters: 43

表明程序在运行过程中执行了mapreduce分布式编程模式。
4 程序的运行结果输出
WordCount程序运行完成后,统计的结果会输出到HDFS的output 目录下的part-r-00000文件中。输入以下命令可以查看单词的统计结果。

$ hadoop fs -cat /hadoopusers/miles/output/part-r-00000

在terminal终端显示的输出结果为:

bye      1
goodbye  1
hadoop   2
hello     2
world    2

从结果中可以看到,Hadoop集群能够成功地将文件file01和file02中各单词出现的次数统计出来,说明Hadoop平台能够成功运行。
问:如何获知、设置和修改hadoop用户的默认目录?


  • 查看Hadoop集群信息

在执行过程中,在浏览器中输入http://master:8088或者http://192.168.1.10:8080,通过Web界面查看Hadoop集群信息,如下图所示。
在这里插入图片描述
上述说明Hadoop集群都正常启动了。如果需要关闭Hadoop集群,可以在Master上执行命令:

$ stop-yarn.sh
$ stop-dfs.sh
$ mapred --daemon stop historyserver		#关闭历史记录服务

问:自学使用Docker(容器)配置如本实验所述的Hadoop集群。


九.报错

  1. “2018-10-30 13:30:40,855 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable”
    在/etc/profile中,添加下面配置:
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"

使配置生效:$ source /etc/profile

  1. 如果Hadoop之前启动过,但是现在无法正常启动,特别是datanode无法启动时。可以删除Master上存放集群的name名称、data名称的文件,执行如下命令:
 $ rm -r /home/miles/hdfs/name/*
 $ rm -r /home/miles/hdfs/data/*

以及包括Master和所有Slave在内所有节点的临时文件,执行如下命令:

$ rm -r /home/miles/tmp/*

在重新执行$ hdfs namenode -format命令,重新进行Hadoop集群格式化。

3.如果遇到如下错误“java.net.ConnectException: Call From Master/192.168.1.10 to Master:8032 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused”,可能的原因是ResourceManager没有启动。


参考文献

  1. Apache Hadoop 3.1.1官方文件https://hadoop.apache.org/docs/r3.1.1/
  2. Hadoop集群安装英文版https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/ClusterSetup.html
  3. Hadoop 3.x新特性剖析https://www.cnblogs.com/smartloli/p/9028267.html
  4. xfce4和VNCServer配置https://www.howtoing.com/how-to-install-and-configure-vnc-on-ubuntu-18-04
  5. Ubuntu16.04 下 hadoop的安装与配置(伪分布式环境)https://www.cnblogs.com/87hbteo/p/7606012.html
  6. 完全分布式Hadoop集群搭建https://blog.csdn.net/u014636511/article/details/80171002
  7. Hadoop3.1.0完全分布式集群部署超详细记录https://blog.csdn.net/weixin_42142630/article/details/81837131
  8. Hadoop3.1.0完全分布式集群部署超详细记录https://blog.csdn.net/dream_an/article/details/80258283?utm_source=blogxgwz0
  9. Hadoop环境搭建(单机)https://blog.csdn.net/qazwsxpcm/article/details/78637874?utm_source=blogxgwz0
  10. Hadoop3.0稳定版的安装部署https://blog.csdn.net/rlnLo2pNEfx9c/article/details/78816075
发布了10 篇原创文章 · 获赞 1 · 访问量 1221

猜你喜欢

转载自blog.csdn.net/miles_ye/article/details/101210775