hadoop相比于传统文件系统的优点:
1.无限扩展
2.传统文件元数据分布在不同的机器上难以寻找,通过将元数据统一存放在一个服务器上解决
3.传统文件太大导致上传下载慢,通过分块并行上传到服务器解决
4.副本机制数据不容易丢失,解决数据安全问题
rack代表机架
namenode里面记录元数据
namenode是主结点
datanode是从结点
hdfs中的文件是分块存储的
namenode管理的元数据有两种类型
1.文件自身属性信息
2.文件块位置映射信息(文件位置)
namespace命名空间
由namenode来维护
文件具体的各个block由datanode来管理
namenode管理的内容
1.文件系统元数据
2.namespace树结构
3.文件和块的位置信息
4.访问权限
所以namenode是唯一入口
secondrynode 是namenode的辅助结点,帮助主角色进行元数据文件的合并
datanode负责最终block块的创建
datanode所在机器挂掉,namenode会安排其他的datanode进行副本复制
pipeline管道的存在,充分利用了每一个机器的带宽,避免了网络瓶颈和高延时的连接
管道传输后还会进行ack反向验证,是两两之间的验证,验证不成功上一台机器重新发送就可,全部验证成功则整体无问题
默认副本存储策略
1.第一个副本存在本地
2.第二个存在不同机架
3.第三个相同机架不同位置
hdfs写数据流程
1.客户端发送create命令给namenode
2.namenode检查是否符合格式,检查通过返回输出流
3.客户端写入输出流,并通过管道进行备份,并进行ack校验
4.在写入时会将数据分为数据包,由namenode挑选出时候存储副本的datanode地址,默认3份,包括原数据
5.客户端告知namenode写入完成,等该namenode确认(因为namenode已经知道将上传的文件放到哪3个datanode,所以只需要等最小复制块返回成功就是成功,在上传文件中,只要上传副本成功1个,那么就算成功)
MapReduce思想
map:拆分
reduce:合并
不可拆分或者相互间有依赖的数据无法完成计算
核心:将数据分给多个服务器并行处理,最后将结果合并,这样可以充分利用服务器
一个完整的MapReduce程序在运行时有三类:
1.MrAppmaster:负责整个MR程序的过程调度和协调
2.MapTask:负责map阶段的整个数据处理流程
3.ReduceTask:负责reduce阶段的数据处理流程
一个模型中只能有一个map阶段和一个reduce阶段
整个MapReduce程序中,都是以键值对的形式存在的
Map阶段执行过程
1.逻辑切片,一个切片由一个maptask处理,默认128m一个切片,默认等于物理块的大小
2.按行读取,key是行数偏移值,value是每一行的内容
3.读取一个解析一个
4.分区,默认不分区,分区数量等于reducetask数量
5.map输出数据到内存缓冲区,满后spill溢出到磁盘,并根据key进行排序
6.merge合并所有的溢出文件为一个文件
Reduce阶段执行过程
1.主动拉取自己要处理的数据
2.将分散的数据合并再排序
3.对键相对的键值对调用reduce方法进行合并,将最终结果输出到hdfs文件中
Shuffle机制的原理
从Map产生输出到reduce取得数据之前的过程称为shuffle机制
Map端Shuffle
- Collect阶段
- Spill阶段
- Merge阶段
Reduce端Shuffle
- Copy阶段
- Merge阶段
- Sort阶段
机制弊端:
频繁涉及数据在内存和磁盘的多次往复
Yarn
一个通用的资源管理和调度平台
资源管理:集群的硬件资源,和程序运行相关,比如内存,cpu
调度平台:多个程序同时申请计算资源如何分配,调度的规则,算法
通用:不仅支持MapReduce,支持各种计算程序
Yarn三大组件
- ResourseManager(物理)最终仲裁者
- NodeManager(物理)管理本机器的资源
- ApplicationMaster(App层面)应用程序的老大,负责程序资源申请,监督程序运行
- Client
- Container
Yarn总体分为两个阶段
- 客户端启动ApplicationMaster
- ApplicationMaster为他申请资源
MapReduce提交到Yarn交互流程
- 用户通过客户端向Yarn中ResourseManager提交应用程序
- ResourseMaznager为这个应用程序分配container,并与NodeManager通信,在container内启动ApplicationMaster
- ApplicationMaster启动后,向ResourseMaznager注册
- ApplicationMaster开始申请资源
- ApplicationMaster申请到资源,向NodeManager通信,让他开启任务
- NodeManager配置环境并开启任务
- 向ApplicationMaster汇报任务
- ApplicationMaster向ResourseMaznager注销关闭自己
调度器策略
- 先进先出调度器(不适合共享)
- 容量调度器(多个组织共享)
- 公平调度器
数据仓库
用来存储,分析,报告的系统
为什么不用普通数据库进行存储分析呢?
- 在正常运行的数据库上面进行分析会导致正常的业务处理缓慢
- 数据存储量不大,一般只存放几个月的数据
- 数据分散在不同系统不同的表中,字段类型属性不统一
数据仓库主题
- 面向主题
- 集成
- 时变
- 非易失
Hive
hive是建立在hadoop之上的数据仓库系统,可以将hadoop文件中的结构化,半结构化程序映射为一张数据库表,提供了一种sql的查询语言
hive核心是将HQL转化为MapReduce程序,然后提交到hadoop集群运行
Hive组件
- 客户端通过网络进行交互
- 元数据存储,存储表的名字,列,分区,属性,表数据所在目录
- 驱动程序,包括语法解析器,编译器,优化器,执行器
- 执行引擎
Hive安装部署
- 元数据存储在关系型数据表中,如hive内置的Derby,或第三方的Mysql
- 元数据服务用来管理元数据,对外暴露服务地址,由客户端连接元数据服务,再由元数据服务去连接mysql存取元数据
元数据配置方式
- 内嵌模式
- 本地模式
- 远程模式
新老客户端
- Hive Cli (Hive第一代客户端,通过metastore来执行)
- Beeline (Hive第二代客户端,通过hiveserver2来执行)
hiveserver2需要依赖metastore来运行
Hive sql
- create database 命令,创建的数据库在hadoop中/user/hive/warehouse路径下
- use 命令可以切换数据库
- drop database 命令可以删除数据库(默认数据库为空才能删除)
- create table 命令可以创建表
数据类型有原生数据类型和复杂数据类型
分隔符指定语法只要是字段之间的分隔
create table t_archer(id int comment 'ID编号',name string comment '英雄名称',hp_max int comment '最大生命',mp_max int comment '最大法力',attack_max int comment '最高物攻',defense_max int comment '最大物防',attack_range string comment '攻击范围',role_main string comment '主要定位',role_assist string comment '次要定位'
)
row format delimited
fields terminated by '\t'; --字段之间的分隔符 制表符
如果不写fields terminated,默认的分隔符是\001
- show databases 命令可以展示所有数据库
- show tables [in database]命令可以展示当前数据库下所有表
- desc formatted 命令用来显示表的元数据信息
注释中文乱码解决
在mysql修改元数据信息
alter table hive3.COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
alter table hive3.TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table hive3.PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ;
alter table hive3.PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
alter table hive3.INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
- load 命令
本地指的是hive2所在服务器的本地,而不是客户端的本地
从本地加载文件,本质是hdfs的put操作
LOAD DATA LOCAL INPATH '/root/hivedata/students.txt' INTO TABLE student_local;
从hdfs加载文件,本质是hdfs的mv操作
LOAD DATA INPATH '/students.txt' INTO TABLE student_HDFS;
- insert + select命令通常组合使用,insert命令要走mr,时间长,建议使用load命令
- 内置函数和用户定义函数
用户定义函数有:UDF,UDAF,UDTF - UDF 普通函数 一进一出
- UDAF 聚合函数 多进一出
- UDTF 表生成函数 一进多出
Hive数据仓库开发
- 建库建表
- etl数据清洗
在数据库中也可以进行格式转换,但是效率不高,不如直接将需要的值读入,所以需要数据清洗
通常用create table as select来进行数据清洗
FineBi是自助大数据分析的工具