- 博客(35)
- 收藏
- 关注
原创 Hive的优化
所谓的调优就是在总资源不变的情况下尽可能提高job执行的效率 无外乎cpu的负载优化磁盘网络io一、压缩 1)数据源压缩:我们业务中ods层使用了snappy压缩 虽然不支持切片但是由于我们的hdfs sink控制了滚动大小128M所以用户行为数据不涉及切片问题 数据量还是很小的 2)输入端 mapper端 reducer端都可以采用压缩 map输出端采用压缩可以减少job中map和reducetask之间数据的传输量reduce端输出阶段压缩:当hive将输出写入到表中输出的内...
2021-09-09 17:11:24
187
原创 解决Hive和Spark数据倾斜
一、Hive数据倾斜一般都发生在Sql中groupby和joinon上1.不同数据类型关联产生数据倾斜例如:两个表进行关联,其中一个字段类型是int一个是String解决:把数字类型转换成字符串类型2.空值分布:经常有大量的空值数据进入到一个reduce中导致数据倾斜解决:自定义分区,将为空的key转变为字符串+随机数,将因为空值造成的数据倾斜数据分不到不同的reducer中(如果一下特殊异常值不需要可以直接where过滤掉)3.groupby代替distinct4....
2021-08-29 11:33:56
1136
原创 解决Hadoop数据倾斜
一、什么是数据倾斜简而言之就是数据分布不均匀,某一个key非常多会导致那个Reduce主机压力大造成数据倾斜,造成集群的效率低下,一些任务出现卡死在99%的情况下不运行,资源的利用率低下二、解决办法1.提前在map进行combine,减少数据传输的数据量在mapper加上combiner相当于提前进行reduce,就是把mapper中相同的key进行了聚合,减少了shuffle过程中传输的数据量,以及reducer端的计算量2.导致数据倾斜的key大量的分布在不同的mapper
2021-08-29 09:50:32
688
原创 Hive解决小文件
一、小文件的产生源头1.数据源本身就是有很多小文件2.动态分区插入数据产生大量小文件,导致map数据剧增3.reduce个数越多小文件的个数越多4.insert插入数据时也会产生过多小文件:ReduceTask数量*分区数=文件数或MapTask*分区数=文件数二、小文件产生的影响1.对于它的存储底层Hdfs来说,HDFS本身就不适合存储小文件,每一个小文件就是150Byte如果大量的小文件产生会导致NameNode元数据增多,占用大量内存2.对于hive来说,每一个小文.
2021-08-29 09:18:52
232
原创 HDFS解决小文件
一、har回档(存储方向)每个文件均按块存储,每个块的元数据存储在NameNode的内存中,因此HDFS存储小文件会非常低效。因为大量的小文件会耗尽NameNode中的大部分内存。但注意,存储小文件所需要的磁盘容量和数据块的大小无关。例如,一个1MB的文件设置为128MB的块存储,实际使用的是1MB的磁盘空间,而不是128MB。HDFS存档文件或HAR文件,是一个更高效的文件存档工具,它将文件存入HDFS块,在减少NameNode内存使用的同时,允许对文件进行透明的访问。具体说来,HDFS存.
2021-08-28 10:58:54
1472
1
原创 HDFS生产调优大全
一、HDFS——核心参数1.NameNode内存生产配置1)NameNode内存计算每个文件大概占用150字节,一台服务器128G内存为例,能存储128*1024*1024*1024/150Byte=9.1亿约等于9亿块2)Hadoop2.x配置NameNode内存NameNode内存默认2000M,如果服务器内存4G,NameNode内存可以配置3g,在hadoop-env,.sh文件中配置HADOOP_NAMENODE_OPTS=-Xmx3072m3)hadoop3.x.
2021-08-28 10:25:27
283
原创 Spark架构流程 以及任务的划分
1)将任务提交给RM,申请ApplicaitonMaster2)RM收到请求后,分配container在合适的NM上,并启动ApplicationMaster,此时App就是Driver3)Driver向RM申请Executor内存,RM收到请求后会分配container在合适的NM上启动Executor进程4)Executor进程启动后会向Driver进行反向注册,Executor全部注册完后5)Driver端运行客户端程序中的main方法6)在main方法中构建了SparkCont...
2021-08-28 09:52:50
209
原创 Spark Shuffle未优化及优化后 hash shuffle sort shuffle(二)
在该模式下,数据会写入一个数据结构,reduceByKey写入map,一边通过map局部聚合,一边写入内存。达到一定阈值会将内存数据写入磁盘,清空内存结构。在溢写磁盘之前会根据key进行排序,排序后会分批写入磁盘中。一个task会产生多个临时文件,最后再每个task中将所有的临时文件进行合并,也就是一个task的所有数据都在这一个文件中,同时单独写一份索引文件,标识下游各个task的数据在文件中的索引start offset 和end offset触发机制:shuffle reduce...
2021-08-28 09:50:10
176
原创 Spark Shuffle未优化及优化后 hash shuffle sort shuffle(一)
起初spark向hadoop看齐,根据key的hash值往外溢出文件,每个task都分成3种类别的数据,把不同类别的数据汇聚计算最终的结果,reducer会根据分区号找到自己类别的数据汇聚成一个大的集合。缺点:每个map溢出的文件之间不互通,任务有多少个reduce就要开放多少个reduce溢出文件,导致设置分区数越大,消耗的物流空间越大,大量的溢出文件容易造成OOM优化后的shuffle使用合并机制,复用buffer,hash算法会根据key进行分类,同一个进程中把相同的key放在...
2021-08-28 09:47:28
118
原创 大白话解释拉链表
1.拉链表的定义:记录每条信息的生命周期,一旦一条记录的生命周期结束,就重新开始一条记录,并把当前日期放入生效开始日期。用户ID 姓名 手机号 开始时间 结束时间 1 李四 185****8454 2020-05-12 200-05-12 1 李四 156****5612 2020-05-13 2020-05-16 1 李四 137****1864 2020-05-17 9999-99-99
2021-08-28 09:38:46
533
原创 HBase分区过多的影响
HBase每张表在底层存储上是由至少一个Region组成,Region实际上就是HBase表的分区。HBase新建一张表时默认Region即分区数量为1,一般在生产环境中我们都会手动给Table提前做预分区,使用合适的分区策略创建好一定数量的分区并使分区均匀分布在不同的regionserver上,一个分区在达到一定大小时会自动Split,一分为二。频繁刷写:Region的一个列族对应一个MemStore,假设HBase表都有统一的1个列族配置,则每个Region只包含一个MemStore。通常HBas
2021-07-13 11:35:37
566
原创 Hbase架构总结
Hbase定义: HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。是一个高可靠、高性能、面向列、可伸缩的分布式存储系统。 Hbase数据模型: 逻辑上,HBase的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。但从HBase的底层物理存储结构(K-V)来看,HBase更像是一个multi-dimensional map。 逻辑结构: 物理结构: Hbase基本架构:Region Server...
2021-07-11 20:51:39
163
2
原创 ERROR: KeeperErrorCode = NoNode for /hbase/master
集群正常启动后,hbaseshell中查看表时发现报错了。1.查看日志发现是zookeeper的问题2.出现该问题不是hbase本身的问题,而是zookeeper的影响,因为zookeeper是监控整个HBASE节点状态,控制集群通信的重要工具。3.在zookeeper客户端中 zkCli.sh 删除HBASE的节点数据 deleteall /hbase即可解决删除完不报错...
2021-07-11 10:48:20
1511
1
原创 Clickhouse中使用Bitmap表
建表create table user_tag_merge ( uid UInt64, gender String, agegroup String, favor String)engine=MergeTree()order by (uid);准备数据insert into user_tag_merge values(1,'M','90后','sm');insert into user_tag_merge values(2,'M','70后','sj');insert i
2021-07-08 16:24:27
2639
原创 Clickhouse精细入门
ClickHouse 是俄罗斯的Yandex于2016年开源的列式存储数据库(DBMS),使用C++语言编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。Clickhouse特点真正的列式数据库管理系统:对于列的聚合, 数据类型 Clickhouse表引擎 sql操作...
2021-07-07 23:08:46
219
原创 sql中如何查询第N高数据
案例select IFNULL( (select distinct Salary from Employee order by Salary desc limit 1 offset 1),NULL) as SecondHighestSalary;思路模式:1.ifnull(expression,alt_value):如果第一个参数的表达式expression为null,则返回第二个参数的备用值(此题目返回null)
2021-06-15 10:39:13
698
原创 HDFS读写流程--精细
一、写数据流程使用客户端Client,向Namenode发起写文件的请求Namenode会检查是否已存在文件,通过检查则先将操作写入EditLog中,并返回输出流对象。(EditLog记录的是最新的hdfs客户端执行所有的写操作,若后续执行失败也不会丢失数据)client客户端按照128M的块进行切分文件。client将Namenode分配的可写的datanode列表和data数据发送给最近的第一个DataNode节点中(如果第一个block块数据读取完成就会关闭指向第一个block块的data
2021-06-14 19:54:35
150
原创 Shell中提交了一个脚本,但是进程号不知道要怎么杀死进程?
ps -ef | grep XXX | grep -v grep | awk ‘{print $2}’ | xargs kill|:管道符 用来隔开两个命令,管道左边命令的输出作为管道右边命令的输入。“ps -ef ”查看所有进程的命令“grep xxx”:所有包含关键字xxx的进程“grep -v grep”:列出的进程中除去包含grep的关键字进程“awk ‘{print $2}’ ”:打印过滤后的行第二列,第二列正好是进程号pid“xargs kill -9”:xargs命令用来把前面命
2021-06-14 16:45:57
269
原创 sql中where和on的区别
数据库在通过连接两张或多张表来返回记录时,会生成一张中间的临时表,然后再将这张临时表返回用户,在使用left join时,on和where条件的区别如下:1.on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。2.where条件是在临时表生成好后,再对临时表进行过滤的条件,这时已经没有left join的含义了,条件不为真的就全部过滤掉。...
2021-06-14 13:41:03
147
1
原创 Flume各组件总结
一个Agent主要由三部分组成 Source Channel SinkSource是负责接收数据到Flume Agent的组件。类型如下:avor /thrift /exec /jms /spooling directory /netcat /sequence generator /syslog /http /legacysourceAvro source:监听Avro端口和从外部Avro端接收事件流 当与上一个flume agent搭配内置Avro sink 可以创建分层集合拓扑。
2021-06-14 00:35:47
339
原创 Scala函数式编程(二)
函数作为值使用package com.atguigu.chapter04object Scala1 { def main(args: Array[String]): Unit = { //TODO 函数式编程 -函数作为对象使用 //函数是scala语言非常重要的语法结构,万物皆函数 //函数在scala中不仅仅是功能的封装,也可以看做对象来用 //1.将函数作为对象赋值给变量 def fun1(): Unit ={ println("f.
2021-03-01 19:23:12
334
原创 Scala函数式编程(一)
基本语法[修饰符] def 函数名 (参数列表) : [:返回值类型] = {函数体}private def test ( s : String ) : Unit = {println (s)}函数与方法的区别scala方法是类的一部分,函数是一个对象,可以赋值给一个变量。即在类中定义商务函数都是方法。scala与java类似,方法是组成类的一部分,scala中的函数则是一个完整的对象。声明在类中的函数称之为方法,所以类中的函数就应该符合方法的约束:重写和重载。函数没有重写和重载的概念
2021-02-28 19:43:53
147
原创 Redis的应用总结
一、Redis概述1.Redis是一个开源的key-value存储系统,支持的value类型相对很多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set有序集合)和hash(哈希类型)2.数据都是保存在内存中3.Redis会周期性的把更新的数据写入磁盘或把修改操作写入追加的记录文件。4.实现master-slave(主从)同步二、应用场景缓存数据用于存放以下特点的数据:1)需要高频次访问2)持久化数据访问较慢3)用key查询临时数据
2021-02-21 17:00:58
77
原创 DataNode部分不能启动原因
在搭建hadoop集群中,经常总是有的机器上DataNode不能启动成功查看目录/opt/modules/hadoop-2.7.3/data/tmp/dfs/data/current,cat VERSION文件 对比其他机器的cluster ID ,此时不一致要改为一致,然后用 hadoop-daemon.sh start datanode 就可以启动datanode了...
2021-02-18 17:59:50
145
原创 Kafka总结
Kafka总结一、kafka概述1.1 kafka定义Kafka是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域。订阅式模式:一对多的关系,一个生产者,数据存储在消息队列中,多个消费者均可从这个消息对列中获取数据,消费者消费数据之后不会清除消息。1.2 框架说明一般都是从命令行和API两个方面进行讲解。数据处理框架需要从数据的安全性以及效率两个方面深入了解。1.3 Kafka涉及的关键词1. producer: 消息的生产者,即为向kafka broker
2021-02-10 16:39:17
300
2
原创 对Flume的理解
一个channel只能输出一个结果文件。一个flume agent 由 source + channel + sink 构成,类比于mapper + shuffer + reducer。1.source类型source组件是专门用来收集数据的,可以处理各种类型、各种格式的日志数据常用类型:1) arvo: 用于Flume agent 之间的数据源传递2) netcat: 用于监听端口3)exec: 用于执行linux中的操作指令4) spooldir: 用于监视文件或目录5) t..
2021-02-10 16:25:17
196
原创 Zookeeper工作机制
ZK的选举机制的原理过程选举的总原则:当zk集群中任意一台机器得到选票数超过机器总数的一半以上,它就是当前集群的leader。1. 新搭建的集群(没有数据)举例说明:以5台机器为例前提:集群配置没问题!1,2,3,4,5 顺时启动server1 启动此时它会给自己投票,因为当前票数没有过半,它的投票结果出于(LOOKING)server2 启动此时先给自己投一票,然后server2和server1进行通信,相互交换选票,此时发现给自有一票,那么进行myid的比较,2 >
2021-02-09 17:59:08
311
原创 Hive——窗口函数
窗口函数1.什么时候用开窗函数?开窗函数常结合聚合函数使用,一般来讲聚合后的行数要少于聚合前的行数,但是有时我们既想显示聚集前的数据,又要显示聚集后的数据,这时我们便引入了窗口函数.例如:±------±------------±------±--------------±-+ | name | orderdate | cost | sum_window_0 |±------±------------±------±--------------±-+ | jack | 2017-0
2021-01-25 22:41:21
108
原创 hive常用语句(二)
一、排序1.全局排序(Order by)只有一个Reducer ASC:升序 DESC:降序查询员工信息按工资降序排列hive (default)> select * from emp order by sal desc;2.每个MapReduce内部排序(Sort By)Sort By:针对于大规模的数据集order by的效率非常低,并不需要全局排序,此时可以使用sort by设置reduce个数set mapreduce.job.reduces=3;查看设
2021-01-25 20:33:34
160
原创 hive常用语句(一)
启动beeline客户端beeline -u jdbc:hive2://hadoop102:10000 -n atlxt退出hive窗口hive(default)>exit;先隐性提交数据 再退出hive(default)>quit;不提交数据 直接退出列分隔符row format delimited fields terminated by ‘,’MAP STRUCT 和 ARRAY 的分隔符(数据分割符号)collection items terminated
2021-01-21 23:20:46
358
原创 Zookeeper配置及运行
Zookeeper配置及运行本地模式安装部署1)安装前准备1.安装jdk2.拷贝Zookeeper安装包到Linux系统下3.解压tar -zxvf zookeeper-3.5.7.tar.gz -c /opt/module/4.配置环境变量(可选)[lxt@hadoop102 ~]$ cd etc/profile.d/#创建ZOOKEEPER_HOMEexport ZOOKEEPER_HOME=/opt/module/zookeeper-3.5.7export PATH=$PATH:
2021-01-15 23:02:15
391
原创 Hadoop完全分布式运行模式
Hadoop环境的搭建1.配置克隆主机的环境(1) 准备虚拟机 (最小化安装Linux-模板机)(2) 对模板机进行数据初始化配置 (登录root用户)-- ip地址要进行修改[root@hadoop100 桌面]#vim /etc/sysconfig/network-scripts/ifcfg-ens33[root@hadoop100 桌面]#service network restart-- 用Xshell工具远程连接Linux-- 通过yum安装所需要的插件[root@hadoop1
2021-01-03 22:56:04
219
原创 Linux系统下VI/VIM编辑器的常用语法模式介绍
VI/VIM编辑器VI是Unix操作系统和类Unix操作系统中最通用的文本编辑器VIM编辑器是从VI发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性,方便程序设计。VIM/VI编辑器完全兼容。一般分为三种模式包括:1.一般模式 2.编辑模式 3.指令模式一般模式语法功能yy复制光标当前一行y数字y复制一段(第几行到第几行)p剪头移动到目的行粘贴u撤销上一步dd删除光标当前行d数字d删除光标(含)后多少行
2020-12-25 18:45:30
245
原创 关于Maven的介绍和使用
关于Maven的介绍和使用以前的我们每次创建一个新的工程就要将jar包重复复制到lib目录下,造成工作区中存在大量的重复文件。使用Maven后每个jar包只在本地仓库中保存一份,只要维护它的坐标,这样做不但节约空间而且避免了重复文件过多造成的损失和混乱Maven的使用使用Maven可以享受完全统一规范对的jar包管理体系,只需要在项目中以坐标的形式依赖一个包,Maven就会从自动中央进行下载,并且同时下载这个jar包所依赖的其他jar包。1. 目录结构– IDEA中创建Maven工程,以及
2020-12-24 12:57:09
166
原创 关于MySQL92和99 等值连接、非等值连接、自连接、外连接及多表查询的代码示例总结!
关于MySQL92和99 等值连接、非等值连接、自连接、外连接及多表查询的代码示例总结!一. MySQL92语法*1. 内连接 没有关联关系的数据是不在查询范围之内的*1)等值连接– 查询出101的班级信息(并带上该班级的所有学生信息)SELECT *FROM class,student WHERE class.`id`=student.`clazz_id` AND class.`name`='101';– 查询出rose的所有信息(包括班级信息)
2020-12-21 21:05:43
2360
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人