一、Hadoop安装模式简介
Hadoop有三种安装模式,分别为单机模式、伪分布式模式、完全分布式模式。三者对比可以通过下表看出
模式 | 概念 | 特点 | 用途 |
---|---|---|---|
单机模式 | Hadoop默认模式 | 1.没有分布式文件系统HDFS 2.MapReduce处理的是本地Linux的文件数据 | 一般仅用于本地MapReduce程序的调试 |
伪分布模式 | 是在单机上,模拟一个分布式的环境 | 具备Hadoop的主要功能 | 常用于调试程序 |
完全分布式模式 | 也叫集群模式,是将Hadoop运行在机器上,各个机器按照相关配置运行相应的hadoop守护进程 | 在多台机器上运行,是真正的分布式环境 | 常用于生产 |
由于是在自己的笔记本上进行实验,所以选择伪分布式模式较好。
二、本文配置环境
- VMware Workstation 16 pro:16.1.0 build-17198959
- Ubuntu 20.04.2 LTS 桌面版64位
- jdk-8u281-linux-x64.tar.gz
- hadoop-2.7.4.tar.gz
三、Ubuntu安装
(假设你已经安装完成VMware)
1.点击新建虚拟机,这里弹窗选择典型安装即可。
2.选择安装程序光盘映像文件,浏览到在你磁盘上的iso文件。当然也可以选择稍后安装操作系统,但是在创建好虚拟机之后依然会让你选择映像文件。
3. 输入你的Ubuntu虚拟机名字以及登录密码。
4.选择你的虚拟机要放在你的硬盘上的位置。(这里我为了统一将默认名称更改了)
5.分配你的虚拟机磁盘容量。将磁盘存储为单过或者多个文件都是可以的。这个只对于过去的老计算机会有较大的差别。
6.自定义硬件设备。这一步建议将内存、CPU翻倍,将网络适配器改为NAT模式,这样开机便可以自动联网,方便操作,日后再改为桥接模式。
7.完成。点击完成,等待虚拟机复制文件,打开即可。
8.安装open-vm-tools,实现复制、粘贴,可拖拽文件。
- 按Ctrl+Alt+T打开命令终端。
- 更新下系统源:sudo apt update
- 安装open-vm-tools,命令:sudo apt install open-vm-tools
- 安装 open-vm-tools-desktop 以支持双向拖放文件,命令:sudo apt install open-vm-tools-desktop
- 查看是否安装成功open-vm-tools,执行命令:①cd /etc/init.d ②ls (其中/etc目录存放着各种系统配置文件,init.d文件是随系统启动的服务程序)
写在前面:(1)Ubuntu中的操作都是和文件打交道,很多时候做错了不必重装!
(2)Ubuntu中命令行中的 ~/ 等于 /home/用户名/。
(3)你打开文件系统看到的,它等于 ~/ 等于 /home/用户名/。
四、JDK安装
1.在家(Home)目录下新建software和server文件夹,其中software用于存储JDK与Hadoop的压缩包,server用于存放两者的解压后文件。
可以使用命令:。
也可以点击右上角的三个横线中的New Folder:
新建好之后的Home目录:
2.在Windows系统内点击你下载好的JDK文件复制,回到Ubuntu中的software文件夹,右键单击paste。也可以使用拖拽,直接从Windows系统中拖到software文件夹。
我这里已经将JDK及Hadoop一同拷贝过来了:
3.将JDK解压到server目录下,在software文件夹下使用命令:tar -xzvf jdk-8u281-linux-x64.tar.gz -C ..//server
- -x:从压缩的文件中提取文件
- -z:支持gzip解压文件
- -v:显示操作过程
- -f:指定压缩文件
- -C:切换到指定目录
- ../后面一定要再多一个斜杠,或者可以这样/home/master/server
4.配置环境变量
- 命令:gedit ~/.bashrc (使用gedit对.bashrc文件进行编辑相比vim更好用,此文件主要保存个人的一些个性化设置,如命令别名、路径等。)
- 将下列配置放在文件的最后面:
保存退出。#set oracle jdk environment export JAVA_HOME=/home/master/server/jdk1.8.0_281 #这里要注意目录要换成自己解压的jdk目录 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
- 执行命令:source ~/.bashrc (执行此文件中的配置)
- 测试:java -version (若安装成功,则会在终端输出当钱JDK版本)
五、Hadoop安装
1.前两步与JDK安装过程一样,需要将Hadoop压缩文件放在software文件夹下,并解压到server文件夹中。
- 在software文件夹下执行解压命令:tar -xzvf hadoop-2.7.4.tar.gz -C ..//server
2.配置环境变量
- 命令:gedit ~/.bashrc
- 将下列配置放在文件的最后面:
保存退出。#set hadoop environment export HADOOP_HOME=/home/master/server/hadoop-2.7.4 #这里要注意目录要换成自己解压的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 JAVA_LIBRARY_PATH=${HADOOP_HOME}/lib/native #不加这一行在后面启动HDFS服务的时候会有警告
- 执行命令:source ~/.bashrc
-
在/home/master(你自己的用户名,在Ubuntu中不显示,可以理解为打开看到的Home目录就已经到此目录下了)/server(你自己的解压目录)/hadoop-2.7.4/etc/hadoop/hadoop-env.sh文件中,修改:JAVA_HOME=/home/master/server/jdk1.8.0_28(也就是你自己的JDK解压目录),保存退出。
- 测试:hadoop version (若安装成功,则会在终端输出当前Hadoop版本)
- 进一步测试功能:使用命令:mkdir ~/input 创建input文件夹,再使用命令:gedit ~/input/data.txt 建立一个data.txt文件。在此文件中可以打入一行Hello world!后保存退出。
- 在终端输入命令:cd ~/server/hadoop-2.7.4/share/hadoop/mapreduce 切换到mapreduce目录下。
- 执行命令:hadoop jar hadoop-mapreduce-examples-2.7.4.jar wordcount ~/input/data.txt ~/output (wordcount计算每个单词出现的次数)
- 上一条命令会在home目录下新建一个output目录,点开后会发现有四个文件,我们双击其中的part-r-00000可以看到其中的统计数据。
六、伪分布式模式
(一)安装SSH服务器端并克隆虚拟机
1.改变Ubuntu的镜像源:Settings(可以通过单击右上角的关机图标找到) —— About —— Software Updates —— Ubuntu Software —— Download from —— China —— 单击mirrors.tuna.tsinghua.edu.cn —— 单击choose server —— 输入密码后点击Authenticate —— close(revert为恢复上次选择)—— Reload(即为更新系统源)
2.更新源:打开终端,执行命令:①sudo apt update ②sudo apt upgrade (这中间会有是否继续,输入y)
3.下载SSH:执行命令:sudo apt-get install openssh-server (中间有一步是否继续,输入y。)(SSH有客户端和服务端,客户端默认都自带的,只需要装服务端即可。)
4.测试:执行命令:dpkg -l|grep ssh (-后为字母l在之后为竖线|)。出现下面两个即为成功。
5.克隆两台虚拟机:在虚拟机关机状态下,在VMware左侧库中右键单击你的虚拟机(我的为master) —— 管理 —— 克隆 —— 虚拟机中的当前状态 —— 创建完整克隆 —— 虚拟机的名称,我自己为bigdata01和bigdata02 —— 等待完成即可。
6.接下来的步骤会涉及到主机名,注意:Linux的主机名和用户名不是一个东西,在命令终端输入命令时,@前面的为用户名,@后为主机名,此图中为用户名和主机名重复了。所以你需要通过:Settings —— About —— Device Name 将三台Ubuntu的主机名改为这样:
7.将三台主机全部开机,查看每台主机的IP地址。命令:ifconfig,如果提示命令找不到,则因为未安装网络工具,先执行命令:sudo apt install net-tools即可。方框中即为IP地址:
获取三台主机的IP地址后,将三台主机的IP地址写入到每台虚拟机的hosts中:
- 运行命令:su(进入root用户)(如果提示授权失败,则运行命令:sudo passwd root 修改root密码即可)
- 运行命令:gedit /etc/hosts (编辑hosts这一负责域名解析的文件)
- 在此文件中插入三台主机的IP及每台主机的主机名,三台均执行此操作,这样方便后面的操作,修改之后可以ping一下看看是否成功。
(二)设置免秘钥登录
1.在三台虚拟机中执行命令:ssh-keygen -t rsa。执行期间一Enter即可,执行完毕后会在Home目录下生成一个.ssh文件夹(如果看不到,在文件系统中右上角三条横线内开启显示隐藏文件即可),文件夹中的id_rsa存放着私钥,id_rsa.pub存放着公钥,我们下一步就是把各个节点的公钥拷贝到master节点上。
2.将另外两台节点的数据拷贝到master这一中枢节点上。在master虚拟机中执行如下命令:
#将bigdata01主机的公钥拷贝到master上,其中“bigdata01”为另一台主机名,冒号后为公钥在“bigdata01”主机上的存放地址,第二个空格后为存放在“master”主机上的目录及文件名
scp bigdata01:~/.ssh/id_rsa.pub ~/.ssh/id_rsa.pub.01
#将bigdata02主机的公钥拷贝过来
scp bigdata02:~/.ssh/id_rsa.pub ~/.ssh/id_rsa.pub.02
3.在中枢节点,即我的master主机上,将所有主机的公钥都添加到authorized_keys文件(在Home目录下的.ssh文件夹中)中,执行命令:
#将本机即master的公钥放进authorized_keys文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
#将bigdata01主机的公钥放进文件中
cat ~/.ssh/id_rsa.pub.01 >> ~/.ssh/authorized_keys
#将bigdata02主机的公钥放进文件中
cat ~/.ssh/id_rsa.pub.02 >> ~/.ssh/authorized_keys
#删除bigdata01与bigdata02的公钥
rm ~/.ssh/id_rsa.pub.01
rm ~/.ssh/id_rsa.pub.02
4.将中枢节点中的authorized_keys分发给所有从节点。这样每个节点都可以自由免密登录任何其他节点。执行命令:
#将authorized_keys文件发给bigdata01主机,也要放在Home目录下的.ssh文件夹中
scp ~/.ssh/authorized_keys bigdata01:~/.ssh/
#将authorized_keys文件发给bigdata02主机
scp ~/.ssh/authorized_keys bigdata02:~/.ssh/
5.验证测试,在master中执行命令:ssh bigdata01。第一红框为授权,就是添加到已知列表,下次不会再出现,第二个红框出现即为配置成功,若失败会在二者之间让你输入用户密码。
断开连接执行命令:logout。
(三)修改配置文件
所需修改的配置文件都在 /home/master(你的用户名)/server(你的解压目录)/hadoop-2.7.4/etc/hadoop 目录下。
1.配置文件:core-site.xml
/home/master/server/hadoop-2.7.4(你的hadoop解压目录)/tmp 此文件夹需要自己创建。
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<!-- hadoop.tmp.dir指出FSImage和Edits的存放位置 -->
<!-- 如果在hdfs-site.xml中设定了dfs.namenode.name.dir的值,则hadoop.tmp.dir无效 -->
<value>/home/master/server/hadoop-2.7.4/tmp</value>
<!-- 这个目录应该替换成你自己的解压目录下,注意tmp文件夹需要自己创建 -->
</property>
<property>
<name>fs.defaultFS</name>
<!-- fs.defaultFS确定哪个节点充当NameNode,以及访问HDFS的端口。即配置NameNode地址,9000是RPC通信端口 -->
<value>hdfs://192.168.60.129:9000</value>
<!-- 192.168.60.129是我的nameNode也即master主机的IP,替换成你自己的 -->
</property>
</configuration>
2.配置文件:hdfs-site.xml
/home/master/server/hadoop-2.7.4(你的hadoop解压目录)/opt 此文件夹需要你自己创建
<configuration>
<property>
<name>dfs.replication</name>
<!-- "dfs.replication"给出副本个数 -->
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<!-- "dfs.namenode.name.dir" 给出fsImage、edits存放在哪 -->
<value>/home/master/server/hadoop-2.7.4/opt/name</value>
<!-- "/home/master/server/hadoop-2.7.4/opt" 这个目录需要你自己创建 -->
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/master/server/hadoop-2.7.4/opt/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-addr</name>
<!-- 指出哪个节点充当secondaryNameNode -->
<value>192.168.60.129:50059</value>
<!-- 同样是master的IP,但是更换一个端口 -->
</property>
</configuration>
3.配置文件mapred-site.xml
有可能没有这个文件,但是你会看到mapred-site.xml.template文件,在当前目录下使用命令:cp mapred-site.xml.template mapred-site.xml 这样在对其进行配置。
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<!-- value值配置为yarn表示集群模式,配置为local为本地模式 -->
</property>
</configuration>
4.配置文件yarn-site.xml
注意有一处需要执行命令得到。
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<!-- "yarn.resourcemanager.hostname"指出哪个节点充当resourcemanager -->
<value>192.168.60.129</value>
<!-- 可以写IP地址,如果配置了hosts文件也可以写对应的主机名,例如我可以写master -->
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<!-- "yarn.nodemanager.aux-services"指出mapreduce执行所需要的附件 -->
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>*****</value>
<!-- ****** 处需要执行命令:hadoop classpath 将执行结果粘贴在*****处 -->
</property>
</configuration>
5.配置文件slaves
在此文件中添加你的从节点IP或者hosts中对应的主机名
6.分发配置文件
在终端执行命令:
#将配置环境基础设置分发到bigdata01和bigdata02主机上
scp ~/.bashrc bigdata01:~/
scp ~/.bashrc bigdata02:~/
#将JDK和Hadoop解压目录整体分发到bigdata01和bigdata02主机上,注意要与原来的解压目录在同样位置
scp –r server bigdata01:~/
scp –r server bigdata02:~/
7.启动与测试
在master主机上进行操作:
- HDFS格式化
执行命令:hdfs namenode –format
出现红框即为成功
- 启动Hadoop集群
首先切换到之前在六、(三)配置文件的目录,可以通过执行命令:cd ~/server/hadoop-2.7.4/etc/hadoop
启动集群命令:start-dfs.sh
- 启动yarn
执行命令:start-yarn.sh
- 使用jps命令查看进程
执行命令:jps
最后的stop-dfs.sh为关闭分布式服务。
在bigdata01与bigdata02主机上进行操作:
- 执行命令:jsp
七、验证服务
- 打开浏览器输入 192.168.60.129:50070 查看节点信息
- 打开浏览器输入192.168.60.129:8088查看集群分布状态
八、总结
配置环境的过程很枯燥,也不是半天一天就能完成的,但是要知道Linux一切皆文件,所以有些时候并不需要全部卸载重装。
写这个博客的初衷也是记录自己的一个小工程吧。