搭建Hadoop环境
新建虚拟机
这里对集群有一点说明,但为了文章不过长此文章不讲解搭建集群,请看本博客的另一篇文章(有一台虚拟机的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 | # 关闭防火墙 |
虚拟机能否ping通主机:
首先先查看主机IP(主机终端中):
1 | ifconfig # Mac |
然后虚拟机再ping得到的IP。如果ping不通,但是能ping通百度,可能是主机防火墙影响。从安装性考虑:Mac可以关,Windows最好不要先关闭防火墙,在需要的时候才关。
这样就基本可以了。
最好再更新一下apt:
1 | sudo apt 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系统的浏览器)中访问下载(如果网速快的话,或者嫌不同系统移动文件麻烦)
我选择的是 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 |
如图:
将拥有者更改为hadoop103用户:
1 | sudo chown hadoop103:hadoop103 hadoop |
安装配置jdk
查看hadoop版本的时候,报错:
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 | echo $JAVA_HOME |
效果应该如图:
如果想要切换版本,则需要先删除原本的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 | cd /usr/local/hadoop |
效果应该如图:
到这里一个基本的Hadoop已经配置好了。
简单使用Hadoop
如果按照上述步骤执行,应该没有问题了,下面是简单介绍hadoop命令,进一步检验hadoop是否安装成功。可以不执行下面的操作,下面也相当于是一个新手演示。
在/usr/local/hadoop
目录下操作:
创建一个输入文件夹(wcinput)
1
mkdir wcinput
在wcinput文件下创建一个文件word.txt文件并添加内容。我们接下来用hadoop读取一下这个word.txt中的数据
1
2cd wcinput
vim word.txt写入以下内容:
1
2
3
4zyr zyr
fw fw
qwe qwe
ewq eqweqe回到Hadoop目录下(/usr/local/hadoop)
1
2
3
4cd .. # 因为才从这里cd到wcinput文件夹下,所以返回上一级就好了
或者就是写全
cd /usr/local/hadoop创建一个目录wcoutput,用来存放hadoop读取数据的结果
1
mkdir wcoutput
执行程序,运行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包 执行选项 数据来源 结果输出
执行结果后得到数据,进入wcoutput目录下,查看生成文件
正在有结果的的是part-r-00000文件,查看文件内容
它统计的是刚才写入内容中词语的个数。