一、事前了解
1.完全分布式
Hadoop的各个组件运行在多个节点上。每个节点都是独立的实体,有自己的一份数据副本和计算能力。
真正的分布式,由3个及以上的实体机或者虚拟机组件的机群。
2.伪分布式
从字面理解:不是真正的分布式。Hadoop的所有组件都运行在同一个节点上。
伪分布式是将多态机器的任务放到一台机器运行
二者的区别和部署:Hadoop伪分布式和完全分布式:理解两者的区别与部署-百度开发者中心 (baidu.com)
(感兴趣的可以看一下)
注意:下面内容使用是一台虚拟机安装Hadoop(可以看作伪分布式搭建),之后假如我用伪分布式这一台虚拟机再克隆两台虚拟机并做一些改正与配置(这个可以看作完全分布式)
二、安装VMwareWorkstation Pro
本人使用的是17.5.2版本的VMwareWorkstation Pro
下载教程如下:
【虚拟机软件】 VMware Workstation Pro 17 安装教程(附官方下载地址)
下载视频教程如下:
https://www.bilibili.com/video/BV1SapseqERC/?share_source=copy_web&vd_source=cb6d0e6ee2114e38d0c21771ef4a0f70
目前VM有个人免费版本,可以直接使用,不需要密钥
有需要的话可以去百度搜索VM密钥,大把
三、创建虚拟机及Hadoop伪分布式搭建
(已安装好虚拟机的可以跳过)
1、创建虚拟机的事前准备
Minimal ISO
Mini版本,只有必要的软件,自带的软件最少(没有图形化界面)
CentOS-7-x86_64-Minimal-2009.iso978M
DVD ISO
标准版本安装(服务器安装推荐使用,包含一些基本的软件和图形化界面)
CentOS-7-x86_64-DVD-2207-02.iso4个多G
Everything ISO
对完整版安装盘的软件进行补充,集成所有软件(图形化界面版)
很大,没下过,好像有十几个G,似乎在官方的安装指南看到的。
CentOS 7镜像下载地址和方法
centos-7-isos-x86_64安装包下载_开源镜像站-阿里云 (aliyun.com)
我安装的是CentOS 7 64位
个人百度网盘链接(国内下载应该比官网快):
链接:https://pan.baidu.com/s/1eLpjNNCBqJVZd9jG-2xPIg
提取码:dhqh
官网下载地址:
CentOS Mirrors List
阿里下载地址:
centos-7-isos-x86_64安装包下载_开源镜像站-阿里云 (aliyun.com)
常用的服务器(Xftp,Xshell,finalshell)
链接:https://pan.baidu.com/s/177CHiXwdJ5KyHomirw-57A
提取码:9lj7
Winscp下载链接:
WinSCP :: Official Site :: Free SFTP and FTP client for Windows
jdk安装包
官网下载:Java Downloads | Oracle
我下载的是:jdk-8u241-linux-x64.tar.gz
官网可以找到:
个人网盘链接:(含hadoopLinux安装包及配置文件)
链接:https://pan.baidu.com/s/1ZZzbqUV7dZZCROkGGExu8A
提取码:vsv1
注意:不想找的可以直接下载,本实验使用的jdk和hadoop及配置文件压缩包都包含在内。
hadoopLinux安装包
官网地址:Apache Download Mirrors
Apache Hadoophadoop-2.6.5.tar.gz下载地址(我的网盘里有):Apache Hadoop
对“介绍了如何从Apache官方网站和清华大学开源软件镜像站下载Hadoop的不同版本,包括源码版和编译版的区别。”感兴趣的可以了解以下网站:hadoop的官网下载和各版本下载方法_hadoop下载-CSDN博客
2、创建虚拟机
①打开VM点击创建新的虚拟机
②
③我先给虚拟机配置,后期再装光盘,简易布置
④
⑤
⑥
⑦
⑧
⑨
⑩
⑪
⑫
⑬
⑭
⑮编辑虚拟机,开始给虚拟机装系统
⑯
⑰然后打开虚拟机,等待系统安装。安装结束后
⑱设置桌面
⑲选择磁盘
⑳最后,开始安装
21.设置用户密码
然后等待系统安装完毕后重启
重启后
常规可以以普通管理员身份student进入
但是为了权限和接下来Hadoop的搭建,我们以超级管理员root的身份进入,这样就不存在权限不足问题
然后输入密码,密码是一开始设置的
然后点前进,输入选择这个
一直前进就行了,这样系统就安装完成了
3、Hadoop伪分布式的搭建
⑴确认网络是否打开
打开终端,输入ping www.baidu.com和ping 8.8.8.8来检测网络,检测过程可以用Ctrl+c停止
ping www.baidu.com
ping 8.8.8.8
检查网络状态
可能一:网络正常
可能二:网络不可达
以下是解决方法:
1.输入ifconfig查看ens33中的ip
2.进入配置文件更改配置保存并退出
cd /etc/sysconfig/network-scripts
vi ifcfg-ens33
然后进入命令模式,点i,进入输入模式,找到ONBOOT=no,然后将弄改为yes(开机启动网卡)
然后Esc,然后输入:wq,保存并退出
3.开启网卡
ifup ens33
运行结果
如果网卡激活成功跳过此步,否则先检查虚拟网络有没有开启,在本地服务中开启NAT模式
4.重启网络
systemctl restart network
接着再重新测试ping www.baidu.com
⑵设置静态网络
1、进入网络配置文件配置静态网络
使用vim命令进入网络配置文件内的命令模式
vim /etc/sysconfig/network-scripts/ifcfg-ens33
运行结果
进入以上页面按i键进入编辑模式,再将BOOTPROTO="dhcp"的值改成static(将网卡改为静态,否则每次打开虚拟机都会随机生成一个IP地址,不利于后续使用服务器连接虚拟机)
ONBOOT的值改成yes(开机自动打开)(前面已经设置过)
设置IP地址:IPADDR="192.168.36.0"
子网掩码:NETMASK="255.255.255.0“(默认不变)
默认网关:**GATEWAY="138.168.36.2"**(默认不变)
DNS=“8.8.8.8”(谷歌的)(或)DNS=“180.76.76.76”(百度的)两个哪个都行
[也可以设置两个:DNS1="8.8.8.8" DNS2="180.76.76.76"]
最终代码:
然后退出编辑,操作和上述一样,就不讲了
然后输入ficonfig命令,查看是否保存成功
若没有保存上,则输入
service network restart
看到确定就完成了
2、关闭防火墙
原因:下面需要把宿主机上Linux的安装包(jdk和hadoop)传到虚拟机,不关防火墙无法传入
关闭防火墙(stop)
systemctl stop firewalld.service
没有报错意味着成功
禁用防火墙(disable)
systemctl disable firewalld.service
成功代码
查看防火墙状态
systemctl status firewalld.service
成功代码
3、可能遇到的问题
win10下的VMware还原网络设置,无法创建VMware网络适配器解决办法
参考网站:win10下的VMware还原网络设置,无法创建VMware网络适配器解决办法_vmware虚拟网络编辑器中还原默认设置卡死-CSDN博客
⑶将jdk和hadoop压缩包传到/opt/software目录下
1、创建software目录
用处:用于存放后续软件
cd /opt/
mkdir software
运行代码
2、从win传包到虚拟机
⑴连接服务器和虚拟机,将jdk和hadoop的压缩包传到/opt/software目录下
做法:安装FinalShell(在前面常用服务器的网盘里,里面的服务器都可以使用,可以去b站找使用教程)后打开,将jdk和hadoop的压缩包传到/opt/software目录下
FinalShell使用方法,教程视频:FinalShell使用方法_哔哩哔哩bilibili
步骤:①打开FinalShell,然后
②
③双击打开
④成功画面
⑤找到/opt/software目录
⑥右键,选择上传,找到下载的jdk和hadoop文件传入
3、进行jdk与hadoop的解压操作
①要对jdk和hadoop进行解压,首先需要进入其文件的所在文件位置(对与命令而言路径很重要)
cd /opt/software
②进行jdk与hadoop的解压操作
tar -zxvf jdk-8u241-linux-x64.tar.gz
tar -zxvf hadoop-2.6.5.tar.gz
③解压结束后,使用ls代码来展示software文件夹内的文件
成功的代码:
④删除压缩包文件
因为我们只需要压缩包用过压缩后文件,所有我们可以删除压缩包hadoop-2.6.5.tar.gz和jdk-8u241-linux-x64.tar.gz
rm hadoop-2.6.5.tar.gz
rm jdk-8u241-linux-x64.tar.gz
结果
然后检查目录里是否还有压缩包文件
输入ls
上述结果,表示已经删除压缩包文件
⑷配置JDK和Hadoop环境变量
①修改文件名为jdk1.8
mv jdk1.8.0_241/ jdk1.8
②添加jdk与hadoop的环境变量,在/etc/profile末尾追加下列内容
vi /etc/profile
vi操作与上述一样,i进入插入模式,Esc返回命令模式,然后:wq,保存并退出
在文本最末尾添加下述代码
export JAVA_HOME=/opt/software/jdk1.8
export HADOOP_HOME=/opt/software/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/bin
③刷新环境变量
source /etc/profile
可能报错:
用户需运行特定命令以获取详细信息并进行故障排除,然后重新连接服务器。
按系统给的提示输入abrt-cli list --since 1726255046
我们可以看得系统显示的原因:
解决方法:启用ABRT的自动汇报
abrt-auto-reporting enabled
然后重新进入操作系统:
退出当前的登录
exit
然后重新打开终端,先进入software文件夹,然后再次输入source /etc/profile
cd /opt/software
source /etc/profile
然后我们检测一下JDK是否安装成功
java -version
成功代码
检测一下Hadoop是否安装成功
hadoop version
成功代码
成功配置
⑸配置主机名称和IP
①配置主机名称
修改主机名称为hadooop100
(也可以改为hadoop1等等,为好记)
有两种修改方法
hostnamectl set-hostname hadoop100
(或)
vim /etc/hostname
将名称改为你想改的
可以使用命令
成功代码hostnamectl来查看主机名称
②配置主机名映射IP地址
原因:配置主机名与IP地址映射后,访问服务器上部署的服务就不用在记住IP地址,只需要输入服务器名称即可访问服务,相比记住IP地址访问应用要方便。
先返回虚拟机的根目录
cd
然后修改/etc/hosts文件
vim /etc/hosts
这样我们测试主机名映射IP地址时,只需要输入主机名称,而不需要输入主机IP
⑹设置ssh免密登录
原因:在后续连接不同的机器时,不需要重复多次输入密码,使过程简便
首先创建密钥对,产生公钥与私钥对
ssh-keygen -t rsa
接着什么都不用管,回车3次,出现下列代码,表示成功
然后将本机的公钥复制到localhost中
ssh-copy-id localhost
运行
然后检验是否需要输入密码,ssh +自己的主机名称
ssh hadoop100
ssh localhost
运行
可以看到我们不需要再输入密码,则表示我们的免密登录设置成功
⑺修改Hadoop配置文件
伪分布式运行模式
★由于接下来要配置许多东西所以一些基本命令我写在下面,后面不会再说了
◆配置文件时, 按 A 键进入编辑模式
◆文件配好后, 按 Esc 键,然后再再最下面输入 :wq 保存并退出
有两种修改方法
①已经下载好配置文件,直接上传
进行伪分布式搭建的过程中需要进行配置文件的修改,此处用提前已经编辑好的配置文件覆盖原有文件的方式进行修改,将配置文件中的 8个配置文件通过FinalShell传输到/opt/software/hadoop2.6.5/etc/hadoop进行覆盖。
在上述网盘的事前准备中我们已经下载好配置文件的压缩包
首先我们在win(宿主机)上解压好配置文件(注意:需要解压)
然后打开
⑫然后使用我们的FinalShell将配置文件里的所有文件传入/opt/software/hadoop2.6.5/etc/hadoop中进行覆盖
这样,修改Hadoop配置文件就完成了
②没有下载配置文件,手动修改
⒈查看hadoop 目录结构
首先先进入hadoop目录
cd /opt/software/hadoop-2.6.5/etc/hadoop
然后我们浏览hadoop目录下的文件
ll
运行结果
上述为需要配置的文件
⒉配置hadoop-env.sh
vim hadoop-env.sh
#号后面的蓝色代码都是注释
更改下列代码
⒊配置core-site.xml(核心组件)
vim core-site.xml
需要在和之间加入的代码:
<!-- 指定 HDFS 中 NameNode 的地址 -->
<!-- 默认节点(写自己主机的ip)端口,端口默认为9000 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop100:9000</value>
</property>
<!-- 指定 Hadoop 运行时产生文件的存储目录 -->
<!-- hdfs的临时文件的目录***这个要记好,后面初始化错误可能会用到*** -->
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/software/hadoop-2.6.5/tmp</value>
</property>
⒋配置hdfs-site.xml(文件系统)
vim hdfs-site.xml
需要在和之间加入的代码:
<!-- 设置数据块应该被复制的份数(和集群机器数量相等,目前只有一个填1,以后有几台就填几台) -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--指定NameNode运行产生的文件存储目录-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/module/hadoop-2.6.5/dfs/name</value>
</property>
<!--指定DataNode运行产生的文件存储目录-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/module/hadoop-2.6.5/dfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop100:50090</value>
</property>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.https-address</name>
<value>hadoop100:50091</value>
</property>
<!--namenode的hdfs-site.xml是必须将dfs.webhdfs.enabled属性设置为true,否则就不能使用webhdfs的LISTSTATUS、LISTFILESTATUS等需要列出文件、文件>夹状态的命令,因为这些信息都是由namenode来保存的。-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
⒌配置mapred-site.xml.template(计算框架文件)
添加一个新的名为:mapred-site.xml文件,并且将mapred-site.xml.template文件内容覆盖进去
cp mapred-site.xml.template mapred-site.xml
然后编辑
vim mapred-site.xml
需要在和之间加入的代码:
<!-- mapreduce的工作模式:yarn -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 设置jobhistoryserver 没有配置的话 history入口不可用 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop100:10020</value>
</property>
<!-- 配置web端口 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop100:19888</value>
</property>
⒍配置 yarn-site.xml 文件
vim yarn-site.xml
需要在和之间加入的代码:
<!--用于指定resourcemanager的主机名-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop100</value>
</property>
<!-- 这个属性用于指定在进行mapreduce作业时,yarn使用mapreduce_shuffle混洗技术 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--用于指定混洗技术对应的字节码文件-->
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!-- 用于指定在RM中的应用程序管理器接口的地址 -->
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoop100:8032</value>
</property>
<!--用于指定调度程序接口的地址 -->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop100:8030</value>
</property>
<!-- 用于指定rm下的resource-tracker的地址 -->
<property>
<name>yarn.resourcemanager.resourcetracker.address</name>
<value>hadoop100:8031</value>
</property>
<!--用于指定RM管理界面的地址-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoop100:8033</value>
</property>
<!--用于指定RM的web访问的地址 -->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop100:8088</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>3072</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>2</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>256</value>
</property>
⒎配置master的slaves文件
vim slaves
这样,修改Hadoop配置文件就完成了
⑻格式化后启动、调用实例、停止所有运行的hadoop进程
①格式化集群
格式化 NameNode(第一次启动时格式化,以后就不要总格式化):
cd
hdfs namenode -format
注意: 这里如果安装的时候多次初始化,会导致错误,解决方法是删除
/opt/hadoop
目录下的tmp文件(就是上面配置文件core-site.xml中需要注意的地方)
②开启hadoop服务
开启hadoop之前需要进入hadoop下面的文件夹,我们进入文件夹并浏览文件夹内容
cd /opt/software/hadoop-2.6.5/sbin
ls
运行结果
红框为启动和关闭hadoop全部服务进程
蓝框为启动和关闭hadoop的HDFS服务进程
可以根据自己需要来启动与关闭
我这里就启动全部进程来演示一遍
start-all.sh
完成后输入jps命令可以查看到Jps、NameNode、DataNode与SecondaryNameNode共四个进程)
如果你没有选择启动全部进程,而选择启动HDFS服务进程,就没有ResourceManager与NodeManager两个进程,需要开启yarn服务才能查看
③开启hadoop可能遇到的问题
⒈如果报:localhost: Host key verification failed. 错时
按以下操作解决:
stop-all.sh //关闭hadoop
ssh-keygen -R hadoop //-R 后面是自己的主机IP或者自己更改过的IP名称
然后再重新启动hadoop
⒉出现:root@mycomputer’s password: mycomputer: Permission denied, please try again. 错误
解决办法:修改root密码
passwd root //修改root密码
sudo vi /etc/ssh/sshd_config //.辑配置文件,允许以 root 用户通过 ssh 登录
找到:PermitRootLogin prohibit-password禁用
添加:PermitRootLogin yes
systemctl restart sshd //启动ssh
cd /etc/ssh/ //进入ssh目录
vim sshd_config //进入查看,(里面 port 22 的 # 号是否去掉,如果没就去掉)
ps -e | grep sshd //检查一下ssh服务是否开启
ss -lnt //查看22端口是否开启
然后启动,一路回车
如果发现还报:mycomputer: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 异常,以下解决办法:
//原因:由于更换root密码,导致当前账号可能没有配置免密登录,所以要创建公钥和私钥
ssh-keygen -t rsa
cd .ssh
ls
touch authorized_keys //创建authorized_keys文件
chmod 600 authorized_keys //修改权限为600
ls
cat id_rsa.pub >> authorized_keys //将公钥追加到authorized_keys文件中去
cd //返回到mycomputer
ssh mycomputer //试试看能否成功免密登录
start-all.sh //启动hadoop
④用浏览器web 端查看 HDFS 文件系统
登录集群web页面查看集群信息
⒈打开浏览器访问 http://此处替换为hadoop100的IP地址:50070
例如:http://192.168.36.128:50070(我的)
⒉打开浏览器访问 http://此处替换为hadoop100的IP地址:8088
例如:http://192.168.36.128:8088(我的)
可以在win浏览器打开,也可以在虚拟机的火狐浏览器打开
恭喜你,已经成功搭建Hadoop伪分布式
⑤关闭Hadoop服务进程
关闭集群命令为:stop-all.sh 实验完成后记得关闭集群哦!
stop-all.sh
四、实验练习
实验任务:在伪分布模式上进行WordCount官方案例
(WordCount官方案例是指在WordCount项目中,提供的实际应用示例或案例研究。WordCount是一个常见的数据处理任务,尤其在编程和数据分析领域。它通常涉及统计一个文本文件或字符串中每个单词出现的频率。)
1、在本机的**/opt/software/hadoop-2.6.5**上创建input文件,并写入任意内容
首先退回根目录cd,然后进入到hadoop-2.6.5的文件夹中,然后写入任意内容,如'aaa bbb ccc aaa bbb aaa' //字符串
cd
cd /opt/software/hadoop-2.6.5
echo 'aaa bbb ccc aaa bbb aaa'>input
2、 将input文件上传至集群,并放置在集群的根目录/下
首先需要先开启hadoop集群服务:start-all.sh
然后将input文件上传至集群,并放置在集群的根目录/下:hdfs dfs -put input /
解释:
这条命令是用来将本地文件系统中的文件上传到HDFS(Hadoop Distributed File System)中。
具体来说:
hdfs dfs:这是Hadoop提供的命令行工具,用于操作HDFS。
-put:这个选项用于将本地文件或目录上传到HDFS。
input:这是本地文件系统中要上传的文件或目录的路径。
/:这是HDFS中的目标路径,即文件上传到HDFS根目录下。
start-all.sh
hdfs dfs -put input /
3、执行share目录下的MapReduce程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount input output
代码解释:
hadoop jar:这是用来运行一个JAR文件的Hadoop命令。JAR文件通常包含了要执行的程序和它的依赖。
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar:这是JAR文件的路径。这个JAR文件包含了Hadoop MapReduce的示例程序。在这个路径中,hadoop-mapreduce-examples-2.6.5.jar 是示例程序的JAR文件,2.6.5 是版本号。
wordcount:这是JAR文件中的一个示例程序的名称。在这里,它指的是一个WordCount程序,它计算文本文件中每个单词的出现次数。
input:这是输入数据在HDFS中的路径。
wordcount 程序会从这个路径读取数据。
output:这是程序运行的输出路径。在HDFS中,程序的结果会被写入到这个路径下。
这条命令的意思是:使用 Hadoop 的 MapReduce 示例 JAR 文件中的 WordCount 程序,对 HDFS 中
input
路径下的文件进行处理,并将结果写入到 HDFS 的
output
路径下。
4、查看集群上的输出结果
hdfs dfs -cat /user/root/output/*
代码解释:
hdfs dfs:这是Hadoop提供的命令行工具,用于操作HDFS。
-cat:这个选项用于显示指定文件或目录的内容到标准输出(通常是终端或命令行窗口)。 /user/root/output/:这是要显示的文件路径,其中 * 是一个通配符,表示这个路径下的所有文件。 所以,hdfs dfs -cat /user/root/output/ 这条命令的意思是:显示HDFS路径 /user/root/output/ 下所有文件的内容
这个时候会出现一个错误代码,表示没有这样的文件或目录
说明 HDFS 中没有创建该目录,那么我们就创建一个目录,如下操作
①创建 /user/root 目录
首先需要在 HDFS 中创建 /user/root 目录:
hdfs dfs -mkdir -p /user/root
②上传输入文件到 HDFS
将本地的 input 文件上传到 HDFS:
hdfs dfs -put input /user/root/input
③验证上传的文件
检查文件是否成功上传:
hdfs dfs -ls /user/root/input
④重新运行 WordCount 任务
确认文件存在后,重新运行你的 Hadoop WordCount 任务:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /user/root/input /user/root/output
⑤查看集群上的输出结果
hdfs dfs -cat /user/root/output/*
当代运行结束后,出现上述代码,则表示成功完成WordCount官方案例,正确输出每个单词出现的频率
⑥关闭hadoop进程
别忘了关闭hadoop进程:stop-all.sh
攀过那座山最终靠的不是技巧,而是落子无悔的勇气!
祝各位看官“前程似海,来日方长”
版权归原作者 一整天不想干活 所有, 如有侵权,请联系我们删除。