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
Reduce端Shuffle
机制弊端:
频繁涉及数据在内存和磁盘的多次往复
Yarn
一个通用的资源管理和调度平台
资源管理:集群的硬件资源,和程序运行相关,比如内存,cpu
调度平台:多个程序同时申请计算资源如何分配,调度的规则,算法
通用:不仅支持MapReduce,支持各种计算程序
Yarn三大组件
Yarn总体分为两个阶段
MapReduce提交到Yarn交互流程
调度器策略
数据仓库
用来存储,分析,报告的系统
为什么不用普通数据库进行存储分析呢?
数据仓库主题
Hive
hive是建立在hadoop之上的数据仓库系统,可以将hadoop文件中的结构化,半结构化程序映射为一张数据库表,提供了一种sql的查询语言
hive核心是将HQL转化为MapReduce程序,然后提交到hadoop集群运行
Hive组件
Hive安装部署
元数据配置方式
新老客户端
Hive sql
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
注释中文乱码解决
在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 DATA LOCAL INPATH '/root/hivedata/students.txt' INTO TABLE student_local;
从hdfs加载文件,本质是hdfs的mv操作
LOAD DATA INPATH '/students.txt' INTO TABLE student_HDFS;
Hive数据仓库开发
通常用create table as select来进行数据清洗
FineBi是自助大数据分析的工具