言成言成啊 | Kit Chen's Blog

Hadoop

发布于2021-05-25 00:14:50,更新于2021-07-27 19:43:56,标签:java  文章会持续修订,转载请注明来源地址:https://meethigher.top/blog

一、概论

1.1 大数据

大数据就是一个数据集合,通常的处理方式是无法进行管理的,需要一个新的处理模式才可以处理的数据。

就好比我有5T数据,硬盘只有1T,那么,我如何存储这5T数据呢?

按顺序给出数据存储单位

bit、byte、kb、mb、gb、tb、pb、eb、zb、yb、bb、nb、db

1byte=8bit

1kb=1024byte

1mb=1024kb

1gb=1024mb

1pb=1024tb=1024*1024gb

大数据主要解决,海量数据的采集、存储和分析计算的问题。比如,我存了100T的数据,我如何快速从中要取出某个时间段的数据?

小声比比,原来最近上班搞的这些优化,就有点大数据的雏形了。之前统计查询就能卡死服务器,现在好了,我给优化到每个都能300ms。

大数据的特点4V

  1. 大量:Volume
    • 个人计算机硬盘的容量为tb级,而企业的数据量已经接近eb级。
  2. 高速:Velocity
    • 这是大数据区分于传统数据挖掘的最显著特征。根据IDC报告,预计到2025年,全球数据使用量将达到163ZB。在海量数据面前,处理数据的效率就是企业的使命。
    • 天猫双十一,2017年,3分01秒交易额超过100亿;2020年,96秒交易额超过100亿
  3. 多样:Variety
    • 结构化数据和非结构化数据(去Lucene了解)
    • 非结构化数据越来越多,包括网络日志、音频、视频、图片、地理位置信息
  4. 低价值密度:Value
    • 数据越大,价值密度越低
    • 比如从快递点一天的监控视频中,找出拿错快递的那一段

1.2 大数据生态体系

术语解释

  1. Sqoop:Sqoop 是一款开源的工具,主要用于在 Hadoop、Hive 与传统的数据库(MySQL) 间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进 到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中.
  2. Flume:Flume 是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统, Flume 支持在日志系统中定制各类数据发送方,用于收集数据;
  3. Kafka:Kafka 是一种高吞吐量的分布式发布订阅消息系统;
  4. Spark:Spark 是当前最流行的开源大数据内存计算框架。可以基于 Hadoop 上存储的大数 据进行计算。
  5. Flink:Flink 是当前最流行的开源大数据内存计算框架。用于实时计算的场景较多。
  6. Oozie:Oozie 是一个管理 Hadoop 作业(job)的工作流程调度管理系统。
  7. Hbase:HBase 是一个分布式的、面向列的开源数据库。HBase 不同于一般的关系数据库, 它是一个适合于非结构化数据存储的数据库。
  8. Hive:Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张 数据库表,并提供简单的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务进行运 行。其优点是学习成本低,可以通过类 SQL 语句快速实现简单的 MapReduce 统计,不必开 发专门的 MapReduce 应用,十分适合数据仓库的统计分析。
  9. ZooKeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、 名字服务、分布式同步、组服务等。

1.3 Hadoop

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。

Hadoop主要解决海量数据的存储和分析计算问题。

广义来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈,如Hbase、Hive、Zookeeper等。

Hadoop创始人 Doug Cutting,为了实现与Google类似的全文检索功能,他在Lucene基础上进行优化升级。但是对于海量的数据,Lucene框架面对与Google同样的困难,存储海量数据困难,检索海量数据速度慢。于是Doug学习Google的解决方法——微型版Nutch。

可以说Google是Hadoop的思想之源(Google在大数据方面的三篇论文)。

Hadoop三大发行版本:Apache、Cloudera、Hortonworks

  • Apache:免费,最原始的版本
  • Cloudera:内部集成很多大数据框架,对应产品CDH
  • Hortonworks:文档比较好,对应产品HDP,现被Cloudera收购,推出新品牌CDP

Hadoop优势

  1. 高可靠性:hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或者存储出现故障,也不会导致数据丢失。
  2. 高扩展性:动态增加、动态删除。在集群间分配任务数据,可方便的扩展数以千计的节点。比如双十一、六一八可以动态增加服务器。
  3. 高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。比如没有集群时一台计算机计算,有集群时,大家一块计算。
  4. 高容错性:能够自动将失败的任务重新分配

二、hadoop组成

hadoop1.x,hadoop2.x,hadoop3.x的区别

hadoop3.x在组成上并没有变化。

2.1 HDFS架构描述

Hadoop Distributed File System,简称HDFS,分布式文件系统

NameNode(nn):存储文件的元数据,如文件名、文件目录结构、文件属性(生成时间、副本数、文本权限),以及每个文件的块列表和块所在的DataNode等。这边可以理解成NameNode存放DataNode的位置。

DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验

Secondary NameNode(2nn):每隔一段时间对NameNode元数据备份

2.2 YARN架构概述

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

ResourceManager(RM):整个集群资源(内存、CPU等)的老大

NodeManager(NM):单个节点服务器资源老大

ApplicationMaster(AM):单个任务运行的老大

Container:容器,相当于一台独立的服务器,里面封装了任务运行所需要的资源,如内存、CPU、磁盘、网络等

2.3 MapReduce架构概述

MapReduce将计算过程分为两个阶段:Map和Reduce

  1. Map阶段并行处理输入数据
  2. Reduce阶段对Map结果进行汇总

2.4 三者关系

举例

现在有三台服务器,里面配置了HDFS和YARN。

客户有个需求从所有视频中找出指定视频,YARN就会创建一个ApplicationMaster来执行,对于有视频的服务器进行Map操作,然后Reduce到一台服务器上。

三、Hadoop入门

由于本文是使用最小化安装的Centos8,所以一些常用命令没有,需要自己安装

如yum install net-tools,安装ifconfig命令

如yum install vim,安装vim命令

3.1 部署集群

参考文章

配置虚拟机以及本地IP

vmware中编辑-虚拟网络编辑器

本地网络共享中心-适配器-vmnet8

配置开发机器环境

为了用xshell时,不用一直写ip地址,我们可以在自己的开发机器上进行配置C:\Windows\System32\drivers\etc\hosts

1
2
3
4
5
6
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

配置服务器

执行命令

1
vi /etc/sysconfig/network-scripts/ifcfg-ens33

进行修改添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
# 将dhcp改为static,dhcp表示动态获取ip,static为固定ip
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=058b7a7a-1bea-4058-be18-2244d061018c
DEVICE=ens33
ONBOOT=yes
# 添加ip地址
IPADDR=192.168.10.100
# 网关
GATEWAY=192.168.10.2
# dns解析器
DNS1=192.168.10.2

修改主机的hostname

1
vi /etc/hostname

配置host映射,相当于ip地址起别名(跟绑定域名一个道理)

1
vi /etc/hosts

添加如下

1
2
3
4
5
6
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

重启服务器

1
reboot

测试是否有网络

1
ping meethigher.top

由于跟多rpm包在官方仓库是没有的,Centos需要额外安装一个软件仓库

1
yum install epel-release # 加上-y表示自动选是

关闭防火墙、关闭防火墙自启

1
2
3
systemctl stop firewalld
systemctl disable firewalld.service
firewall-cmd --state #查看防火墙状态

实际开发中,单个服务器的防火墙关闭,对整个集群设置防火墙

创建普通用户和其密码

1
2
useradd meethigher #创建用户
passwd meethigher #设置该用户密码 提示输入密码

授予用户最高权限

1
vi /etc/sudoers

在wheel后面追加

1
2
3
4
5
6
7
8
9
10
## Allows members of the 'sys' group to run networking, software, 
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
# 下面是追加内容
# 所有的用户都在wheel这个组里,所以需要放到他的后面,如果放到他的前面,最后会被wheel的值给覆盖
# 第二个All如果改成NOPASSWD:ALL表示切换root时可以不用输密码
meethigher ALL=(ALL) ALL

切换用户

1
su meethigher

创建存储开发工具的文件夹

1
2
sudo mkdir /opt/module
sudo mkdir /opt/software

如果不是命令行版的系统,需要卸载自带的jdk

1
2
3
4
5
rpm -qa|grep -i java|xargs -nl rpm -e --nodeps
# rpm -qa:查询所安装的所有 rpm 软件包
# grep -i:忽略大小写
# xargs -n1:表示每次只传递一个参数
# rpm -e --nodeps:强制卸载软件

reboot重启

克隆虚拟机

右键-管理-克隆自当前状态-完整克隆

分别配置ifcfg-ens33以及hostname即可

安装JDK

将JDK1.8解压到/opt/module下,自带jre,所以不用准备了。

配置环境变量

1
2
# 进入环境变量路径下
cd /etc/profile.d/

创建java_env.sh

1
sudo vi java_env.sh

添加环境变量

1
2
3
JAVA_HOME=/opt/module/jdk1.8
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME PATH

然后刷新环境变量

1
source /etc/profile

输入java -versionjavac -version查看版本

如果提示没有java命令,则可能是安错版本了。比如,你是64位(x64)的,结果安装了32(x86)位

安装hadoop

将hadoop解压到/opt/module下

配置环境变量

1
cd /etc/profile.d/

创建hadoop_env.sh

1
sudo vim hadoop_env.sh

添加环境变量

1
2
3
4
HADOOP_HOME=/opt/module/hadoop3.3
PATH=$PATH:$HADOOP_HOME/bin
PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_HOME

刷新环境变量

1
source /etc/profile

输入hadoop version查看版本信息

hadoop中目录介绍

  1. bin:存储和hdfs、mapreduce、yarn有关的命令
  2. etc
  3. include:C++的头文件
  4. lib:库
  5. sbin:启动集群、启动yarn、启动历史服务器等的命令

查看环境变量

1
echo $PATH

tips:部署局域网可访问的集群

Windows 搭建局域网访问的VMware的虚拟机服务器

查看本机ip

vmware中编辑-虚拟网络编辑器,配置桥接,选择当前上网使用的网卡。

给相应的服务器配置网络适配器为桥接

至于服务器的网络配置

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

修改ip、网关、dns

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens33
UUID=6627ec26-8414-4f01-8461-baf1eac0e6e7
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.10
GATEWAY=192.168.1.1
DNS1=192.168.1.1

ip的选择需要选择一个局域网中不存在的ip地址。通过ping可以实现,如果连不通就是没有的ip地址

3.2 hadoop运行模式

运行模式的分类

  1. 本地运行模式:数据存储在Linux本地。在测试环境时使用。
  2. 伪分布式:数据存储在HDFS。公司中比较差钱的时候使用。
  3. 完全分布式:数据存储在HDFS/多台服务器工作。企业里面大量使用。

本地运行模式

简单利用hadoop的mapreduce跑一下。

在hadoop下面创建一个文件word.txt

1
2
3
4
11
22
33
44

用hadoop的mapreduce统计并将结果输出到wcount下面

先进入到hadoop当前路径下

1
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount word.txt ./wcount

保存结果

1
2
3
4
11      2
22 1
33 1
44 1

完全分布式模式

scp安装拷贝

scp全称secure copy 安全拷贝,scp可以实现服务器与服务器之间的数据拷贝。

语法:scp -r $pdir/$fname $user@$host:$pdir/$fname

  • -r :递归
  • $pdir:文件路径
  • $fname:文件名称
  • $user:目的地用户
  • $host:主机

1
scp -r hadoop3.3/ root@hadoop103:/opt/module

rsync远程同步

rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

rsync与scp的区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新,scp是将所有文件都复制过去。

语法:rsync -av $pdir/$fname $user@$host:$pdir/$fname

  • -a:归档拷贝
  • -v:显示复制过程

如果命令不存在,yum -y install rsync

xsync集群分发脚本

如果我们现在想循环复制文件到所有的节点的相同目录下

发布:2021-05-25 00:14:50
修改:2021-07-27 19:43:56
链接:https://meethigher.top/blog/2021/hadoop/
标签:java 
付款码 打赏 分享
Shift+Ctrl+1 可控制工具栏