配置伪分布式hadoop并运行wordcount程序
ps:本教程在虚拟机和阿里云服务器上都配置成功,建议使用虚拟机(容易成功)。本实验最后将运行hadoop自带的wordcount程序用以检验配置是否成功。
实验目的
安装单机伪分布式Hadoop并运行程序,熟悉hadoop集群的部署操作。
目录见右边
实验内容
-
每人在自己本地电脑上正确安装和运行伪分布式Hadoop系统。
-
安装完成后,自己寻找一组英文网页数据,在本机上
运行Hadoop系统自带的WordCount可执行程序文件 ,并产生输出结果 -
实验结果提交:要求书写一个实验报告,其中包括:
-
系统安装运行的情况
-
实验数据说明(下载的什么网页数据,多少个HTML或text文件)
-
程序运行后在Hadoop Web作业状态,查看界面上的作业运行状态屏幕拷贝
-
实验输出结果开头部分的屏幕拷贝
-
实验体会
实验环境
硬件环境
x86笔记本电脑,Intel Core i5,NVIDIA GeForce MX150,50GB RAM
网络环境
校园网WiFi环境
软件环境
hdoop版本2.10.1
jdk版本1.8
阿里云服务器Ubuntu20.04 server ESC服务器
Ubuntu20.04 Desktop 虚拟机
VMware
XShell XFTP Xmanager等远程ssh工具\
实验方案
总体方案设计
实验结果
一共尝试以下实验
实验名称 实验 平台 结果
部署并运行haoop伪分布式配置 阿里云ESC服务器 成功
部署并运行haoop伪分布式配置 虚拟机部署成功 成功
系统安装运行的情况
见6.1-6.8
实验数据说明
名称 数据类型 运行情况 统计结果
实验数据一 XML 成功 见5.3
实验数据二 TXT 成功 见5.3
数据一
数据二
程序运行后在HadoopWeb作业界面查看作业运行状态截图
程序运行后在8088端口,启用yarn后的web截图
查看其具体信息
image-20220404124442482
img
实验输出结果开头部分的屏幕拷贝
wordcount运行界面截图(开头部分)
image-20220404232629721
Wordcount运行界面(长截图)
image-20220404232441056
wordcount的结果(开头部分)
image-20220404233632769
实验收获
见7.1-8.1
wordcount的结果(长截图)
image-20220404232411987
实验过程
环境准备:配置虚拟机
可以选择在VMware中的虚拟机中安装,也可以选择阿里云服务器安装,两种安装方式笔者都尝试过,
但是值得注意以下几点:
-
由于hadoop消耗较多内存和CPU资源,,阿里云虚拟机请选择较多资源的虚拟机,笔者选择的ESC虚拟机(双核
2G-40G)运行hadoop时经常崩溃,建议选择内存较多CPU性能较强的云服务器 -
运行阿里云ESC虚拟机请在防火墙处请开放如下端口
-
-
image-20220405191434409
<!-- -->
-
开放上述端口后,才可以通过本机浏览器远程访问hadoop webUI地址为
http://阿里云IP:50070/
http://阿里云IP:8088/
http://阿里云IP:特定端口/
<!-- -->
- 本实验针对Ubuntu虚拟机,如果用的是 CentOS/RedHat
系统,请查看相应的CentOS安装Hadoop教程_单机伪分布式配置
环境准备:配置ssh免密登录
集群、单节点模式都需要用到 SSH 登陆(类似于远程登陆,你可以登录某台
Linux 主机,并且在上面运行命令),Ubuntu 默认已安装了 SSH
client,此外还需要安装 SSH server:
sudo apt-get install openssh-server
Shell 命令
安装后,可以使用如下命令登陆本机:
ssh localhost
Shell
命令,如果登陆时需要每次输入密码,我们需要配置成SSH无密码登陆比较方便,便于hapoop操作。
首先退出刚才的 ssh,就回到了我们原先的终端窗口,然后利用 ssh-keygen
生成密钥,并将密钥加入到授权中:
exit #
ssh localhostssh-keygen -t rsa # 都按回车
cat ./id_rsa.pub >> ./authorized_keys # 加入授权
ssh localhost #如果不需要密码就算成功
ssh localhost免密登录成功界面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9pBGIPa5-1649387444127)(http://ckqqqq.gitee.io/csdn/csdn_hadoop_install/image13.png)]
image-20220325133444614
步骤一:安装java环境
下载jdk1.8安装包
https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/8/jdk/arm/linux/
wget https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/8/jdk/arm/linux/OpenJDK8U-jdk_arm_linux_hotspot_8u322b06.tar.gz
image-20220325124049087
解压
tar -zxvf 安装包名
image-20220325124102287
移动并重命名JDK包。
下载java1.8 可以选择ARM或者X64
wget XXX .tar.gz
tar -zxvf hadoop-2.10.1.tar.gz -C /java-se-8u41-ri/
mv java-se-8u41-ri/ /usr/java8
image-20220325124140202
配置Java环境变量。
echo 'export JAVA_HOME=/usr/java8' >> /etc/profile
echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile
source /etc/profile
image-20220325124201558
5.执行以下命令,查看Java是否成功安装。
java -version #注意不是java --version (离大谱了)
此处碰到问题
步骤二:下载hadoop
下载Hadoop安装包(2.10.1)
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.10.1/hadoop-2.10.1.tar.gz
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NYr0bH9L-1649387444131)(http://ckqqqq.gitee.io/csdn/csdn_hadoop_install/image18.png)]
image-20220325125509168
解压Hadoop安装包
解压Hadoop安装包至/opt/hadoop (记住该地址)
https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/current2/
tar -zxvf hadoop-2.10.1.tar.gz -C /opt/
mv /opt/hadoop-2.10.1 /opt/hadoop
配置Hadoop环境变量。
echo 'export HADOOP_HOME=/opt/hadoop/' >> /etc/profile
echo 'export PATH=$PATH:$HADOOP_HOME/bin' >> /etc/profile
echo 'export PATH=$PATH:$HADOOP_HOME/sbin' >> /etc/profile
source /etc/profile
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OgaHAtzY-1649387444132)(http://ckqqqq.gitee.io/csdn/csdn_hadoop_install/image19.png)]
image-20220325130209802
添加Java路径
(如果已将java加入环境变量可以跳过这一步)
执行以下命令,修改配置文件yarn-env.sh和hadoop-env.sh。
echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/yarn-env.sh
echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/hadoop-env.sh
image-20220325132726184
测试Hadoop是否安装成功。
hadoop version
如果返回以下信息,则表示安装成功。
image-20220325132750229
各xml配置文件含义
一般来说配置文件夹路径为
所安装的路径/etc/hadoop/
下文中操作的所有xml文件皆是在该文件夹中的,下文主要有以下几个配置文件要修改:
hadoop-env.sh:Hadoop环境变量设置
core-site.Xml:主要完成NameNode的iP和端口设置
hdfs-site.Xml:主要完成HDFS的数据块副本等参数 设置
mapred-site.Xml:主要完成JobTracker IP和端口设置,能够设置yarn的WebUI
conf/slaves:完成Slaves节点IP设置
注:这个过程仅需在主节点上进行,然后将随着主机上安装
好的Hadoop目录一起复制到所有从节点
可以通过下列命令查看XML配置文件
cd 所安装的路径/etc/hadoop/
#本例中为 /opt/hadoop/etc/hadoop/
ls #可查看xml配置文件
步骤三:运行伪分布式hadoop
.修改Hadoop配置文件core-site.xml。
- 执行以下命令开始进入编辑页面。
<!-- -->
sudo apt-get install vim
vim /opt/hadoop/etc/hadoop/core-site.xml
-
节点内插入如下内容。
-
分别指定临时文件路径和core-site端口
-
Core-site.xml
<!-- -->
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
- 按i进入编辑模式,按Esc键退出编辑模式,输入:wq保存退出。
<!-- -->
<!-- -->
- 修改Hadoop配置文件hdfs-site.xml,执行以下命令开始进入编辑页面。
<!-- -->
vim /opt/hadoop/etc/hadoop/hdfs-site.xml
- hdfs-site.xml
<!-- -->
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
- 常见端口介绍
端口 作用
9000 fs.defaultFS,如:hdfs://172.25.40.171:9000
9001 dfs.namenode.rpc-address,DataNode会连接这个端口
50070 dfs.namenode.http-address
50090 dfs.namenode.secondary.http-address,如:172.25.39.166:50090
50020 dfs.datanode.ipc.address
50475 dfs.datanode.https.address
50010 dfs.datanode.address,DataNode的数据传输端口
8088 yarn.resourcemanager.webapp.address,YARN的http端口
步骤四:启动Hadoop伪分布式
格式化HDFS文件系统
警告:该命令不可重复执行,否则执行后可能导致出现start-yarn卡死问题
hadoop namenode -format
image-20220325141140357
启动Hadoop
遇到问题 上面的命令执行得特别慢,环境:阿里云
解决方法:重启阿里云系统,阿里云ESC服务器空间太小导致
碰到两个问题一是要输入密码
依次执行以下命令,启动Hadoop。
start-dfs.sh
image-20220326194537142
正常运行截图如上
如果此处出现错误请看文末的错误与调试模块
查看已启动进程
启动成功后,执行以下命令,查看已成功启动的进程。
启动完成后,可以通过命令 jps
来判断是否成功启动,若成功启动则会列出如下进程:
-
NameNode
-
DataNode
-
SecondaryNameNode`
-
jps
<!-- -->
jps
image-20220404123340592
问题:为什么启动 Hadoop 后,见不到书上所说的 JobTracker 和 TaskTracker。
答案:这是因为新版的 Hadoop 使用了新的 MapReduce 框架( YARN,Yet
Another Resource Negotiator)。
问题:如果未出现上述进程怎么办?
答案:见后文错误与调试模块
浏览器访问(50070)
https://阿里云公网IP:50070 #如果用阿里云服务器,请确保内存足够&防火墙开放
https://localhost:50070 #如果在 本机访问
显示如下界面则表示Hadoop伪分布式环境搭建完成。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cPv6NR2A-1649387444136)(http://ckqqqq.gitee.io/csdn/csdn_hadoop_install/image26.png)]
步骤五:配置并且启动Yarn
这里是mapreduce的yarn配置
什么是yarn
YARN 是从 MapReduce 中分离出来的,负责资源管理与任务调度。YARN 运行于
MapReduce 之上,提供了高可用性、高扩展性,YARN
的更多介绍在此不展开,有兴趣的可查阅相关资料。
上述通过 start-dfs.sh 启动 Hadoop,仅仅是启动了 MapReduce
环境,我们可以启动 YARN ,让 YARN 来负责资源管理与任务调度。
修改mapred-site.xml
首先修改配置文件 mapred-site.xml,这边需要先进行重命名:
cd /opt/hadoop/etc/hadoop/
mv mapreduce.xml.template mapreduce.xml
vim mapreduce.xml
-
mapreduce.xml
-
指定yarn为mapreduce的框架
<!-- -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改yarn-site.xml
进入配置文件夹
vim yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
启动yarn
start-yarn.sh # 启动YARN
mr-jobhistory-daemon.sh start historyserver # 开启历史服务器,才能在Web中查看任务运行情况
查看已成功启动的进程
上面是出现的错误一3.启动成功后,执行以下命令,查看已成功启动的进程。
jps
image-20220326194654626
服务器访问(8088)
https://阿里云公网IP:8088 #如果用阿里云服务器,请确保内存足够&防火墙开放
https://localhost:8088 #如果在 本机访问
image-20220404124442482
成功界面如上(没有Wordcount任务)
停止hadoop运行
stop-all.sh
或者
stop-dfs.sh
stop-yarn.sh
步骤六:运行wordcount程序
问题:hadoop fs 和hdfs dfs区别
(41条消息) hadoop fs、hadoop dfs与hdfs dfs命令的区别及hadoop
fs命令说明_Shyllin的博客-CSDN博客_fs是什么意思
#在hadoop中建立input文件夹
hdfs dfs -mkdir input
将hadoop本地文件夹放入input文件夹中
hdfs dfs -ls input
查看input文件夹
hdfs dfs -put ./etc/hadoop/*.xml input #此时结果应该是一堆xml文件
image-20220326203641933
寻找example文件
如果版本为hadoop2.X,则一般来说该路径下会存在
hadoop-mapreduce-examples-2.10.1.jar 文件,如下图
安装文件夹/share/hadoop/mapreduce
我的如下 /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar
image-20220405200345628
运行wordcount
命令为
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar wordcount input /xml_output/
解释
hadoop jar example所在路径/hadoop-mapreduce-examples-2.10.1.jar workcount 输入文件名 输出文件夹位置
image-20220404232441056
查看wordcount的结果
web端可看运行状态
image-20220404124442482
hdfs dfs -get xml_output ./xml_output
#解释hdfs dfs -get HDFS上输出文件夹 ./本地文件夹
cat ./xml_output/*
#查看结果
image-20220404232411987
实验收获
问题与调试
本次大数据实验笔者遇到了无数是问题T_T,下面是笔者遇到的问题与解决方法,可供大家参考
问题一:启动伪分布式时缺少 datanode/namenode/secondary/
image-20220403155931602
启动完成后,可以通过命令 jps
来判断是否成功启动,若成功启动则会列出如下进程:
- NameNode
- 如果不存在请检查xml文件配置
- DataNode
- 如果不存在可
- [https://www.cnblogs.com/zephyr-1/p/6414081.html]
- SecondaryNameNode
- 如果不存在请重启
stop-all.sh
start-dfs.sh
image-20220404123340592
问题二:报错如下
There are 0 datanode(s) running and no node(s) are excluded in this
operation.、
解决方法:https://blog.csdn.net/weixin_41374755/article/details/107146445
问题三:启动yarn时卡死(这个卡了我半天)
start-yarn.sh
image-20220326194619108
解决方法:
出现上述问题可能是格式化两次hadoop,导致没有datanode
解决方法1:重启linux,再使用start-dfs.sh和start-yarn.sh 重启一下hadoop
解决办法2:找到hadoop安装目录下
hadoop-2.4.1/data/dfs/data里面的current文件夹删除
问题四:启动dfs时出现以下错误
image-20220325134233714
解决方法:hdfs-site.xml配置错误,检查配置
问题五:connect错误
image-20220403211453780
解决方式:.
检查ssh
启动yarn
image-20220403211536586
问题六:hdfs dfs -mkdir错误
解决方法:
image-20220403210304944
问题七:Connect Refuse
bug
mkdir: Call From iZ8vbhsfhga8yj95cx1410Z/172.19.51.155 to localhost:9000
failed on connection exception: java.net.ConnectException: Connection
refused; For more details see:
http://wiki.apache.org/hadoop/ConnectionRefused
image-20220403160727744
解决方法:检查yarn配置,
问题八 :服务器卡死
原因:阿里云内存和CPU资源不足,阿里云差评!
解决方法:
使用top命令kill掉占用大量资源的进程,重新启动阿里云服务器&服务器升级扩容,换服务器。
问题九
mkdir: Call From iZ8vbhsfhga8yj95cx1410Z/172.19.51.155 to localhost:9000
failed on connection exception: java.net.ConnectException: Connection
refused; For more details see:
http://wiki.apache.org/hadoop/ConnectionRefused
解决方法:检查yarn配置,
实验心得
本次实验过程将在4月10日前上传到我的CSDN 博客上(用户名:
ckqqqqq)。连接还没有出来,因为博客图床还在审核中。
本次大数据实验中我大约碰到了10个问题,这些问题的原因和解决方法我总结如上(见问题与调试模块),在解决问题的过程中我加深了对linux和hadoop的理解,提升了我的实践能力。
此外除了在阿里云上配置hadoop伪分布式外,我还在自己的**虚拟机上尝试过配置hadoop伪分布式。**总的来说,后者比前者容易,因为前者要考虑防火墙和服务器资源等问题。