【大数据Hadoop实战篇】

【大数据Hadoop实战篇】大数据 Hadoop 实战 10 分钟带你入门 Hadoop 手把手教你搭建分布式集群系统

申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址
全文共计21000字,阅读大概需要10分钟
欢迎关注我的个人公众号:不懂开发的程序猿

第1章 Hadoop概述

1.1 Hadoop是什么

在这里插入图片描述

1.2 Hadoop发展历史(了解)

在这里插入图片描述
在这里插入图片描述

1.3 Hadoop三大发行版本(了解)

1.4 Hadoop优势(4高)

在这里插入图片描述
在这里插入图片描述

1.5 Hadoop组成(面试重点)

1.5.1 HDFS架构概述

Hadoop Distributed File System,简称HDFS,是一个分布式文件系统。

1.5.2 YARN架构概述

Yet Another Resource Negotiator简称YARN,另一种资源协调者,是Hadoop的资源管理器。

在这里插入图片描述

1.5.3 MapReduce架构概述

MapReduce将计算过程分为两个阶段:MapReduce
1)Map阶段并行处理输入数据
2)Reduce阶段对Map结果进行汇总




1.5.4 HDFS、YARN、MapReduce三者关系

在这里插入图片描述

1.6 大数据技术生态体系

在这里插入图片描述

1.7 大数据推荐系统架构图

在这里插入图片描述

第2章 Hadoop运行环境搭建(开发重点)

2.1 模板虚拟机环境准备

0)安装模板虚拟机,IP地址192.168.10.100、主机名称hadoop100、内存4G、硬盘50G
1)hadoop100虚拟机配置要求如下(本文Linux系统全程以CentOS-7.5为例,并用root用户权限进行操作)
(1)使用yum安装需要虚拟机可以正常上网,yum安装前可以先测试下虚拟机联网情况
(2)安装epel-release
注:Extra Packages for Enterprise Linux是为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux。相当于是一个软件仓库,大多数rpm包在官方 repository 中是找不到的)








yum install -y epel-release 

(3)注意:如果Linux安装的是最小系统版,还需要安装如下工具;如果安装的是Linux桌面标准版,不需要执行如下操作
net-tool:工具包集合,包含ifconfig等命令

yum install -y net-tools 

vim:编辑器

yum install -y vim 

2)关闭防火墙,关闭防火墙开机自启

systemctl stop firewalld systemctl disable firewalld.service 

5)在/opt目录下创建文件夹,并修改所属主和所属组
(1)在/opt目录下创建module、software文件夹

mkdir /opt/module mkdir /opt/software 

在这里插入图片描述
6)卸载虚拟机自带的JDK
注意:如果你的虚拟机是最小化安装不需要执行这一步。




rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps 

参数含义:
rpm -qa:查询所安装的所有rpm软件包
grep -i:忽略大小写
xargs -n1:表示每次只传递一个参数
rpm -e –nodeps:强制卸载软件
7)重启虚拟机










reboot 

2.2 克隆虚拟机

vim /etc/sysconfig/network-scripts/ifcfg-ens33 

改成:

DEVICE=ens33 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static NAME="ens33" IPADDR=192.168.10.102 PREFIX=24 GATEWAY=192.168.10.2 DNS1=192.168.10.2 

在这里插入图片描述
(2)查看Linux虚拟机的虚拟网络编辑器,编辑->虚拟网络编辑器->VMnet8
在这里插入图片描述
在这里插入图片描述






vim /etc/hostname hadoop102 

(2)配置Linux克隆机主机名称映射hosts文件,打开/etc/hosts

vim /etc/hosts 
192.168.10.100 hadoop100 192.168.10.101 hadoop101 192.168.10.102 hadoop102 192.168.10.103 hadoop103 192.168.10.104 hadoop104 192.168.10.105 hadoop105 192.168.10.106 hadoop106 192.168.10.107 hadoop107 192.168.10.108 hadoop108 

4)重启克隆机hadoop102

reboot 
192.168.10.100 hadoop100 192.168.10.101 hadoop101 192.168.10.102 hadoop102 192.168.10.103 hadoop103 192.168.10.104 hadoop104 192.168.10.105 hadoop105 192.168.10.106 hadoop106 192.168.10.107 hadoop107 192.168.10.108 hadoop108 

(d)将桌面hosts文件覆盖C:\Windows\System32\drivers\etc路径hosts文件

2.3 在hadoop102安装JDK

ls /opt/software/ 

在这里插入图片描述
4)解压JDK到/opt/module目录下
tar -zxvf jdk-8u333-linux-x64.tar -C /opt/module/




tar -zxvf jdk-8u333-linux-x64.tar.gz -C /opt/module/ 

在这里插入图片描述
5)配置JDK环境变量
(1)新建/etc/profile.d/my_env.sh文件




vim /etc/profile.d/my_env.sh 

添加如下内容

#JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_333 export PATH=$PATH:$JAVA_HOME/bin 
(2)保存后退出 
:wq! 
(3)source一下/etc/profile文件,让新的环境变量PATH生效 
source /etc/profile 

6)测试JDK是否安装成功

java -version 

在这里插入图片描述
2.4 在hadoop102安装Hadoop
安装方式同上(JDK)
1)用XShell文件传输工具将hadoop-3.1.3.tar.gz导入到opt目录下面的software文件夹下面
2)进入到Hadoop安装包路径下








cd /opt/software/ 

3)解压安装文件到/opt/module下面

tar -zxvf hadoop-3.3.3.tar.gz -C /opt/module/ 

4)查看是否解压成功

ls /opt/module/hadoop-3.3.3 
pwd 

在这里插入图片描述

(2)打开/etc/profile.d/my_env.sh文件

vim /etc/profile.d/my_env.sh 

在my_env.sh文件末尾添加如下内容

#HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-3.1.3 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin 

在这里插入图片描述

保存并退出:

:wq! 

(3)让修改后的文件生效

source /etc/profile 

6)测试是否安装成功

hadoop version 

在这里插入图片描述

7)重启(如果Hadoop命令不能用再重启虚拟机)

reboot 

2.5 Hadoop目录结构

1)查看Hadoop目录结构
在这里插入图片描述
2)重要目录
(1)bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本
(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例














第3章 Hadoop运行模式

3.1.0 本地运行模式(官方WordCount)(省略)

3.1.1 伪分布式运行模式(省略)

3.2 完全分布式运行模式(开发重点)

3.2.1 虚拟机准备

3.2.2 编写集群分发脚本xsync

1)scp(secure copy)安全拷贝
(1)scp定义
scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)
(2)基本语法






scp -r $pdir/$fname $user@$host:$pdir/$fname 
scp -r /opt/module/jdk1.8.0_333 root@hadoop103:/opt/module 

(b)在hadoop103上,将hadoop102中/opt/module/hadoop-3.1.3目录拷贝到hadoop103上。

scp -r root@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/ 

(c)在hadoop103上操作,将hadoop102中/opt/module目录下所有目录拷贝到hadoop104上。

scp -r root@hadoop102:/opt/module/* root@hadoop104:/opt/module 

2)rsync远程同步工具
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
(1)基本语法






rsync -av $pdir/$fname $user@$host:$pdir/$fname 
选项 功能
-a 归档拷贝
-v 显示复制过程

3)xsync集群分发脚本
(1)需求:循环复制文件到所有节点的相同目录下
(2)需求分析:
(a)rsync命令原始拷贝:






rsync -av /opt/module root@hadoop103:/opt/ 
echo $PATH 

在这里插入图片描述
(3)脚本实现
(a)在/root/bin目录下创建xsync文件




cd /root mkdir bin cd bin vim xsync 

在这里插入图片描述
在该文件中编写如下代码

#!/bin/bash #1. 判断参数个数 if [ $# -lt 1 ] then echo Not Enough Arguement! exit; fi #2. 遍历集群所有机器 for host in hadoop102 hadoop103 hadoop104 do echo ==================== $host ==================== #3. 遍历所有目录,挨个发送 for file in $@ do #4. 判断文件是否存在 if [ -e $file ] then #5. 获取父目录 pdir=$(cd -P $(dirname $file); pwd) #6. 获取当前文件的名称 fname=$(basename $file) ssh $host "mkdir -p $pdir" rsync -av $pdir/$fname $host:$pdir else echo $file does not exists! fi done done 

在这里插入图片描述

(b)修改脚本 xsync 具有执行权限

chmod 777 xsync 

(c)测试脚本

xsync /root/bin 

(d)将脚本复制到/bin中,以便全局调用

cp xsync /bin/ 
source /etc/profile 

3.2.3 SSH无密登录配置

ssh hadoop103 

(2)ssh连接时出现Host key verification failed的解决方法

如果出现如下内容

Are you sure you want to continue connecting (yes/no)? 
exit 

(1)免密登录原理

在这里插入图片描述
(2)生成公钥和私钥

cd /root ls -al cd .ssh/ ssh-keygen -t rsa 
ssh-copy-id hadoop102 ssh-copy-id hadoop103 ssh-copy-id hadoop104 

注意:
还需要在hadoop103上采用root账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。
还需要在hadoop104上采用root账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。
还需要在hadoop102上采用root账号,配置一下无密登录到hadoop102、hadoop103、hadoop104;






3).ssh文件夹下(~/.ssh)的文件功能解释

known_hosts 记录ssh访问过计算机的公钥(public key)
id_rsa 生成的私钥
id_rsa.pub 生成的公钥
authorized_keys 存放授权过的无密登录服务器公钥

3.2.4 集群配置

3)配置集群
(1)核心配置文件
配置core-site.xml




cd $HADOOP_HOME/etc/hadoop vim core-site.xml 

内容如下:

<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:8020</value> </property> <!-- 指定hadoop数据的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.1.3/data</value> </property> <!-- 配置HDFS网页登录使用的静态用户为atguigu --> <property> <name>hadoop.http.staticuser.user</name> <value>atguigu</value> </property> </configuration> 
vim hdfs-site.xml 

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- nn web端访问地址--> <property> <name>dfs.namenode.http-address</name> <value>hadoop102:9870</value> </property> <!-- 2nn web端访问地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:9868</value> </property> </configuration> 
vim yarn-site.xml 

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定MR走shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定ResourceManager的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value> </property> <!-- 环境变量的继承 --> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> </configuration> 
vim mapred-site.xml 

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定MapReduce程序运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> 

4)在集群上分发配置好的Hadoop配置文件

xsync /opt/module/hadoop-3.3.3/etc/hadoop/ 

5)去hadoop103和hadoop104上查看文件分发情况

cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml 

3.2.5 群起集群

1)配置workers

vim /opt/module/hadoop-3.3.3/etc/hadoop/workers 

在该文件中增加如下内容:

hadoop102 hadoop103 hadoop104 

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件

xsync /opt/module/hadoop-3.1.3/etc 
hdfs namenode -format (2)启动HDFS 
sbin/start-dfs.sh 

(3)在配置了ResourceManager的节点(hadoop103)启动YARN

sbin/start-yarn.sh 

在这里插入图片描述

hadoop fs -mkdir /input hadoop fs -put $HADOOP_HOME/wcinput/world.txt /input 

上传大文件

hadoop fs -put /opt/software/jdk-8u333-linux-x64.tar.gz / 

(4)下载

hadoop fs -get /jdk-8u333-linux-x64.tar.gz ./ 

(5)执行wordcount程序

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output 

3.2.6 配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:

1)配置mapred-site.xml
和前面配置自定义配置文件类似

vim mapred-site.xml 

在该文件里面增加如下配置。

<!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop102:10020</value> </property> <!-- 历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop102:19888</value> </property> 

2)分发配置

xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml 

3)在hadoop102启动历史服务器

mapred --daemon start historyserver 

4)查看历史服务器是否启动

jps 

3.2.7 配置日志的聚集

vim yarn-site.xml 

在该文件里面增加如下配置。

<!-- 开启日志聚集功能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置日志聚集服务器地址 --> <property> <name>yarn.log.server.url</name> <value>http://hadoop102:19888/jobhistory/logs</value> </property> <!-- 设置日志保留时间为7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> 

2)分发配置

xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml 

3)关闭NodeManager 、ResourceManager和HistoryServer

sbin/stop-yarn.sh mapred --daemon stop historyserver 

4)启动NodeManager 、ResourceManage和HistoryServer

start-yarn.sh mapred --daemon start historyserver 

5)删除HDFS上已经存在的输出文件

hadoop fs -rm -r /output 

6)执行WordCount程序

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output 

7)查看日志
(1)历史服务器地址
http://hadoop102:19888/jobhistory
(2)历史任务列表






(4)运行日志详情 

在这里插入图片描述

3.2.8 集群启动/停止方式总结

1)各个模块分开启动/停止(配置ssh是前提)常用
(1)整体启动/停止HDFS

start-dfs.sh/stop-dfs.sh 
(2)整体启动/停止YARN 
start-yarn.sh/stop-yarn.sh 
hdfs --daemon start/stop namenode/datanode/secondarynamenode 
(2)启动/停止YARN 
yarn --daemon start/stop resourcemanager/nodemanager 

3.2.9 编写Hadoop集群常用脚本

1)Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver):myhadoop.sh

cd /root/bin vim myhadoop.sh 

输入如下内容

#!/bin/bash if [ $# -lt 1 ] then echo "No Args Input..." exit ; fi case $1 in "start") echo " =================== 启动 hadoop集群 ===================" echo " --------------- 启动 hdfs ---------------" ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh" echo " --------------- 启动 yarn ---------------" ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh" echo " --------------- 启动 historyserver ---------------" ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver" ;; "stop") echo " =================== 关闭 hadoop集群 ===================" echo " --------------- 关闭 historyserver ---------------" ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver" echo " --------------- 关闭 yarn ---------------" ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh" echo " --------------- 关闭 hdfs ---------------" ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh" ;; *) echo "Input Args Error..." ;; esac 

保存后退出,然后赋予脚本执行权限

chmod 777 myhadoop.sh 

2)查看三台服务器Java进程脚本:jpsall

cd /root/bin vim jpsall 

输入如下内容

#!/bin/bash for host in hadoop102 hadoop103 hadoop104 do echo =============== $host =============== ssh $host jps done 

保存后退出,然后赋予脚本执行权限

chmod 777 jpsall 

3)分发/home/atguigu/bin目录,保证自定义脚本在三台机器上都可以使用

xsync /root/bin/ 

3.2.10 常用端口号说明

在这里插入图片描述

第4章 常见错误及解决方案

#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 #::1 hadoop102 






版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215605.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午1:51
下一篇 2026年3月18日 下午1:52


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号