bigdata
爱你魔力转圈圈
深圳搬砖ing
展开
-
hive关联码表进行补全cid(UDF)
连接hive的工具类package com.bfd.util;import java.sql.*;/** * author:liming * date:2022-01-12 * tittle:连接hive的jdbcDao */public class HiveDao { // 此Class 位于 hive-jdbc的jar包下 private static String driverName ="org.apache.hive.jdbc.HiveDriver";原创 2022-02-10 15:15:52 · 1053 阅读 · 0 评论 -
在scala项目中的java代码无法编译问题
在pom.xml中加入下面配置,就可解决java代码的编译问题<plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>3.4.6</version> &l原创 2021-07-20 16:28:05 · 607 阅读 · 2 评论 -
Hive调优之shyMing成神之路
Hive调优前言1.数据的压缩与存储格式2.合理利用分区分桶3.hive参数优化4.sql优化4.1 where条件优化4.2 union优化4.3 count distinct优化4.4 用in 来代替join4.5 优化子查询4.6 join 优化5.数据倾斜5.1 sql本身导致的倾斜5.2 业务数据本身的特性(存在热点key)5.3 开启数据倾斜时负载均衡5.4 控制空值分布6.合并小文件7.查看sql的执行计划前言毫不夸张的说,有没有掌握hive调优,是判断一个数据工程师是否合格的重要指标 。原创 2020-10-08 19:20:43 · 773 阅读 · 0 评论 -
吊打面试官之flume架构与运行机制
flume架构与运行机制1.Flume的三层架构2.flume运行机制3.flume的事务1.Flume的三层架构Flume采用了三层架构,分别为agent,collector和storage,每一层均可以水平扩展。其中,所有agent和collector由master统一管理,这使得系统容易监控和维护,且master允许有多个(使用ZooKeeper进行管理和负载均衡),这就避免了单点故障问题。1)Agent层:这一层包含了Flume的Agent组件,与需要传输数据的数据源连接在一起2)Colle原创 2020-10-07 10:34:23 · 366 阅读 · 0 评论 -
增量表及拉链表,你懂了吗?
数据准备第一天 9月10号数据1,待支付,2020-09-10 12:20:11,2020-09-10 12:20:112,待支付,2020-09-10 14:20:11,2020-09-10 14:20:113,待支付,2020-09-10 16:20:11,2020-09-10 16:20:11第一天 9月11号数据1,待支付,2020-09-10 12:20:11,2020-09-10 12:20:112,已支付,2020-09-10 14:20:11,2020-09-11 14:21原创 2020-10-06 20:18:50 · 654 阅读 · 1 评论 -
吊打面试官之flume的事务理解
Flume事务概念Flume在处理数据的时候,涉及到数据流动的有两个地方。一个是Source向Channel中放数据的时候,涉及到一个数据的发送(put事务)。还一个是Sink从Channel中拉取数据,也涉及到一个数据的发送。当涉及到数据的批量操作时,就会通过事务来保证数据的一致性和完整性。我们都知道Flume是一个日志文件传输的工具,传输过程会经过三大步骤:1.通过source 把数据从数据源(网络端口,本地磁盘等)读出出来2.通过source把数据传入到channel里面3.再把数据从cha转载 2020-09-29 11:35:09 · 491 阅读 · 1 评论 -
吊打面试官之hbase的架构
hbase的架构hbase基于hadoop,hbase的存储依赖于hdfs。client、zookeeper、hmaster、hregionserver、hlog、hregion、store、mestore、storefile、hfileclienthbase的客户端,包含访问hbase的接口(shell、java、api)client维护一些cache加速对hbase的访问,如region的位置信息zookeeper监控master的状态,保证有且仅有一个active的master,达到高原创 2020-09-28 11:34:34 · 216 阅读 · 0 评论 -
kafka之数据可靠性保证
数据可靠性保证1)副本数据同步策略2)ISR3)ack 应答机制4)故障处理细节为保证 producer 发送的数据,能可靠的发送到指定的 topic,topic 的每个 partition 收到producer 发送的数据后,都需要向 producer 发送 ack(acknowledgement 确认收到),如果producer 收到 ack,就会进行下一轮的发送,否则重新发送数据。1)副本数据同步策略方案优点缺点半数以上完成同步,就发送ack延迟低选举新的 lead原创 2020-09-28 10:03:28 · 237 阅读 · 0 评论 -
kafka之分区策略
kafka分区策略1. Range strategyRange策略是对每个主题而言的,首先对同一个主题里面的分区按照序号进行排序,并对消费者按照字母顺序进行排序。在我们的例子里面,排完序的分区将会是0, 1, 2, 3, 4, 5, 6, 7, 8, 9;消费者线程排完序将会是C1-0, C2-0, C2-1。然后将partitions的个数除于消费者线程的总数来决定每个消费者线程消费几个分区。如果除不尽,那么前面几个消费者线程将会多消费一个分区。在我们的例子里面,我们有10个分区,3个消费者线程, 1原创 2020-09-27 16:36:15 · 200 阅读 · 0 评论 -
吊打面试官之zookeeper原理
zookeeper原理1.Zookeeper特性分析2.Zookeeper之分布式锁机制3.集群选举(1)全新选举(2)非全新选举4.ZooKeeper的工作原理5.Leader和follower的工作流程1.Leader工作流程2.Follower工作流程1.Zookeeper特性分析全局一致性、可靠性、顺序性、数据更新原子性、实时性1.全局一致性每一个server保存一份相同的数据副本,无论连接那个server,显示的数据都是一致的,这是最重要的特征。2.可靠性如果一台服务器接受,那么其他服原创 2020-09-27 14:57:38 · 390 阅读 · 0 评论 -
吊打面试官之mapreduce原理
mapreduce原理1.有一个待处理的大数据,被划分为大小相同的数据块(如64MB),及与此相应的用户作业程序2.系统中有一个负责调度的主节点(Master),以及数据Map和Reduce工作节点(Worker)3.用户作业程序提交给主节点4.主节点为作业程序寻找和配备可用的Map节点,并将程序传送5.主节点也为作业程序寻找和配备可用的Reduce节点,并将程序传送给Reduce节点6.主节点启动每个Map节点执行程序,每个map节点尽可能读取本地或本机架的数据进行计算7.每个Map节点原创 2020-09-26 15:26:18 · 328 阅读 · 0 评论 -
吊打面试官之yarn工作原理
yarn工作原理1.yarn架构2.功能3.工作流程4.工作机制1.yarn架构1.客户端提交应用程序给ResourceManager2.ResouceManager会生成ApplicationMaster,并在某一个节点服务器上运行ApplicationMaster3.ApplicationMaster向ResourceManger注册其信息,并且向ResourceManger发送申请资源报告,申请contaniner容器,以运行application下的任务(其实是每个container容器被原创 2020-09-26 10:46:48 · 380 阅读 · 0 评论 -
吊打面试官之hdfs原理
hdfs原理hdfs架构namenode元信息的持久化NameNode特点SecondaryNameNodehdfs读操作hdfs写操作hdfs文件删除hdfs架构namenode储存文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限), 以及每一个文件的块列表和块所在的datanode①fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。②edits:操作日志文件。③fstime:保存最近一次checkpoint的时间datanode在文件原创 2020-09-25 17:17:48 · 380 阅读 · 0 评论 -
秋天的第一篇博客之想月薪过万的shyMing(大数据篇)
ShyMing教你一招,如何月薪过万1.首先你的有一台性能好的本本。像小编一台amd的本本4G内存跑一个虚拟机加ide都跑不动,之后加了固态,换了内存条勉强可以跑三个虚拟机+ide+1其他软件,但是有时很卡。卡到你奔溃,慢到你怀疑人生。一台好的本本,提升你的编程效率。等我撑过这几个月也要换电脑了。2.悟性很重要。有的知识点不是一时能接收到的,有时需要一时的顿悟,有时要通过一定后面的其他知识学习之后,方可领悟。悟性好,学习起来很快。3.解决问题的能力。遇到bug不要慌,先自己分析,检查代码和自己的环境,原创 2020-09-25 08:25:49 · 220 阅读 · 0 评论 -
项目经验之Kafka压力测试及机器数量计算
项目经验之Kafka压力测试1)Kafka压测用Kafka官方自带的脚本,对Kafka进行压测。Kafka压测时,可以查看到哪个地方出现了瓶颈(CPU,内存,网络IO)。一般都是网络IO达到瓶颈。kafka-consumer-perf-test.shkafka-producer-perf-test.sh2)Kafka Producer压力测试(1)在/opt/module/kafka/bin目录下面有这两个文件。我们来测试一下[atguigu@hadoop102 kafka]$ bin/kaf原创 2020-09-23 11:30:34 · 338 阅读 · 0 评论 -
大数据之技术选型及服务器选择
1.框架版本选型1)Apache:运维麻烦,组件间兼容性需要自己调研。(一般大厂使用,技术实力雄厚,有专业的运维人员)2)CDH:国内使用最多的版本,但CM不开源,但其实对中、小公司使用来说没有影响(建议使用)3)HDP:开源,可以进行二次开发,但是没有CDH稳定,国内使用较少5.2.3 服务器选型2.服务器使用物理机还是云主机?机器成本考虑: 物理机:以128G内存,20核物理CPU,40线程,8THDD和2TSSD硬盘,单台报价4W出头,需考虑托管服务器费用。一般物理机寿命5年左右原创 2020-09-17 20:03:07 · 1282 阅读 · 0 评论 -
吊打面试官之集群规模计算
吊打面试官之集群规模计算1.如何确定集群规模?(假设,每一台服务器8T磁盘,128G) 每天日活跃用户100w,每一个人一天平均100条;100w*100条=10000w 每条日志1k左右,每天1亿条;10000 0000 /1024/1024=约100G 半年内不扩容服务器来算;100G*180天 = 约18T 保存3副本;18T*3 = 54T 预留20%~30%Buf = 54T/0.7=77T 到这里;约8T*10台服务器2.如果考虑数仓分层?服务器将近在扩容1-2倍...原创 2020-09-17 19:53:02 · 1250 阅读 · 1 评论 -
电信采集项目之协处理器
电信采集项目之协处理器简介协处理器允许用户在region服务器上运行自己的代码,允许用户执行region级别的操作,并且可以使用与RDBMS中触发器(trigger)类似的功能。在客户端,用户不用关心操作具体在哪里执行,HBase的分布式框架会帮助用户把这些工作变得透明。协处理器框架提供了一些类,用户可以通过继承这些类来扩展自己的功能。主要分为以下两大类observer这一类协处理器与触发器(trigger)类似:回调函数(也被称作钩子函数,hook)在一些特定事件发生时被执行。这些事件包括一些用原创 2020-09-17 08:23:06 · 189 阅读 · 0 评论 -
Hbase之rowkey设计
rowkey设计1)长度原则最大值64KB,推荐长度为10 ~ 100byte最好8的倍数,能短则短,rowkey如果太长会影响性能2)唯一原则 : rowkey应该具备唯一性3)散列原则 盐值散列:不能使用时间戳直接作为rowkey,在rowkey前增加随机数 字符串反转 :1312312334342, 1312312334345电话号码:133 + 0123 + 4567 计算分区号:hashMap...原创 2020-09-11 14:57:05 · 176 阅读 · 0 评论 -
Broadcast广播变量
Broadcast广播变量: 广播变量用来高效分发较大的对象,向所有工作节点发送一个较大的只读值,以供一个或者多个spark操作使用。 比如,如果你的应用,需要向所有节点发送一个较大只读查询表,甚至是机器学习1算法中的一个很大的特征向量,广播变量用起来都是很顺手的。广播变量 广播变量在广播的时候,将driver端的变量广播到每一个worker原创 2020-09-07 09:01:09 · 615 阅读 · 0 评论 -
spark自定义累加器(二)
自定义单词统计累加器应用场景:Driver端定义一个共享变量,将数据累加到该变量上,如果直接用foreach或map等迭代算子,是无法将累加的变量返回到driver端,因为累加的过程发生在Executor端。一般用于计数场景下,变量 往往声明在Driver端。特性: 变量在Driver端,累加的过程是在Executor端,在累加的过程Executor端是无法读取其值的,如果想读取其值,只能在Driver端才能读取。使用:1.创建一个Accumulator累加器的实例2.通过sc.register原创 2020-09-07 08:53:00 · 213 阅读 · 0 评论 -
spark自定义累加器(一)
自定义Accumulator累加器(求和型)应用场景:Driver端定义一个共享变量,将数据累加到该变量上,如果直接用foreach或map等迭代算子,是无法将累加的变量返回到driver端,因为累加的过程发生在Executor端。一般用于计数场景下,变量 往往声明在Driver端。特性: 变量在Driver端,累加的过程是在Executor端,在累加的过程Executor端是无法读取其值的,如果想读取其值,只能在Driver端才能读取。使用:1.创建一个Accumulator累加器的实例2.通原创 2020-09-07 08:50:26 · 1051 阅读 · 0 评论 -
Accumulator累加器(二)
Accumulator累加器应用场景:Driver端定义一个共享变量,将数据累加到该变量上,如果直接用foreach或map等迭代算子,是无法将累加的变量返回到driver端,因为累加的过程发生在Executor端。一般用于计数场景下,变量 往往声明在Driver端。特性: 变量在Driver端,累加的过程是在Executor端,在累加的过程Executor端是无法读取其值的,如果想读取其值,只能在Driver端才能读取。使用:1.创建一个Accumulator累加器的实例2.通过sc.regi原创 2020-09-07 08:45:18 · 1604 阅读 · 0 评论 -
Accumulator累加器(一)
累加器应用场景:Driver端定义一个共享变量,将数据累加到该变量上,如果直接用foreach或map等迭代算子, 是无法将累加的变量返回到driver端,因为累加的过程发生在Executor端。一般用于计数场景下,变量往往声明在Driver端。特性: 变量在Driver端,累加的过程是在Executor端,在累加的过程Executor端是无法读取其值的,如果想读取其值,只能在Driver端才能读取。自定义累加器使用(此例子为非自定义累加器):1.创建一个Accumulator累加器的实例2.通原创 2020-09-07 08:39:59 · 1780 阅读 · 0 评论 -
spark重写排序规则(四)
元组封装排序条件import org.apache.spark.{SparkConf, SparkContext}import org.apache.spark.rdd.RDD/*元组封装排序条件 */object CustomSort_5 extends App { val conf = new SparkConf() conf.setAppName(this.getClass.getName).setMaster("local[2]") val sc = new SparkC原创 2020-09-02 09:05:22 · 157 阅读 · 0 评论 -
spark重写排序规则(三)
指定隐式值进行排序数据Array(“mimi1 21 85”, “mimi2 22 87”, “mimi3 23 87”)姓名 name 年龄 age 颜值 fvimport org.apache.spark.{SparkConf, SparkContext}import org.apache.spark.rdd.RDDobject CustomSort_4 { def main(args: Array[String]): Unit = { val conf = new Spa原创 2020-09-02 09:02:01 · 163 阅读 · 0 评论 -
spark重写排序规则(二)
1.样例类实现自定义排序,需要实现ordered特质,不需要实现serializable,不需要new对象(本文样例类)2.普通类实现自定义排序,需要实现ordered特质,实现serializable姓名name 年龄age 颜值fv文本为(Array(“mimi1 22 85”, “mimi2 22 86”, “mimi3 23 86”))按照颜值降序、年龄降序排列import org.apache.spark.rdd.RDDimport org.apache.spark.{SparkCon原创 2020-09-02 08:50:40 · 3260 阅读 · 0 评论 -
spark重写排序规则(一)
1.样例类实现自定义排序,需要实现ordered特质,不需要实现serializable,不需要new对象(本文样例类)2.普通类实现自定义排序,需要实现ordered特质,实现serializable姓名name 年龄age 颜值fv文本为Array(“mimi1 22 86”, “mimi2 22 86”, “mimi3 23 87”)按照颜值降序、年龄降序排列import org.apache.spark.rdd.RDDimport org.apache.spark.{Spa原创 2020-09-02 08:42:37 · 222 阅读 · 0 评论 -
广告统计top3(二)
数据字段: 时间戳 ,省份, 城市 , userId, adId统计每一个省份每一个小时的广告id访问量top3package com.jxlg.RDDimport org.apache.spark.{SparkConf, SparkContext}import org.joda.time.DateTime/** * 数据字段: 时间戳 省份 城市 userId adId * 统计每一个省份每一个小时的广告id访问量top3 */object AdventTo原创 2020-08-30 15:53:51 · 326 阅读 · 0 评论 -
广告统计top3(一)
数据字段: 时间戳 省份 城市 userId adId需求: 求每一个省份的点击广告的top3package com.jxlg.RDDimport org.apache.spark.{SparkConf, SparkContext}/** * 数据字段: 时间戳 省份 城市 userId adId * 需求: 求每一个省份的点击广告的top3 */object AdventTop3_1 { def main(args: Array[String]): Un原创 2020-08-30 15:48:58 · 199 阅读 · 0 评论 -
RDD的概念和特性
1.RDD是一个抽象分布式数据集,是一个数据描述。RDD是Spark提供的核心抽象,全称为Resillient Distributed Dataset,即弹性分布式数据集。RDD在抽象上来说是一种元素集合,包含了数据。它是被分区的,分为多个分区,每个分区分布在集群中的不同节点上,从而让RDD中的数据可以被并行操作。(分布式数据集)2.并没有真正获取到数据,对元数据信息的存储,提供操作rdd的算子,100多个,常用的有几十多个。3.有弹性的,从存储方面和数据容错方面体现RDD的弹性。存储方面:计算时,首原创 2020-08-30 14:45:14 · 2679 阅读 · 0 评论 -
RDD的依赖关系(重要)
RDD的依赖关系窄依赖宽依赖图解RDD和它的依赖的父RDD(s)的关系有两种不同的类型,及窄依赖(narrow dependency)和宽依赖(wide dependency)窄依赖窄依赖指的是每一个父RDD的partition最多被子RDD的一个partition使用总结:窄依赖,形象的说就是独生子女宽依赖宽依赖指的是多个子RDD的partition会依赖于同一个父RDD的partition总结:宽依赖,形象的说就是超生。ps:宽依赖就会发生shuffle的过程图解注意:join只有原创 2020-08-30 11:30:05 · 434 阅读 · 0 评论 -
蚂蚁森林(hive)查询练习
蚂蚁森林背景说明:以下表记录了用户每天的蚂蚁森林低碳生活领取的记录流水。table_name:user_low_carbonuser_id data_dt low_carbon用户 日期 减少碳排放(g)蚂蚁森林植物换购表,用于记录申领环保植物所需要减少的碳排放量table_name: plant_carbonplant_id plant_name low_carbon植物编号 植物名 换购植物所需要的碳1.创建表create table user_low_carb原创 2020-08-28 11:29:33 · 662 阅读 · 0 评论 -
hive的运行原理
组成及作用:用户接口:ClientCLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)元数据:Metastore元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;默认存储在自带的derby数据库中,推荐使用MySQL存储MetastoreHadoop使用HDFS进行存储,使用MapReduce进行计算驱动器:Driver(1)解析器(SQL Parser).原创 2020-08-27 13:59:41 · 533 阅读 · 0 评论 -
RDD练习(二)
1.aggregateByKey val rdd1 = sc.parallelize(List(("tom",20),("tom",12),("tom1",18),("tom1",19),("tom2",22),("tom2",10),("tom2",30),("tom1",19)),2) rdd1.aggregateByKey(0)(math.max(_,_),_+_).collect结果 res38: Array[(String, Int)] = Array((tom2,30),原创 2020-08-26 07:32:11 · 238 阅读 · 0 评论 -
RDD练习(一)
1sortByval rdd3 = sc.parallelize(List(1,2,3,4,19,29,10)) rdd3.map(_*2).sortBy(x=>x).collect rdd3.map(_*2).sortBy(x=>x,false).collect2.filter val rdd3 = sc.parallelize(List(1,2,3,4,19,29,10)) rdd3.map(_*2).filter(_>10).collect (过滤)原创 2020-08-25 21:38:10 · 627 阅读 · 0 评论 -
创建RDD的方式
创建rdd的两个方法1.指定文件进行创建val rdd1= sc.textFile(“hdfs://hlm1:9000/user/spark”)2.使用parallelize进行创建2.1传递Seq作为参数val rdd2 = sc.parallelize(Seq((“xiaoli”,18),(“xiaoli1”,19),(“xiaoli2”,20),(“xiaoli3”,21)))2.2传递Array作为参数val rdd3 = sc.parallelize(Array((“xiaoli”,原创 2020-08-25 20:17:46 · 460 阅读 · 0 评论 -
hive之窗口函数
窗口函数1.查询在2020-08购买了商品的顾客的人数2.查询顾客购买明细及月购买总量3.上述场景,将每个顾客的cost按照日期进行累加4.查询顾客上次的购买时间5.查询前20%的事件的购单信息jack1,2020-08-02,18jack1,2020-08-02,18jack2,2020-08-02,28jack2,2020-08-02,38jack2,2020-08-02,28jack3,2020-08-02,18jack4,2020-04-02,58create table if n原创 2020-08-21 12:15:13 · 388 阅读 · 0 评论 -
函数(hive)
1.NVL(空字段赋值)nvl函数,当查询的结果为null时默认值为后面的参数,100select nvl(salary,100) from emp;2.case统计emp表中的,每一个部门的男女数量selectdept_id,count(*) total,--sum(case sex when 'man' then 1 when 'renyao' then 0.5 else 0 end) male,sum(case sex when 'man' then 1 else 0 en原创 2020-08-21 11:58:33 · 174 阅读 · 0 评论 -
hive之优化策略
hive优化1.hive.fetch.task.conversionnone minal more(最高级别)set hive.fetch.task.conversion=more;2.本地模式set hive.exec.mode.local.auto=true;3.join开启自动选择Mapjoinset hive.auto.convert.join=true;大小表阀值set hive.mapjoin.smaltable.filesize=25000000;4.开启map端集合原创 2020-08-21 11:49:33 · 199 阅读 · 0 评论