文章目录
前言
2023年2月份,本月又要参加 datawhale 组队学习了,本次是第 46 期,本期参加的课程是《大数据处理技术导论》,项目地址 https://github.com/datawhalechina/juicy-bigdata,感谢项目团队的付出。
1. 大数据概述
20 世纪以来,在全世界范围内,电子化、信息化高速发展,人们逐步进入”后纸化时代“。相比于之前的物理载体(有陶器,动物甲骨,青铜器,竹简,木牍,缣帛,纸等),电子媒介所承载的信息以指数级增长。可以说”电子媒介的出现是信息传播史上的重大革命“。电子媒介所承载的信息不再局限于文字,已经扩展到图像,音频、视频等。电子媒介的快速发展,产生了海量的数据(电子信息),如果高效处理这些电子信息便于大数据处理技术研究的方向。
那么,到底什么是大数据呢?
简而言之,大数据有如下几个特征:
1.1 数据量大 Volume
20 世纪 80 年代以来,全球数据的数量以指数级的方式增长,特点就是多。
1.2 数据种类多 Variety
数据总量增长如此之快,跟期产生途径种类繁多有关。每天一醒来,我们看到的新闻资讯、和小度的日常交流、与早餐店交易、刷刷微博、看看抖音等等,都是产生大量的数据。
1.3 处理速度快 Velocity
我们每天产生的数据是海量的,而日常信息是应当被及时、快速处理的。比如:购买商品后,银行卡存款余额应实时变化;各大媒体都想发布第一版咨询等等。
1.4 价值密度低 Value
数据总量多了,其信息密度就会降低。几个 GB 的日志文件中,关键信息只有几条。
如果高效处理大数据,便是本次课程所研究的内容。
2. hadoop
2.1 hadoop 简介
hadoop 是 apache 基金会旗下的一款开源的、廉价的分布式计算平台。hadoop 的诞生得益于 Google 的两篇论文,分别是关于 GFS 文件系统和 MapReduce 编程模型。Hadoop 之父 Doug Cutting
基于这两篇论文开发了 hdfs 和 hadoop。不得不承认 Google 是一家伟大的公司,因为它成功的推进了世界的发展进程。
2.2 hadoop 特性
Hadoop 的快速发展,得益于它的如下几个特性:
- 高可靠:采用冗余备份存储,不同副本存储于集群的不同位置,大大提高了数据的可靠性。
- 高效:采取分布式架构进行存储和计算,有效利用集群资源,可处理 PB 级别数据。
- 可水平扩展:hadoop 可水平扩展至上千台节点。
- 高容错:采用冗余备份模型进行存储,可自动将失败的任务进行重新分配。
- 低成本:可采用廉价的服务器进行集群的部署,成本较低。甚至,普通用户可以使用个人 PC 搭建 hadoop 运行环境(伪分布式或者集群模式)。
2.3 hadoop 环境部署
2.3.1 准备材料
- VMware
windows10 操作系统,VMware 好用一些,windows11 操作系统使用 VMware 创建虚拟机有坑,我曾经尝试了很多版本的 VMware 差点都要放弃了,最终在一位热心群友的帮助下拿到了一款可用的 VMware ,下边是下载链接
VMware Pro 16.1.0
链接:https://pan.baidu.com/s/1OoDkzloqLxfz3yleLt9Sng?pwd=f5ec
提取码:f5ec
- CentOS
我使用 CentOS 7 版本进行部署。 - jdk(需先删除虚拟机自带的 jdk 版本)
jdk 版本:jdk-8u212-linux-x64.tar.gz,上传至虚拟机/opt/software
目录
链接:https://pan.baidu.com/s/16VWE-VJJniJPbiXHeYUoYA?pwd=ydlh
提取码:ydlh
将 jdk 解压至 /opt/module
目录
[root@hadoop102 ~]$ tar -xzvf /opt/software/jdk-8u212-linux-x64.tar -C /opt/module
- hadoop
hadoop 版本:3.1.3,上传至虚拟机/opt/software
目录
2.3.2 操作步骤
2.3.2.1 创建 omc 用户
创建 omc 用户用于 hadoop 相关操作。
[root@hadoop102 ~]$ adduser omc # 创建 omc 用户
切换到 omc 用户
[root@hadoop102 ~]$ su omc # 切换到 omc 用户
将 jdk 目录的属组权限调整为 omc
[root@hadoop102 ~]$ chown -R omc:omc /opt/module/jdk1.8.0_212
2.3.2.2 配置环境变量
- 新建
/etc/profile.d/my_env.sh
文件
[omc@hadoop102 ~]$ sudo vim /etc/profile.d/my_env.sh
添加如下内容并保存(:wq!
)
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
输入如下命令,使得环境变量生效
[omc@hadoop102 ~]$ source /etc/profile
验证 jdk 是否安装成功
[omc@hadoop102 ~]$ java -version
看到如下结果,说明 jdk 安装成功
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
2.3.2.3 hadoop 安装(单机版)
解压 hadoop 到 /opt/module
目录下
[omc@hadoop102 ~]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
修改环境变量
- 打开
/etc/profile.d/my_env.sh
文件
[omc@hadoop102 ~]$ sudo vim /etc/profile.d/my_env.sh
添加如下内容并保存(:wq!
)
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
输入如下命令,使得环境变量生效
[omc@hadoop102 ~]$ source /etc/profile
测试 hadoop 是否安装成功
[omc@hadoop102 hadoop-3.1.3]$ hadoop version
返回如下结果,说明 hadoop 安装成功
Hadoop 3.1.3
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r ba631c436b806728f8ec2f54ab1e289526c90579
Compiled by ztang on 2019-09-12T02:47Z
Compiled with protoc 2.5.0
From source with checksum ec785077c385118ac91aadde5ec9799
This command was run using /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-common-3.1.3.jar
2.3.2.4 hadoop 集群搭建
搭建集群时,建议首先安装模板虚拟机,所谓模板虚拟机,就是这台虚拟机上应当具有集群服务器共有的东西,比如说用户、属组权限、目录、常用软件(epel-release、net-tools)等。
需要特别注意的是:建议给普通用户添加 root 权限,方便后期使用 sudo 执行 root 命令,具体方法为
打开 /etc/sudoers
进行编辑
[root@hadoop100 ~]# vim /etc/sudoers
在 %wheel
那一行下边添加
omc ALL=(ALL) NOPASSWD:ALL
如下图所示:
准备好模板机之后,就可以进行克隆了:(模板机关机状态下进行克隆)
使用模板机 hadoop100 克隆3太虚拟机,分别为 hadoop102、hadoop103、hadoop104。
然后,依次对克隆出来的虚拟机进行配置的修改。(以 hadoop102 为例)
- 修改克隆机的静态 IP
[root@hadoop100 ~]# 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
- 查看Linux虚拟机的虚拟网络编辑器,编辑->虚拟网络编辑器->VMnet8
- 查看Windows系统适配器VMware Network Adapter VMnet8的IP地址
- 修改主机名
[root@hadoop100 ~]# vim /etc/hostname
hadoop102
[root@hadoop102 ~]# vim /etc/hosts
添加如下内容
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
- 重启 hadoop102
[root@hadoop102 ~]# reboot
- 修改 windows hosts 文件(主机映射文件)
路径:C:\Windows\System32\drivers\etc
,打开后在尾部添加如下内容,保存后退出。
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
至此,虚拟机 hadoop102 配置项修改完毕,hadoop103 / hadoop104 参照进行修改,此处不再赘述。
3台虚拟机准备好之后,模板机就可以删除了,之后,按照单机版 hadoop 操作过程按照 hadoop 即可。
2.3.2.5 群起hadoop 集群
- 配置免密登录
[omc@hadoop102 ~]$ cd /home/omc/.ssh
[omc@hadoop102 .ssh]$ ssh-keygen -t rsa
连续敲三次回车,即可生成公钥 `id_rsa.pub` 和私钥 `id_rsa`
- 拷贝公钥
[omc@hadoop102 .ssh]$ ssh-copy-id hadoop102
[omc@hadoop102 .ssh]$ ssh-copy-id hadoop103
[omc@hadoop102 .ssh]$ ssh-copy-id hadoop104
[omc@hadoop103 .ssh]$ ssh-copy-id hadoop102
[omc@hadoop103 .ssh]$ ssh-copy-id hadoop103
[omc@hadoop103 .ssh]$ ssh-copy-id hadoop104
[omc@hadoop104 .ssh]$ ssh-copy-id hadoop102
[omc@hadoop104 .ssh]$ ssh-copy-id hadoop103
[omc@hadoop104 .ssh]$ ssh-copy-id hadoop104
[root@hadoop102 .ssh]$ ssh-copy-id hadoop102
[root@hadoop102 .ssh]$ ssh-copy-id hadoop103
[root@hadoop102 .ssh]$ ssh-copy-id hadoop104
- 集群规划
1、NameNode和SecondaryNameNode不要安装在同一台服务器;
2、ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
具体规划如下:
- core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件参数修改
1、配置core-site.xml
[omc@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop
[omc@hadoop102 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网页登录使用的静态用户为omc -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>omc</value>
</property>
</configuration>
2、配置hdfs-site.xml
[omc@hadoop102 hadoop]$ 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>
3、配置yarn-site.xml
[omc@hadoop102 hadoop]$ 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>
4、配置mapred-site.xml
[omc@hadoop102 hadoop]$ 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>
- 分发 hadoop 配置文件到集群的其他主机上
[omc@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/
登录 hadoop103 / hadoop104 查看分发情况
[omc@hadoop103 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[omc@hadoop104 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
- 配置 workers
[omc@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
在该文件中增加如下内容:
hadoop102
hadoop103
hadoop104
分发至其他节点
[omc@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc
- 启动集群
1、初次启动集群,需要格式化 namenode
[omc@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
2、启动 HDFS
[omc@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
3、在配置了 ResourceManager
的节点(hadoop103)启动 YARN
[omc@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
4、浏览器访问 http://hadoop102:9870 查看 namenode 信息
5、浏览器访问 http://hadoop103:8088 查看 yarn 上运行的 job 信息
至此,hadoop 集群环境搭建完成。