自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

寒暄的博客

这个时代就是这样的,不快就得死,耐心不能当饭吃。

  • 博客(60)
  • 资源 (9)
  • 收藏
  • 关注

原创 Hive源码阅读--导读

总述Hive的执行流程大致分为两部分,即任务的提交与返回,命令的编译与执行。前者在CliDriver类中流转,后者主要在Driver与ParseDriver类,核心编译在BaseSemanticAnalyzer和QueryPlan类中。任务的提交与返回调用顺序:main --(程序的开始)–>run --(任务的开始,读取用户传参与相关配置,初始化日志)–>executeDriver --(确保传入的语句是一条完整的SQL或命令)–>processLine --(

2020-08-21 11:58:10 2634 6

原创 Hive性能调优策略

利用分区表优化场景:在业务环境中,以某个字段为筛选条件的需求增加解决方法:建立以这个字段为分区的分区表,这样进行查询时只需要指定这个分区就不再需要进行全表扫描利用分桶表优化场景:需要频繁进行采样解决方法:分桶表会使用hash算法将写入的数据随机的分入桶中,如果要进行采样的话,直接选择一个桶即可。补充三种采样的方法 :-- 分桶抽象select * from tmp_table tablesample(bucket 3 out of 32);-- 3是抽取的分桶号,分桶号从0开始,32为总分

2020-08-29 18:36:56 1020

原创 大数据SQL经典面试题系列(5) - 如何找出最小的N个数

表结构:表名:Studentname -- 姓名stunum -- 学号class -- 班级adtime -- 入学时间age -- 年龄major -- 专业namestunumclassadtimeagemajor小赵00011班2016-09-0119计算机小钱00021班2017-09-0121计算机小孙00032班2017-09-0119金融小李00043班2017-09-0117计算机

2020-08-26 17:29:55 536

原创 大数据SQL经典面试题系列(4) - 鹅厂校招SQL硬性考察题目

目:有一张用户签到表【t_user_attendence】,标记每天用户是否签到(说明:该表包含所有用户所有工作日的出勤记录) ,包含三个字段:日期【fdate】,用户id【fuser_id】,用户当天是否签到【fis_sign_in:0否1是】;问题1:请计算截至当前每个用户已经连续签到的天数(输出表仅包含当天签到的所有用户,计算其连续签到天数)输出表【t_user_consecutive_days】:用户id【fuser_id】,用户联系签到天数【fconsecutive_days】解答逻辑非常简单,

2020-08-26 16:06:23 882 1

原创 大数据SQL经典面试题系列(3) -网易严选/考拉数据分析SQL题

查询每个用户第一单的消费金额现在数据库中有一张用户交易表order,其中有userid(用户ID)、amount(消费金额)、paytime(支付时间),请写出对应的SQL语句,查出每个用户第一单的消费金额。select a.userid,a.amountfrom(select * ,rank() over(partition by userid order by paytime) as paytime_rank from order ) as a where paytime_rank=1查询

2020-08-26 15:18:39 1101 1

原创 Hive源码阅读–查询分析器–SemanticAnalyzer

SemanticAnalyzer可以说是对查询所有的优化都在其中。代码量有13514行,我们主要关注他对analyzeInternal的实现。 void analyzeInternal(ASTNode ast, PlannerContext plannerCtx) throws SemanticException { // 1.从语法树生成解析树 LOG.info("Starting Semantic Analysis"); processPositionAlias(ast);

2020-08-24 11:53:15 1163

原创 Hive源码阅读–词法、语法解析–HiveLexerX/HiveParser

public HiveParser(TokenStream input, RecognizerSharedState state) { super(input, state); this.adaptor = new CommonTreeAdaptor(); this.errors = new ArrayList(); this.msgs = new Stack(); this.excludedCharForColumnName.

2020-08-22 17:30:07 1838 1

原创 Hive源码阅读--SQL on JOB--ParseDriver/BaseSemanticAnalyzer/QueryPlan/execute

SQL --> ASTSQL转换为AST需要经过org.apache.hadoop.hive.ql.parse.ParseDriver的parse方法。通过org.apache.hadoop.hive.ql.Driver的compile方法中的ASTNode tree = pd.parse(command, this.ctx);进行跳转。org.apache.hadoop.hive.ql.parse.ParseDriver----------public ASTNode parse(Str

2020-08-21 15:55:43 1097

原创 Hive源码阅读--SQL的语法解析和语义分析--Driver

前面五个类,殊途同归都是CliDriver类,他负责接受用户在命令行上输入的信息,然后准备执行并将执行的结果返回。而真正底层干事情的是Driver,他将接受到的命令编译,优化为MR(或RDD),真正的调动集群跑作业。在processLocalCmd中有这样一句ret = qp.run(cmd).getResponseCode();,这句中的run不是CliDriver的run,而是Driver的run。 public CommandProcessorResponse run(String comman

2020-08-21 10:25:00 1094

原创 Hive源码阅读--命令的执行与返回--processLocalCmd

处理sql命令,根据不同的命令处理器处理不同sql命令,主要区分处理器是否是Driver类,如果是,处理除了(set,reset,dfs,add,list,delete,reload,crypto)命令外的其他sql ,如果不是调用各自处理器的run方法.int processLocalCmd(String cmd, CommandProcessor proc, CliSessionState ss) { int tryCount = 0; int ret = 0;

2020-08-20 16:50:01 445

原创 Hive源码阅读--作业的执行--processCmd

在processCmd方法中,主要流程有:去除命令中的注释;如果命令是quit或exit,则退出;如果命令是source开头,则校验source命令后面的文件是否存在,存在则执行processFile;如果命令是以感叹号!开头,表明是shell命令,这时候直接调用shell命令执行器执行;如果以上都不是,则说明是本地模式。然后获得命令处理器,并调用processLocalCmd执行命令。这里说出了processCmd向后的两个方向,第一个方向是processFile,用于执行文件,第二个方向

2020-08-20 16:25:25 444

原创 Hive源码阅读--作业的准备--processLine

processLine可以理解为作业上了一道保险,确保如果因为特殊情况需要中止作业的话有结束的方法。同时将每一条语句提交给processCmd执行并接受返回值。相当于为作业正式执行做铺垫的类。public int processLine(String line, boolean allowInterrupting) { SignalHandler oldSignal = null; Signal interruptSignal = null; // 1.默

2020-08-20 15:48:04 732 1

原创 Hive源码阅读--作业的提交--executeDriver

在run方法最后调用了executeDriver方法,同时传入三个参数:ss hiveconf用户配置conf hiveconf默认配置oproc 用户环境配置private int executeDriver(CliSessionState ss, HiveConf conf, OptionsProcessor oproc) throws Exception { // 1.创建cli对象 CliDriver cli = new CliDriver(); //

2020-08-20 15:09:31 550

原创 Hive源码阅读--作业的入口--CliDriver

hive执行流程整个流程的第一步,就是cli提交作业给driver,这一步需要通过org.apache.hadoop.hive.cli.CliDriver类。CliDriver类首先看CliDriver类的main方法。org.apache.hadoop.hive.cli.CliDriver---------- /** * 输入参数String[] args不需要分析,是外部命令传进来的参数 */ public static void main(String[] args) t

2020-08-20 11:28:00 2266

原创 Kafka-eagle--可视化监控组件

安装部署修改 kafka-server-start.sh内容if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"fi==>if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then export KAFKA_HEAP_OPTS="-server -Xms2G -Xmx2G -XX:PermSize=128m -XX:+UseG1GC -XX:MaxGCPause

2020-08-19 16:38:10 627

原创 KafkaAPI--自定义拦截器

拦截器拦截器(interceptor)是在 Kafka 0.10 版本被引入的,主要用于实现 clients 端的定制化控制逻辑。Intercetpor 的实现接口是org.apache.kafka.clients.producer.ProducerInterceptor,其定义的方法包括:configure(configs)获取配置信息和初始化数据时调用。onSend(ProducerRecord):该方法封装进 KafkaProducer.send 方法中,即它运行在用户主线程中。

2020-08-19 14:02:07 195

原创 KafkaAPI--消费者API

package com.company;import kafka.tools.ConsoleConsumer;import org.apache.kafka.clients.consumer.ConsumerConfig;import org.apache.kafka.clients.consumer.ConsumerRecord;import org.apache.kafka.clients.consumer.ConsumerRecords;import org.apache.kafka.cl

2020-08-18 17:29:04 452

原创 KafkaAPI--生产者API

异步发送流程在整个流程中最关键的是两个线程main线程与sender线程与一个公共变量RecordAccumulator。main线程向RecordAccumulator发送数据,sender线程从RecordAccumulator读取数据。在main线程中,消息由Producer发出,经过过滤器Interceptors,序列化器Serializer,分区器Partitioner后分发给RecordAccumulator。相关参数:batch.size:只有数据积累到 batch.size 之后

2020-08-17 16:55:08 338

原创 Kafka高级--消费者

消费方式消费者消费方式有pull和push两种。push指broker推送数据给消费者,这样在固定的发送效率下处理能力差的消费者很容易出现网络拥堵。说白了就是一个劲的灌吃食,能吃就吃,吃不下噎着。pull指消费者主动拉取数据,这样的模式不足的地方在于如果kafka中没有数据了,消费者就会陷入循环,一直返回空数据。就是消费者根据自己的能力来吃东西了,但是桌子上没东西了消费者也会夹空气吃。针对这一点可以使用一个参数timeout,当没有消息可以消费了,等待timeout秒后消费者停止消费。分区分配策略

2020-08-14 17:26:01 483

原创 Kafka高级--生产者

分区策略kafka分区主要从两点出发,第一点是方便在集群中扩展,分布式组件都具有横向扩展能力,第二点是提高并发量,比较最低单位就是分区,并发量肯定大。在我们提交ProducerRecord对象时,根据实际情况有三种策略:指明 partition 的情况下,直接将指明的值直接作为 partiton 值;没有指明 partition 值但有 key 的情况下,将 key 的 hash 值与 topic 的 partition 数进行取余得到 partition 值;既没有 partition 值又没

2020-08-13 16:05:15 194 1

原创 Kafka高级--工作机制与文件存储机制

Producer向Topic-leader分类推送数据,每一个队列的主题都不同。Topic-leader向Topic-follower实时备份数据,防止Topic-leader突然挂掉。Consumer消费Topic-leader中的数据,以offset为标志,表示消费到的位置,以便出错恢复时,从上次的位置继续消费。Kafka 中消息是以 topic 进行分类的,生产者生产消息,消费者消费消息,都是面向 topic的。topic 是逻辑上的概念,而 partition 是物理上的概念,每个 ..

2020-08-12 17:01:10 141

原创 Kafka基础--部署与基础操作

下载地址http://kafka.apache.org/downloads.html环境配置Kafka环境中必须有ZooKeePer与Java环境。上传解压# 解压[root@ch1 hdk]# tar -zxvf kafka_2.11-0.11.0.0.tgz# 重命名[root@ch1 hdk]# mv kafka_2.11-0.11.0.0 kafka配置环境变量# 修改文件[root@ch1 hdk]# vi /etc/profileexport JAVA_H

2020-08-11 15:41:21 165

原创 Kafka基础--Kafka架构图

架构图角色Producer :消息生产者,就是向 kafka broker 发消息的客户端;Consumer :消息消费者,向 kafka broker 取消息的客户端;Consumer Group (CG):消费者组,由多个 consumer 组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。Broker :一台 kafka 服务器就是一个 broker。一个集群由多个 b

2020-08-08 14:58:47 1512 1

原创 Kafka基础--消息队列与消费模式

传统消息队列在信息系统传输信息中,不可能依靠某一性能来决定先后顺序,应该统一按照先来后到排队。Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。在传统消息队列中分为两种,一种是同步消息队列,即让用户等待流程完成:一种叫异步消息队列,即你的请求我收到了,我先给你弄着,你先去忙其他的事情吧:消息队列最大的优点有两个:解耦与削峰。同时还有很多其他优点:解耦允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。

2020-08-08 14:28:22 3053 1

原创 SparkSQL操作Hive数据源

连接Hive与SparkSQL将hive安装目录中conf目录下的hive-site.xml拷贝至spark安装目录下的conf目录。然后启动SparkShell,运行:spark.sql("show tables").show()spark.sql("show databases").show()前者为元数据,后者为hive中的库。如果想要...

2020-08-07 15:04:04 402

原创 Spark SQL自定义函数UDF、UDAF以及开窗函数

UDFcom.udf.AppUdfpackage com.udfimport org.apache.spark.SparkConfimport org.apache.spark.sql.{Row, SparkSession}import org.apache.spark.sql.types.{DataTypes, StructField}import scala.util.Randomobject AppUdf { def main(args: Array[String]):

2020-08-06 15:11:34 258

原创 IDEA开发SparkSQL程序

SparkSession常用函数与方法方法说明builder创建一个sparkSession实例version返回当前spark的版本implicits引入隐式转化emptyDataset[T]创建一个空DataSetrange创建一个DataSet[Long]sql执行sql查询(返回一个dataFrame)udf自定义udf(自定义函数)table从表中创建DataFramecatalog访问结构化查询实体的目录

2020-08-06 11:37:30 308

原创 IDEA开发SparkSQL报错:org.apache.spark.SparkException: A master URL must be set in your configuration

Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties20/08/06 10:33:42 INFO SparkContext: Running Spark version 2.4.420/08/06 10:33:42 ERROR SparkContext: Error initializing SparkContext.org.apache.spark.SparkException: A maste

2020-08-06 10:46:35 1126

原创 SparkSQL--基础编程

DataFrame的基础操作创建一个DataFrame首先看一下SparkSQL可以接受那些类型:scala> spark.read.csv format jdbc json load option options orc parquet schema table text textFile注意:本文中的spark是sparkSession对象默认的名称然后去spark安装目录下将people.json文件上传至hdfs:[roo

2020-08-06 09:55:55 226

原创 SparkSQL--基础知识点

什么是SparkSQLSparkSQL是Spark用于处理结构化数据的一个模块,他将数据抽象为DataFrame和DataSet,并且SparkSQL也是OLAP数据引擎。Hive将SQL转换为MR提交给集群执行,那么SparkSQL就将SQL转换为RDD提交给集群执行。SparkSQL兼容HiveQL。什么是DataFrameDataFrame和RDD类似,都是一个用来存储数据的集合,但是DataFrame内部是以二维表的形式存储数据。SparkSQL的DataFrame和pandas的Dat

2020-08-05 11:42:04 357

原创 SparkRDD的广播变量

广播变量用来高效分发较大的对象。向所有工作节点发送一个较大的只读值,以供一个或多个Spark操作使用。比如,如果你的应用需要向所有节点发送一个较大的只读查询表,甚至是机器学习算法中的一个很大的特征向量,广播变量用起来都很顺手。在多个并行操作中使用同一个变量,但是 Spark会为每个任务分别发送。scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))broadcastVar: org.apache.spark.broadcast.Broad

2020-08-05 10:51:51 561

原创 SparkRDD的任务切分

角色SparkRDD的任务角色分为四个:Application每一个SparkContext就是一个ApplicationJobApplication中每一个Action会生成一个JobStage根据RDD之间的依赖关系的不同将Job划分为不同的Stage(以宽依赖为界)TaskStage是一个TaskSet,将Stage划分的结果发送到不同的Executor执行即为一个Task...

2020-08-04 17:27:59 722

原创 SparkRDD的函数传递

在实际开发中,我们需要根据实际情况自定义一些RDD的操作,但是我们自定义的RDD操作在Driver端工作,而任务在Executor端工作,这就涉及到了跨进程通信,也就是必须进行序列化。传递函数package com.day1import org.apache.spark.{SparkConf, SparkContext}import org.apache.spark.rdd.RDDobject SeriTest { def main(args: Array[String]): Unit =

2020-08-04 16:22:13 266

原创 Spark行动算子(Action)--foreach算子

语法Rdd. foreach(func)源码def foreach(f : scala.Function1[T, scala.Unit]) : scala.Unit = { /* compiled code */ }作用在数据集的每一个元素上,运行函数func进行更新。例子package com.day1import org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext}object ope

2020-08-04 14:39:08 1250

原创 Spark行动算子(Action)--countByKey算子

语法Rdd. countByKey源码def countByKey() : scala.collection.Map[K, scala.Long] = { /* compiled code */ }作用针对(K,V)类型的RDD,返回一个(K,Int)的map,表示每一个key对应的元素个数。例子package com.day1import org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext}

2020-08-04 14:36:49 284

原创 Spark行动算子(Action)--saveAsTextFile算子/saveAsObjectFile算子

语法Rdd. saveAsTextFile(path)Rdd.saveAsObjectFile(path)path是存储路径源码def saveAsTextFile(path : scala.Predef.String) : scala.Unit = { /* compiled code */ }def saveAsObjectFile(path : scala.Predef.String) : scala.Unit = { /* compiled code */ }作用saveAsTex

2020-08-04 14:29:52 637

原创 Spark行动算子(Action)--fold算子

语法Rdd.fold(num)(func)num为初始值func为元素与初始值进行的操作源码def fold(zeroValue : T)(op : scala.Function2[T, T, T]) : T = { /* compiled code */ }作用aggregate的简化操作,seqop和combop使用同一函数。例子package com.day1import org.apache.spark.rdd.RDDimport org.apache.spark.{Spa

2020-08-04 11:56:10 329

原创 Spark行动算子(Action)--aggregate算子

语法Rdd. aggregate(zeroValue: U)(seqOp: (U, T) ⇒ U, combOp: (U, U) ⇒ U)zeroValue表示分区初始值seqOp表示分区内元素与初始值进行的函数combOp表示每个分区的结果与初始值进行的函数源码def aggregate[U](zeroValue : U)(seqOp : scala.Function2[U, T, U], combOp : scala.Function2[U, U, U])(implicit evidence

2020-08-04 11:51:03 407

原创 Spark行动算子(Action)--takeOrdered算子

语法Rdd. takeOrdered(n)源码def takeOrdered(num : scala.Int)(implicit ord : scala.Ordering[T]) : scala.Array[T] = { /* compiled code */ }作用返回RDD中的前n个元素组成的数组。例子package com.day1import org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkCon

2020-08-04 11:20:20 424

原创 Spark行动算子(Action)--take算子

语法Rdd. take(n)源码def take(num : scala.Int) : scala.Array[T] = { /* compiled code */ }作用返回RDD中的前n个元素。例子package com.day1import org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext}object oper { def main(args: Array[String]

2020-08-04 11:13:31 1480

dolphinscheduler-service-3.1.0.jar

该jar包用以解决dolphinscheduler版本引起的bug: org.apache.dolphinscheduler.server.master.runner.task.CommonTaskProcessor:[125] - [WorkflowInstance-272][TaskInstance-0] - submit task error。 该问题由版本bug解决,可以升级至dolphinscheduler2022年11月之后版本解决。

2023-01-05

CDH-6.3.2-FLINK1.12.0相关资源包

CDH-6.3.2-FLINK1.12.0相关资源包

2022-03-15

flink-connector-clickhouse.jar

flinkSQL clickhouse连接器

2021-10-19

行政区域维度表、时间维度表、日期维度表数据.rar

行政区域维度表、时间维度表、日期维度表,表结构、表数据、建表语句、生成数据的python脚本。

2021-10-11

doris-output 编译后

doris12编译

2021-09-26

hudi编译所需jar包.zip

kafka-schema-registry-client-6.1.1.jar pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar common-config-6.1.1.jar common-utils-6.1.1.jar kafka-avro-serializer-6.1.1.jar

2021-04-27

atlas必备资源包

apache-atlas-2.0.0-hive-hook.tar.gz apache-atlas-2.0.0-server.tar.gz

2020-10-21

guliVideo.zip

https://blog.csdn.net/qq_41106844/article/details/107429584 配套练习guliVideo,Hive SQL 练习题数据源。 有两份数据,一份用户数据,一份视频数据。

2020-07-24

ClickHouse_19.7.3.9-el7_rpm包

clickhouse-client-19.7.3.9-1.el7.x86_64.rpm clickhouse-common-static-19.7.3.9-1.el7.x86_64.rpm clickhouse-server-19.7.3.9-1.el7.x86_64.rpm clickhouse-server-common-19.7.3.9-1.el7.x86_64.rpm 本文件仅用于学习,参考,资源来自网络,如有侵权,请联系删除。

2020-06-24

标签设计文档.xlsx

数据仓库元数据设计必须有很强的规范性与极高的易读性,一个好的元数据设计可以支撑公司数年甚至十年以上的稳定。 那么元数据设计怎样设计才好呢?这是一份标签设计文档,使用三层标签设计准则,对物理度量与值都有一定规范,是一份好的参考资料。

2020-05-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除