赞
踩
Hadoop Common、Hadoop Ozone、HDFS、Mapreduce以及Yarn
Hadoop Common:支持其他Hadoop模块的通用实用程序。
Ozone:新的对象存储系统,可用于小文件和大文件存储,
Hadoop HDFS(hadoop distribute file system ):一个高可靠、高吞吐量的分布式文件系统,提供分布式的存储服务。
Hadoop MapReduce:一个分布式的离线并行计算框架。
Hadoop Yarn:作业调度与集群资源管理的平台。
4. 修改hadoop-env.sh 在其中设置java环境、日志存储路径 5. 配置核心文件core-site.xml 6. 配置hdfs-site.xml (里面有HDFS的分工) 7. 配置yarn-site.xml 8. 配置mapred-site.xml 9. 配置workers 10.将文件分发到其他服务器上
一个高可靠、高吞吐量的分布式文件系统,提供分布式的存储服务。
优点:1.高容错(副本机制) 2. 块存储 3. 适合处理大数据集
缺点:1.不适合低延迟的数据访问 2.不适合存储大量小文件 3.不支持并发写入和随机修改
序列化就是把内存中的对象,转换成字节序列以便于存储和网络传输。
反序列化就是将收到的字节序列或者硬盘的持久化数据,转换成内存中的对象
3.重写序列化和反序列化方法 4. 如果需要将自定的bean放在key中传输,则需要实现comparable接口,因为MR中的shuffle过程一定会对key进行排序
优点:易编程、良好的扩展性、高容错、适合PB级别数据的处理
缺点:不擅长实时计算、不擅长流计算、不擅长DAG计算
Maptask的个数取决于split切片的个数,切片默认的大小为块的大小。影响切片个数的因素有:1 文件大小 2 块大小 3 文件的个数
分区器在mapper将KV写出之后,进入环形缓冲区之前被调用,相当于给每个KV当上了分区号的标记,该标记决定了该KV被环形缓冲区溢写到磁盘的哪个位置。
合并,局部聚合,也发生在进入环形缓冲区之前,他是为了maptask的输出进行局部聚合,从而减少网络传输压力。
有默认的hashpartitioner,当设置了reducetask的数量之后,会进行hash取余进行分区。
可以自定义groupingcomparator,对结果进行最大值排序,然后再reduce输出时,控制只输出前n个数,就达到了输出topn的目的(写一个类继承writecomparator,重写compare方法)
Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源。
Bzip2,gzip,snappy
采集数据的工具
三大组件:source、channel、sink
Spooldir:能够监控本地磁盘的某个目录。将新增的文件读取进flume
Exec:通过执行linux命令完成相应的功能
Avro:能够从上级的flume中读取数据(网络传输)
Netcat:能够从端口中读取数据
Hdfs:将数据写入到HDFS
Avro:将数据写入到下一级的flume
File_roll:将数据写入本地磁盘
Logger:将数据打印到控制台
Flume是管道流的方式,体统了很多默认实现
Kafka是一个可持久化的分布式消息队列
Kafka可以有许多生产者和很多消费者共享多个主题,而flume是一个专注于发送数据到HDFS或Hbase当中,他对HDFS有特殊优化,所以数据被多个系统消费的话,使用kafka,如果数据发送给hadoop使用,使用flume。
有一个flumekafka插件,插件的实现方式是自定义了flume的sink,将数据从channel中取出,通过kafka的producer写入到kafka中,可以自定义分区等。
实现hadoop生态体系和RDBMS体系之间的数据传输
将sqoop的命令翻译成MR程序,提交到yarn上运行,从而实现导入导出。底层MR没有reduce端。
基于Hadoop的一个数据仓库管理工具,可以将结构化的数据文件映射为一张表,并提供类sql查询功能。本质是将hql转换成MR的任务进行运算,底层由HDFS提供数据存储。
优点:1.采用类sql语法 2.避免写MR程序 3.处理大数据集 4.支持用户自定义函数
缺点:1 HQL表达能力有限 2.迭代算法无法表达 3. 效率较低
来了一条HQl,提交至客户端,然后会远程调用组件提交至Driver端,driver端有解释器,解释时就会访问metastore服务,告诉我们表的位置等信息,解释之后,会使用编译器进行编译,然后进入优化器,优化生成底层mr任务,提交至yarn上,然后再HDFS上读取数据。
1.内部表有hive管理,外部表由HDFS管理
2.内部表的存储位置为hive.metastore.warehouse.dir 外部表数据存放的位置由自己决定,若没有location,hive将在HDFS上的/user/hive/warehouse文件下以外部表的表名创建一个文件夹
3.删除内部表直接删元数据和存储数据、外部表仅仅删除元数据
支持。但hive的索引与rdbms中的索引不同,比如hive不支持外键或主键
Hive索引适用于那些不更新的字段
总体有两个方向:
Testfile(行式存储,默认)、sequencefile(存储二进制文件,行式存储)、orc(列式存储)、parquet(列式存储)
分三大方面:1、表设计优化 2、数据优化 3、计算job执行优化
表设计优化:
分区表:根据查询需要,按照查询条件划分区域存储
分桶表:由于两张大表join时,必经过shuffle阶段,相对性能较差,并且容易产生数据倾斜,使用分桶表将数据划分不同的目录进行存储
数据优化:
开启reduce端的文件合并 set hive.merge.mapredfiles =true
使用输入类 combineHiveInputFormat
3 .使用orc格式存储,使用ORC文件索引
计算job执行优化:
Set hive.exec.parallel =true
Set hive.exec.parallel.thread.number = 16(默认为8)
4. Join优化:
mapJoin:小表join达标,小表join小表
reducejoin:大表join大表
5. 开启关联优化 set hive.optimize.correlation = true
6. 配置CBD(基于代价)优化器引擎:hive默认的优化器引擎为RBO(基于规则) ,CBD一般搭配analyze分析优化器(将表或者分区的信息构建成元数据)使用
7.谓词下推(PPD):在不影响结果的情况下,尽量将过滤条件提前执行
Set hive.optimize.ppd = true
原因:数据本身就是倾斜的、分区规则导致相同的数据都分给了同一个task、key分布不均、建表时考虑不周.
Groupby数据倾斜:
Hive.map.aggr = true
2. 实现随机分区
Select * from table distribute by rand()
3. 自动构建分区并自动聚合
Hive.groupby.skewindata = true
Join的数据倾斜:
合并小文件、增加maptask的个数等。
Left semi-join:左半开连接,当记录对于右表满足on语句时,返回左表记录,当左表的一条数据在右表中存在时,hive会停止扫描。左半开连接的select和where关键字后只能出现左表的字段。
建立在HDFS上,提供高可靠性、高性能、列存储、可伸缩、实时读写的nosql数据库系统,并且是分布式、面向列的开源数据库
Minor:
用于部分文件合并,默认是3到10个文件进行合并,不删除其他版本的数据,过程较快,IO相对较低
Minor的触发条件:
打开region或memstore的时候,自动检测是否需要合并。
设置最小合并文件数,默认为3
Major:
对region下所有的stores进行合并
一般是手动触发,会删除其他版本的数据
Major触发条件:
默认7天一次
手动出发 major_compact “表名”
Region中数据达到一定数量时,会进行分裂,一个region会分裂为两个,分配到不同的RS中,原来的region下线。Region最大文件大小为10G
分裂的方式:手动、自动
手动:创建表时需要指定 create ‘staff’,’info’,SPLITS=>[‘100’,’200’,’300’]
自动:使用分裂策略 steppingSplitPolicy,这个策略下当region个数大于等于9的时候,region会在storefile大小为10G的时候分裂
在需要海量数据写入的时候,使用bulk更有效,其原理就是将数据直接写入到HFILE中,从而无需与HBase交互,Hfile生成后,直接一次性建立与HBase的关联即可。
HBase中的行是按照rowkey的字段顺序排序的,这种设计优化了scan操作,可以将相关的行以及会被一起读取的行存取在临近位置,便于scan。然后这样就可能造成热点问题,热点问题就是在客户端直接访问集群中一个或极少数节点,大量的访问会使region所在的单个服务器超出自身承受范围,引起性能的下降。
所以再向hbase中插入数据的时候,应优化rowkey设计,是数据被写入集群的多个region中,尽量均衡的把记录分散到不同的region中去,平衡每个region的压力。
方式有三种:反转、加盐、哈希,除了rowkey设计,还有就是在建表的时候预分区
反转:
一般反转分为数据反转和时间戳反转:
数据反转:
以手机号为例,前缀变化不大,但是后半部分变化很多,将其反转可以有效的避免热点问题。
反转时间:
如果将时间按照字典顺序排序,最近产生的数据会拍在旧数据之后,如果使用一个大的值减去时间(999999999999减去yyyyMMdd,或者Long.MAX_VALUE减去时间戳),则最新的时间就排在了前面。
加盐:
指在rowkey的前面增加一些前缀,加盐的前缀种类越多,rowkey就被打得越散。
哈希
哈希和加盐的场景类似,只是前缀不可以是随机的,因为必须要让客户端能够完整的重构rowkey,所以一般去拿原来的rowkey或其中一部分计算hash值,然后再对hash值做运算作为前缀。
长度原则、唯一原则、排序原则、散列原则
长度原则:
Rowkey是一个二进制码流,可以是任意字符串,最大长度是64kb,实际应用中一般为10-100bytes,以bytes[]形式保存,最好不要超过16个字节。
不能过长的原因:
唯一原则:
由于rowkey用来唯一表示一行记录,所以必须保证唯一性。
排序原则:
Rowkey是按照字典顺序排序存储的,因此在设计rowkey的时候,需充分利用这个排序的特点,常见的数据处理问题是快速获取数据的最近版本,使用反转的时间戳作为rowkey的一部分对这个问题十分有用(可以用Long.Max_Value减timeStamp追加到key的末尾)
散列原则:
即设计好的rowkey可以均匀的分布到各个regionserver上。即将rowkey的高位作为散列字段,由程序随机生成,低位放时间字段。
开源的分布式协调服务,分布式应用可以基于zookeeper实现数据发布、订阅、负载均衡、分布式协调通知、master选举、命名服务等功能
一般分四层ODS贴源层、DW明细数据、DM轻量汇总、App应用层
实体表(业务对象)、维度表(码表)、事务型事实表(不断产生的数据)、周期型事实表等
以空间换时间,减少跨表分析统计
星型模型:一个事实表和多个维度表
雪花模型:一个事实表和多个维度表,维度表之间存在关联
星座模型:多个事实表,不同事实表之间共享维度表
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。