新建虚拟机

这里对集群有一点说明,但为了文章不过长此文章不讲解搭建集群,请看本博客的另一篇文章(有一台虚拟机的Hadoop安装好后)

Mac系统可以参考我的另一篇文章:UTM安装Ubuntu(我自己用的是22.04.1 LTS 服务器版(非桌面版))。

Windows系统就自行找文章(找之前先稍微浏览一下下面的内容),Windows系统不用UTM,一般使用VMware。只要把VMware下载好了,然后创建好了基本的Ubuntu虚拟机,差不多就可以看我的另一篇文章了,因为Ubuntu内部是一样的。

由于涉及分发脚本等,最好配置成静态IP(不配置也可以,只是以后使用时会稍微麻烦点)

可以选择先创建好一台虚拟机,然后克隆(适合手动配置静态IP的人,如果是在安装时就配置了静态IP可能就会出现问题)。这样是最快的。

如果选择安装时配置静态IP就可以同时安装三台机器,因为中途有较长的等待时间。

最好如下规划进行配置。

Hadoop配置规划

1号服务器 2号服务器 3号服务器
name hadoop103 hadoop104 hadoop105
IP 192.168.64.103 192.168.64.104 192.168.64.105
HDFS NameNode、DataNode DataNode SecondaryNameNode、DataNode
YARN NodeManager ResourceManager、NodeManager NodeManager

安装好一台虚拟机后简单测试

避免后续白忙活,这里记得要先检查一下:

最重要的就是IP了,检查是否是静态IP:

1
ifconfig # 如果找不到命令,先下载网络工具包:sudo apt install net-tools

如果有IP并且和配置的一样这一步就OK了。没有配置静态IP就查看是否有IP就行。

是否能上网:

1
ping www.baidu.com

主机(Windows/Mac)的终端是否能ping通虚拟机:

1
ping 上上步看到的IP # 虚拟机的IP

如果无法ping通,但是上上步看到的IP正确,可能就是虚拟机防火墙没关:

1
2
3
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld.service

虚拟机能否ping通主机:

首先先查看主机IP(主机终端中):

1
2
3
ifconfig # Mac

ipconfig # Windows

然后虚拟机再ping得到的IP。如果ping不通,但是能ping通百度,可能是主机防火墙影响。从安装性考虑:Mac可以关,Windows最好不要先关闭防火墙,在需要的时候才关。

这样就基本可以了。

最好再更新一下apt:

1
2
sudo apt update
sudo apt-get update

有的时候apt和apt-get可能会产生包依赖问题,这里推荐使用aptitude来安装软件。

1
sudo apt-get install aptitude

aptitude命令格式和apt基本一样,如果apt下载包依赖失败,可以利用aptitude。

一切都安装好后,按理上可以删除iso镜像文件了,但是后面可能会出问题,可能需要重装,最好留手准备。

下载安装Hadoop

查看版本依赖关系

这里只是给出查看版本以来关系的办法。如果想要快速完成搭建,这部分可以跳过

直接在下面网站中找即可找打HBase与hadoop的版本关系:

https://hbase.apache.org/book.html#architecture

版本对应关系

查看依赖关系:由于之后计划安装2.4.11版本的Hbase,所以对应关系为:3.3.1比较好(因为3.3.1搭配Hive也兼容)。当然也可以自己查查HBase与ZooKeeper(可直接使用HBase自带的)、Hive的版本依赖关系。

下载Hadoop

更新:
由于版本问题,为在后续技术的环境搭建过程中发现版本依赖问题于2月24日改hadoop版本为3.3.4。

该版本下载链接:https://archive.apache.org/dist/hadoop/common/hadoop-3.3.4/

选择 hadoop-3.3.4.tar.gz

其他操作是相同的。

我在Mac电脑(Windows电脑上也是这个网址)上访问网址:https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.1/

如果你用的是桌面版的Ubuntu,可以直接在虚拟机中的FireFox(直接用Linux系统的浏览器)中访问下载(如果网速快的话,或者嫌不同系统移动文件麻烦)

截屏2023-01-28 17.54.11

我选择的是 hadoop-3.3.1-aarch64.tar.gz 这个是Mac M系列芯片的ARM架构Ubuntu的包

Windows 选 hadoop-3.3.1.tar.gz

点击即可下载。

安装Hadoop

之后如果没有特殊说明都是在hadoop103上面操作

之后把下载好的压缩包放在/usr/local目录下:

如果是非桌面版(在主机的浏览器上下载的Hadoop压缩包):

  • 我利用UTM安装虚拟机的时候配置了共享文件夹,所以我可以直接把文件拖入虚拟机中完成移动。
  • 如果是没有配置的Mac用户,推荐下载FileZilla,使用FileZilla完成移动。
  • 如果是Windows用户,可以下载Xftp完成移动。

注意:

要先修改Hadoop目录的权限,否则会移动失败:

1
sudo chmod -R 777 /usr/local # 千万不要改/usr的权限,因为/usr/bin/sudo在/usr下,如果将/usr的权限改为777,则无法使用sudo命令

移动完成后再改变权限改回去:

1
sudo chmod -R 4755 /usr/local

但是这个命令很坑,有另一种解决办法(或者可以看:搭建hadoop集群常见问题,和下面的内容说的一样):

在/usr/local下创建目录:hadoop

1
sudo mkdir hadoop

然后更改拥有者为本用户:

1
sudo chown hadoop103 hadoop

之后将压缩文件移动到hadoop目录下。

然后再在虚拟机中将压缩包移动出去(移到/usr/local(移动之前在/usr/local/hadoop下)):

1
sudo mv hadoop/hadoop-3.3.1-aarch64.tar ./

删除原本的hadoop目录:

1
sudo rmdir hadoop

解压压缩包

先要把压缩包移动到/usr/local目录下。

如果是桌面版,直接右键解压即可。

非桌面版,终端输入(先cd /usr/local到对应目录下):

可能我的Mac下载到.tar.gz就解压了一遍,我下载下来之后的安装包变成了.tar后缀的压缩包,我执行命令:

1
sudo tar -xf hadoop-3.3.1-aarch64.tar

如果还是.tar.gz后缀,则:

1
sudo tar -zxf hadoop-3.3.1-aarch64.tar.gz

当前目录下就多了一个hadoop-3.3.1的目录了,为了方便未来操作,修改目录名为hadoop:

1
sudo mv ./hadoop-3.3.1 hadoop

如图:

截屏2023-01-28 18.25.04

将拥有者更改为hadoop103用户:

1
sudo chown hadoop103:hadoop103 hadoop

安装配置jdk

查看hadoop版本的时候,报错:

截屏2023-01-28 18.31.14

Hadoop运行是需要jdk的,直接用ubuntu自带的jdk就行了(因为MapReduce其实是在主机的IDEA上编写Java代码的,这里好像只需要一个运行的Java编译环境,所以这里的jdk版本也不重要)

如果还是想要指定版本下载,实际上这种更简单一些,因为不用配置环境变量(以安装jdk8为例子):

1
sudo apt-get install openjdk-8-jdk

然后配置环境变量。配置环境变量看下面。

之后可直接查看java版本.

下载自带的jdk:

1
apt install default-jdk

这里比较久,三台同时弄吧~

安装好jdk后,配置环境变量:

1
vim ~/.bashrc

进入编辑后,自己按 i 输入:

1
export JAVA_HOME=/usr/lib/jvm/default-java

如果是其他版本就需要具体看了,例如安装了jdk8,就先 ls /usr/lib/jvm 看看叫什么名字。

我安装jdk8之后在/usr/lib/jvm目录下有两个文件,环境变量是java开头的那个,比如我的配置文件内容:

1
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-arm64

保存退出。

如图:

配置环境变量

然后生效:

1
source ~/.bashrc

这样其实就好了,可以检查一下:

1
2
3
4
5
echo $JAVA_HOME

java -version

$JAVA_HOME/bin/java -version

效果应该如图:

检查jdk安装是否成功

如果想要切换版本,则需要先删除原本的jdk:

1
2
3
4
5
dpkg --list | grep -i jdk

sudo apt-get purge jdk*

sudo apt-get purge icedtea-* jdk-*

现在可以再检查hadoop的版本了(顺便也是再检查jdk是否安装成功):

1
2
3
cd /usr/local/hadoop

./bin/hadoop version

效果应该如图:

查看Hadoop版本

到这里一个基本的Hadoop已经配置好了。

简单使用Hadoop

如果按照上述步骤执行,应该没有问题了,下面是简单介绍hadoop命令,进一步检验hadoop是否安装成功。可以不执行下面的操作,下面也相当于是一个新手演示。

/usr/local/hadoop目录下操作:

  1. 创建一个输入文件夹(wcinput)

    1
    mkdir wcinput
  2. 在wcinput文件下创建一个文件word.txt文件并添加内容。我们接下来用hadoop读取一下这个word.txt中的数据

    1
    2
    cd wcinput
    vim word.txt

    写入以下内容:

    1
    2
    3
    4
    zyr zyr
    fw fw
    qwe qwe
    ewq eqweqe
  3. 回到Hadoop目录下(/usr/local/hadoop)

    1
    2
    3
    4
    cd .. # 因为才从这里cd到wcinput文件夹下,所以返回上一级就好了

    # 或者就是写全
    cd /usr/local/hadoop
  4. 创建一个目录wcoutput,用来存放hadoop读取数据的结果

    1
    mkdir wcoutput
  5. 执行程序,运行hadoop读取处理数据

    1
    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount wcinput/ wcoutput

    解释一下:

    • 执行的是/usr/local/hadoop/bin目录下的hadoop命令(当前在/usr/local/hadoop目录下,所以运行/bin/hadoop

    • jar表示要执行一个jar包,之后指定要执行的jar包(hadoop-mapreduce-examples-3.3.1.jar),写上完整路径就是:share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar

      mapreduce的作用是计算。这里相当于选的是一个计算模板包。

    • 执行程序的选项是:wordcount,也就是单词计数,就是统计每个单词出现的次数。

    • 需要读取的文件是wcinput下的所有文件(wcinput/)。

    • 输出位置是wcoutput文件夹,如果事先没有准备这个文件夹,就写:./wcoutput

      最终表示为:

      1
      执行命令 选择执行jar包 执行选项 数据来源 结果输出
  6. 执行结果后得到数据,进入wcoutput目录下,查看生成文件

    生成结果

  7. 正在有结果的的是part-r-00000文件,查看文件内容

    它统计的是刚才写入内容中词语的个数。