hadoop框架:
1:hadoop-core:
hdfs分布式文件存储系统:
读文件流程
写文件流程
分布式:数据按块存储 块存在不同的机器上
java api:
1:首先创建maven工程
2:其次加入依赖
hadoop-core
hadoop-common
hadoop-client
hadoop-hdfs
common-s-logging
3:代码部分:
1:Configuration对象
2:FileSystem对象
3:FSDataInputStream对象,读取数据
4:FSDataOutputStream对象,写数据
本地hadoop配置:
解压并把hadoop-bin增加hadoop.dll和winuties.exe
hadoop.dll复制到system32下
环境变量配置
mapreduce分布式计算框架:
hadoop1.0:
计算和管理
hadoop2.0:
只负责计算
原理:把要执行的客户端请求传到各个节点
由各个节点进行同步计算,充分利用各个节点的计算资源
java api:
1:maven导入依赖
hadoop-auth
mapreduce-client-core
mapreduce-client-jobclient
common-logging
2:代码部分:
mapper:
继承mapreducer的mappper类,重写map()方法
如果是map join,要把小文件放入cacheFile中(缓存) 使用setUp方法读取cacheFile
一个mapper读文件的一行 key是该行的起始偏移量(即下标)value是一行字符串
输出为自定义key和value,相同的key输出后会经过shuffle合并到一起
reducer:
继承mapreducerde Reducer类重写reduce()
输入时mapper的输出或combiner的输出,value是相同key的Iterator
对输入的value进行逻辑处理并输出 每一个reducer()会生成一个part-r…的文件
reduce方法可没有(在map join的情况下)
combiner:基本以reduce功能相同,如果后续有reducer,必须保证与map的输出类型一致
partitioner:可认为指定分片数 可重写分片方法(partition方法)(一个分片对应一个reducer)
driver:
先生成job对象
设置本类为driver类 设置mapper类和reducer类
设置mapper类和reducer类的输出类型
使用FileInput/OutputFormat来设置输入输出的文件路径和job
等待运行
yarn分布式管理系统:
从2.2开始引入 主要成员resourcemanager和nodemanager
yarn来处理客户端请求的过程
1:client经由namenode向resourcemanager发起请求
2:resourcemanager确认请求,并返回对应的hdfs临时路径给client
3:client向临时路径上传文件和jar包
4:client通知resourcemanager上传完成及具体路径
5:resourcemanager创建app manager,app manager创建jobtasks,申请app master资源
6:app manager创建resourcescheduler,生成job计划
7:app manager创建app master,app master到hdfs临时路径查看文件,确认计划并上报到resourceschedule
8:resouceschedule确认具体计划 app master申请资源
9:通知各个nodemanager,创建container
10:各个container去hdfs临时路径下载文件和jar包,创建maptask和reducetask执行job
11:执行完成后,逐级上报到resoucemansger,并关闭资源
12:resourcemanager把结果响应给client
13:nodemanager会定时向resourcemanager汇报
2:hadoop-common:
namenode(总裁:负责管理整个haadoop集群的资源调配,接收客户端请求)
secondaryname(辅助namenode调配资源及合并日志和数据)
HA高可用
(namnode高可用):journalnode format前提前管理 active-stanby (core-site.xml)(hdfs-site.xml与其对应)(响应时间出错自动重连)
(新增节点yarn高可用):maper-site不用配只需配yarn-site.xml(包含zookeeper配置)
3:hive
使用mysql存储元数据结构,数据存储在hdfs的一个类sql数据库
语法:分隔符 row format delimited
fields terminated by
collection items terminated by
map keys terminated by
lines terminated by
row format serde(textfile,csv)
csv:org.apache.hadoop.hive.serde2.OpenCSVSderde==>serdeproperties:separatorChar quoteChar(双引号之间有字段加上这个) escapeChar
habse:org.apache.hadoop.hive.hbaseStorageHandler==>serdeproperties:hbase.columns.mapping
分类:
内部表:和外部表的区别:存储空间和删除表的时候是否删除数据
外部表external:
textfile
hbase
csv
CTAS:create table as select …
CTE:with tmp as (select …)create table as select * from tmp;
like建表:create table 新表名 like 原表名 只复制表结构
分区:
定义:partitioned by(分区名 分区类型)
插入分区:
静态分区:在insert 语句中加入partition(分区名=分区值) values
动态分区:
set hive.exec.dynamic.partition.mode=nonstrict(动态分区开启)
insert插入语句中partition(分区名)select 列值…分区来源字段from表
hive分区实际实在对应表目录下新建对应分区的文件夹,表数据根据分区分配到对应分区的文件夹
分桶:
对表文件切片存储
关键字:bucket 建表时将会三clusted by 3(三个分片)
视图:
hive全视图与mysql类似
侧视图,要和列的创建语句连用:select * from 表 lateral view exPlode(数组) 表别名 as 侧视图explode的列名
分组:
聚合函数:
分组:
排序:
order by 全局排序:
sort by 分片内排序:
distribute by 相当于mapreduce的partiton
cluste by相当于distribute by he sort by 的结合
join:
导入导出数据:
load :
export:
insert overwrite local directory 本地文件夹 (local加上世道本地 不加就到hdfs)
窗口函数:
常用窗口函数:rank() row_number() dense_rank() present_rank()
使用聚合函数成为窗口函数:
count(1) over(partiton by 字段1 order by 字段2)
常用函数:博客(检查)罚抄
自定义函数:
udf
udaf
udtf
性能优化:
explain/desc语句:
数据倾斜优化:这个主要是reducer造成的数据倾斜 负载均衡
4:hbase
5:zookeeper
前提:
每个zk节点上安装好
每个zk节点安装ntp时间同步并同步好时间
配置zoo.cfg
创建 zkdata文件夹 在其中放入myid文件 文件中写本机的zknode编号
模式:
单机模式(standalone):只用于伪分布式少数场景 (hive hbase 都用不上 只在sqoop可以用)
集群模式:
选举机制:保证报数以上机器可投票 即可选取产生主节点 zk集群可运行
主从结构:主节点定时向从节点发送心跳检测 心跳检测如果不成功,则重试n次(可配)ha架构下,会启用备用机制
生效条件:保证半数以上zkNode可运行状态
zkClient:
create
drop
6:sqoop
7:scala
8:spark
9:kafka
10:flume
11:flink