impala-shell -q "select * from xxx"
l
impala-shell -q "select * from xxx"
l
/var/www/html
或者防火墙问题
hadoop的hdfs的短路读取特性:
client发送请求后,impala-server可直接读取本地hdfs磁盘文件,缩短请求时间
service mysqld start
impala:sql交互查询的工具
hdfs -- mysql -- hive metastore服务 -- impala
impala与hive的关系:impala与hive是紧耦合的关系,impala需要读取hive的元数据信息,需要hive提供一个Metastore的服务端
impala的优点与缺点:
优点:
速度快
使用C++实现
缺点:内存消耗大,官方推荐每台机器最少128G的内存
impala不提供数据的存储功能,只提供数据的计算功能
impala的架构与查询计划:
impala架构:
impala-server:从节点,计算节点,主要负责执行查询任务的计算,官方建议:impala-server与每一个datanode安装在一起
impala-catalog:主节点,主要存储量元数据信息在两个地方,一个在内存中,一个在磁盘中。impala当中的元数据管理的服务
impala-statestore:主节点,状态存储区,主要存储了一些SQL执行的进度信息,状态信息等
impala的查询计划:分为两个阶段
fronted:使用Java来实现,负责生成我们的查询计划
backend:使用C++来实现,主要负责执行查询
fronted前台的查询计划分为两个阶段
第一个阶段:生成单机版的查询计划
第二个阶段:生成分布式的查询计划,将单机版的查询计划,发送到其他机器上
SQL语句的优化,其实就是查询计划的优化,单机版的优化策略与分布式策略一致
zookeeper
hadoop hdfs+mapreduce
hive:数据仓库的工具,主要用于数据分析
数据仓库主要面向数据分析 OLAP
数据库主要面向事务处理 OLTP
flume:日志数据采集
exec Source tail-F
spoolingD日 source 监控某个文件夹下面的文件
avro Source 网络传输,从上级avro sink里面接收数据
TailDir Source可以按照正则匹配,收集某一类的文件
channel memory channel
sink:如何控制文件的大小 时间长短,文件内容大小
hdfs sink
logger sink
azkaban:任务调度的框架
sqoop数据导入导出
导入:关系型数据库到hdfs
导出:hdfs到关系型数据库
离线日志的分析:
第一步:数据采集,flume,爬虫,javaAPI
第二步:数据的统一存储
第三步:数据清洗,主要目的:将半结构化的数据,转换成结构化的数据,可用MapReduce来实现
第四步:数据的映射入库,hive可以将结构化的数据映射成为一张表
第五步:数据分析,数据仓库DW层,数据分析
第六步:hive临时表当中将分析的结果存入hive的临时表中
第七步:通过sqoop工具将数据导出到MySQL当中
第八步:通过web报表展示工具,展示统计结果
开窗函数,分组求topN
级联求和
离线项目的处理流程
报表展示:echarts
flume数据的采集,flume一直在采集,不需要定时的执行
2表模型三个mr的程序
第一个:mr清洗数据
第二个:pageview表模型
第三个:visit表模型
3hive建表加载数据
每天产生的数据,都要定时加载到hive对应的分区表里面去
4数据分析的SQL语句
自己开发的hql语句
cast函数:
select a.*,b.*
from
(select username,month,sum(salary)
from t_salary_detail
group by username,month) a
inner join
(select username,month,sum(salary)
from
t_salary_detail group by username,month) b on a.username=b.username;
求取每个用户获取到金额最大的前三位数值
典型的分组求topN的问题
使用hive的开窗函数可以解决标号的问题
rank over:如果有相同的数据,标号一样,标号根据数据的条数,往上涨
dense_rank() over如果有相同的数,标号一样,标号顺序往上涨
row_number() over如果有相同的数据,标号顺序往上涨
desc function extended parse_url_tuple;
+----------------------------------------------------+--+
| tab_name |
+----------------------------------------------------+--+
| parse_url_tuple(url, partname1, partname2, ..., partnameN) - extracts N (N>=1) parts from a URL. |
| It takes a URL and one or multiple partnames, and returns a tuple. All the input parameters and output column types are string. |
| Partname: HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, USERINFO, QUERY:<KEY_NAME> |
| Note: Partnames are case-sensitive, and should not contain unnecessary white spaces. |
| Example: |
| > SELECT b.* FROM src LATERAL VIEW parse_url_tuple(fullurl, 'HOST', 'PATH', 'QUERY', 'QUERY:id') b as host, path, query, query_id LIMIT 1; |
| > SELECT parse_url_tuple(a.fullurl, 'HOST', 'PATH', 'QUERY', 'REF', 'PROTOCOL', 'FILE', 'AUTHORITY', 'USERINFO', 'QUERY:k1') as (ho, pa, qu, re, pr, fi, au, us, qk1) from src a; |
+----------------------------------------------------+--+
LATERAL VIEW 一行进,多行出;
desc function extended regexp_replace;替换正则表达式
+----------------------------------------------------+--+
| tab_name |
+----------------------------------------------------+--+
| regexp_replace(str, regexp, rep) - replace all substrings of str that match regexp with rep |
| Example: |
| > SELECT regexp_replace('100-200', '(\d+)', 'num') FROM src LIMIT 1; |
| 'num-num' |
+----------------------------------------------------+--+
substring
集合当中的数据,先按照时间进行排序,比较下一条与上一条数据之间的时间间隔
flume数据采集:
过滤脏数据
数据的清洗:
过滤静态数据
hive当中
分区与分组的关系:
分区:主要是决定了数据去往哪一个reduce
分组:决定了哪些数据分到一个组里面去,形成一个集合,一起调用一次reduce
mapreduce对key2进行排序
mapreduce排序功能:
默认有排序功能,按照字典顺序来进行排序,对key2进行排序
hadoop当中没有沿用Java序列化serialize方式,使用的是writable接口,实现了writable接口就可以序列化
如果需要序列化,需要实现writable接口
如果需要排序,需要实现comparable接口
如果既需要序列化,也需要排序,可以实现writable和comparable或者writableComparable
hdfs的设计目标:单台机器的存储问题
hdfs的架构图:主从架构
namenode:主节点,接收用户请求,管理元数据信息
datanode:从节点,存储数据,出磁盘
secondaryNanmenode:辅助namenode管理元数据信息,合并fsimage与edits文件
如果namenode是HA的模式:(active与standby)
journalnode:负责从节点与备份节点的元数据的共享问题
zkfc:zkFailoverController守护进程,监看namenode的健康状况
w文件的副本机制与block块:
文件的副本机制:解决了如何保证数据不丢失的问题
block块存储:默认128M
hdfs的元数据管理fsimage与edits
fsimage:存放了一份比较完整的元数据信息,元数据存放在两个地方,一个是磁盘文件,一个是内存
edits:最近一段时间的操作日志,时间长短1小时,文件大小64M
secondaryNamenode:edits文件达到触发合并的条件,snn就开始工作
1:通知nn切换edits文件
2:通过http请求,获取fsimage与edits文件
3:将fsimage与edits文件加载到内存当中进行合并,形成最新的fsimage文件
4:将新的fsimage文件发送到nn替换掉旧的fsimage文件
hdfs的写入过程;
1:客户端请求namenode上传文件
2:namenode校验客户端是否能够上传
3:客户端请求namenode第一个block块上传位置
4:namenode通过机架感知原理,找到离客户端最近的一个block块的位置,告诉给客户端
5:与datanode建立长连接pipeline管道,客户端以packet(64kb)的方式发送数据到datanode上面去
6:第一个block块上传完成,给客户端一个ack的反馈机制,继续传送第二个block块
8、文件的读取过程
1:客户端请求namenode读取数据
2:namenode校验文件是否存在,权限是否正确,返回给客户端一个block块的列表地址
3:客户端获取到block块的地址后,与datanode建立通信,读取所有的block块
4:客户端将block块进行拼接
MapReduce
yarn资源管理器
resourcemanager:主节点,接收用户请求,分配资源
nodemanager:从节点,接收分配的任务,执行具体的任务
applicationMaster:每个任务resourcemanager都会启动一个APPmaster来进行全权的管理,主要负责资源的申请,任务的分配,任务进度的执行情况
MapReduce设计构思:
map阶段:主要负责分开,将大的任务划分成小任务
reduce阶段:主要负责合并,将map阶段处理完成的结果进行汇总
MapReduce的编程规范:
1:读取文件,解析成key、value对,TextInputFormat
2:自定义map逻辑,接收k1,v1,转换成
k2,v2进行输出
shuffle阶段的四个步骤
3:分区,相同key的value发送到同一个reduce里面去,相同key合并,value形成一个集合
4:排序
5:规约
6:分组
reduce阶段的两个步骤
7:自定义reduce逻辑,接收k2,v2,转换成新的k3,v3进行输出
8:输出我们k3,v3,TextOutFormat
课程总结:
1.hdfs的系统设计介绍
2.hdfs的设计目标
3.hdfs的来源
4.hdfs的架构图,所有的关于hdfs的节点的作用背下来
namenode:主节点,接收用户请求,管理元数据,元数据有两个地方存储,fsimage,edits
5.hdfs的副本机智以及block块存储,
6.fsimage:镜像文件,最完整的一份元数据信息,较大,存储在两个地方,内存和磁盘
edits:
最近一段时间的操作日志,控制edits文件不会膨胀太大
1:时间长短1个小时;2:文件大小,64M的时候合并
snn如何合并fsimag与edits
1:通过namenode切换editswe年
2:通过http的方式获取fsimage与edits文件
3:将fsimage与edits文件加载到内存当中合并
4:将最新的fsimage发还给namenode,替换旧的fsimage
8.hdfs文件的读取过程
1.客户端请求namenode读取数据
2.namenode校验权限,文件是否存在等等
3.namenode返回给客户端一个block块的列表
4:客户端读取block块
5:客户端拼接block块
9.hdfs的JavaAPI操作
10.MapReduce的入门
核心思想:分治
步骤:八部
在MapReduce当中没有block块的概念,每一个maptask处理的一部分数据都叫做一个切片,默认的一个切片对应一个block块的大小,可以理解为一个block块对应一个maptask
步骤:
map阶段
第一步:读取文件,解析成key、value对,这里是我们的k1、v1
第二步:接收我们的k1、v1,自定义我们的map逻辑,转换成新的key2、value2进行输出,往下发送k2、v2
shuffle阶段
第三步:分区,形同key的value发送到同一个reduce里面去,key合并,value形成一个集合
第四步:排序,默认按照字段顺序进行排序
第五步:规约
第六步:分组
reduce阶段
第七步:接收我们的k2 、v2,自定义我们的reduce逻辑,转换成新的k3、v3进行输出
第八步:将k3、v3进行输出
APPmaster:很重要,全权负责任务的划分,资源的申请,任务进度的监控等工作
单词统计:
hello world
hadoop hive
sqoop hive
hadoop hive
第一步:读取文件,解析成key,value对,key是行偏移量,value是行文本内容(下一行是上一行的行偏移量)
key1 value1
0 hello world
11 hadoop hive
22 sqoop hive
#32 hadoop hive
第二步:自定义map逻辑,接收key1,value1转换成新的key2,value2进行输出
获取value1,按照空格进行切割
[hello,world],[hadoop,hive],[sqoop,hive]
hello world
hadoop hive
sqoop hive
转换成新的key2,value2往下发送
key2 value2
hello 1
world 1
hadoop 1
hive 1
sqoop 1
hive 1
第三步:分区,相同key的value发送到同一个reduce当中去,key进行合并,value形成一个集合
hive [1,1]
第四步:排序
第五步:规约
第六步:分组
第七部:reduce阶段,接收key2、value2,转换成新的key3、value3进行输出
接收 key2 value2
hive [1,1]
转换成新的key3,value3
hive3 value3
第八步:输出key3、value3
hive 2
....