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
- 大量:Volume
- 个人计算机硬盘的容量为tb级,而企业的数据量已经接近eb级。
- 高速:Velocity
- 这是大数据区分于传统数据挖掘的最显著特征。根据IDC报告,预计到2025年,全球数据使用量将达到163ZB。在海量数据面前,处理数据的效率就是企业的使命。
- 天猫双十一,2017年,3分01秒交易额超过100亿;2020年,96秒交易额超过100亿
- 多样:Variety
- 结构化数据和非结构化数据(去Lucene了解)
- 非结构化数据越来越多,包括网络日志、音频、视频、图片、地理位置信息
- 低价值密度:Value
- 数据越大,价值密度越低
- 比如从快递点一天的监控视频中,找出拿错快递的那一段
1.2 大数据生态体系
术语解释
- Sqoop:Sqoop 是一款开源的工具,主要用于在 Hadoop、Hive 与传统的数据库(MySQL) 间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进 到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中.
- Flume:Flume 是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统, Flume 支持在日志系统中定制各类数据发送方,用于收集数据;
- Kafka:Kafka 是一种高吞吐量的分布式发布订阅消息系统;
- Spark:Spark 是当前最流行的开源大数据内存计算框架。可以基于 Hadoop 上存储的大数 据进行计算。
- Flink:Flink 是当前最流行的开源大数据内存计算框架。用于实时计算的场景较多。
- Oozie:Oozie 是一个管理 Hadoop 作业(job)的工作流程调度管理系统。
- Hbase:HBase 是一个分布式的、面向列的开源数据库。HBase 不同于一般的关系数据库, 它是一个适合于非结构化数据存储的数据库。
- Hive:Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张 数据库表,并提供简单的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务进行运 行。其优点是学习成本低,可以通过类 SQL 语句快速实现简单的 MapReduce 统计,不必开 发专门的 MapReduce 应用,十分适合数据仓库的统计分析。
- 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优势
- 高可靠性:hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或者存储出现故障,也不会导致数据丢失。
- 高扩展性:动态增加、动态删除。在集群间分配任务数据,可方便的扩展数以千计的节点。比如双十一、六一八可以动态增加服务器。
- 高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。比如没有集群时一台计算机计算,有集群时,大家一块计算。
- 高容错性:能够自动将失败的任务重新分配
二、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
- Map阶段并行处理输入数据
- 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 | 192.168.10.100 hadoop100 |
配置服务器
执行命令
1 | vi /etc/sysconfig/network-scripts/ifcfg-ens33 |
进行修改添加
1 | TYPE=Ethernet |
修改主机的hostname
1 | vi /etc/hostname |
配置host映射,相当于ip地址起别名(跟绑定域名一个道理)
1 | vi /etc/hosts |
添加如下
1 | 192.168.10.100 hadoop100 |
重启服务器
1 | reboot |
测试是否有网络
1 | ping meethigher.top |
由于跟多rpm包在官方仓库是没有的,Centos需要额外安装一个软件仓库
1 | yum install epel-release # 加上-y表示自动选是 |
关闭防火墙、关闭防火墙自启
1 | systemctl stop firewalld |
实际开发中,单个服务器的防火墙关闭,对整个集群设置防火墙
创建普通用户和其密码
1 | useradd meethigher #创建用户 |
授予用户最高权限
1 | vi /etc/sudoers |
在wheel后面追加
1 | # Allows members of the 'sys' group to run networking, software, |
切换用户
1 | su meethigher |
创建存储开发工具的文件夹
1 | sudo mkdir /opt/module |
如果不是命令行版的系统,需要卸载自带的jdk
1 | rpm -qa|grep -i java|xargs -nl rpm -e --nodeps |
reboot重启
克隆虚拟机
右键-管理-克隆自当前状态-完整克隆
分别配置ifcfg-ens33以及hostname即可
安装JDK
将JDK1.8解压到/opt/module下,自带jre,所以不用准备了。
配置环境变量
1 | 进入环境变量路径下 |
创建java_env.sh
1 | sudo vi java_env.sh |
添加环境变量
1 | JAVA_HOME=/opt/module/jdk1.8 |
然后刷新环境变量
1 | source /etc/profile |
输入java -version
、javac -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 | HADOOP_HOME=/opt/module/hadoop3.3 |
刷新环境变量
1 | source /etc/profile |
输入hadoop version
查看版本信息
hadoop中目录介绍
- bin:存储和hdfs、mapreduce、yarn有关的命令
- etc
- include:C++的头文件
- lib:库
- sbin:启动集群、启动yarn、启动历史服务器等的命令
查看环境变量
1 | echo $PATH |
tips:部署局域网可访问的集群
查看本机ip
vmware中编辑-虚拟网络编辑器,配置桥接,选择当前上网使用的网卡。
给相应的服务器配置网络适配器为桥接
至于服务器的网络配置
1 | vim /etc/sysconfig/network-scripts/ifcfg-ens33 |
修改ip、网关、dns
1 | TYPE=Ethernet |
ip的选择需要选择一个局域网中不存在的ip地址。通过ping可以实现,如果连不通就是没有的ip地址
3.2 hadoop运行模式
运行模式的分类
- 本地运行模式:数据存储在Linux本地。在测试环境时使用。
- 伪分布式:数据存储在HDFS。公司中比较差钱的时候使用。
- 完全分布式:数据存储在HDFS/多台服务器工作。企业里面大量使用。
本地运行模式
简单利用hadoop的mapreduce跑一下。
在hadoop下面创建一个文件word.txt
1 | 11 |
用hadoop的mapreduce统计并将结果输出到wcount下面
先进入到hadoop当前路径下
1 | bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount word.txt ./wcount |
保存结果
1 | 11 2 |
完全分布式模式
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集群分发脚本
如果我们现在想循环复制文件到所有的节点的相同目录下