- 博客(18)
- 资源 (3)
- 收藏
- 关注
原创 Clickhouse实现累计求和cumulative sum
源表数据如下:timeprovinceorder_cnt20200601shandong10020200601jiangsu20020200601zhejiang30020200602shandong20020200602jiangsu30020200602zhejiang40020200603shandong40020200603jiangsu50020200603zhejiang600需求是
2020-06-15 19:13:51 7878 9
原创 spark通过官方jdbc写入数据到clickhouse
因为之前测试spark 2.4.0以上版本无法通过native jdbc接口写入clickhouse(之前的文章),尝试了下官方的jdbc接口。环境clickhouse两个分片,无副本读取hive分区,不同分区数据交替写入两个分片实现import java.util.Randomimport org.apache.spark.SparkConfimport org.apache.spark.sql.types.{DoubleType, LongType, StringType}impo
2020-05-21 14:04:19 4447 6
原创 clickhouse jdbc报错:Too many partitions for single INSERT block (more than 100)
通过clickhouse官方jdbc写入时报错:Too many partitions for single INSERT block (more than 100)解决:调整了建表时PARTITION BY分区字段,因为是从hive里读的,所以直接用了hive分区的值: PARTITION BY dt,之前用的add_time字段做分区:toYYYYMMDD(toDateTime(last_update_time, 'Asia/Shanghai')),这个字段在同一批次写入里包括大于100个分区值,c
2020-05-21 13:49:55 4296
原创 Spark DataSource API 分析
什么是Spark Datasource APISpark Datasource API 是一套连接外部数据源和Spark引擎的框架它主要是给Spark框架提供一种快速读取外界数据的能力,它可以方便地把不同的数据格式通过DataSource API注册成Spark的表,然后通过Spark SQL直接读取。它可以充分利用Spark分布式的优点进行并发读取,而且SparkSQL本身有一个很好的Catalyst优化引擎,能够极大的加快任务的执行。Spark Datasource API 同时提供了一套优化机制
2020-05-20 11:11:47 464
原创 Spark Streaming 指定消费Topic中某个Partition的数据
最近接触到一个需求:通过Driect API消费Kafka topic中指定partiton中的数据。这个partition中的数据是用户通过某种算法过滤出的有效数据,其他partition数据不作处理,代码片段实现如下:val kafkaParams = Map[String, String]("metadata.broker.list" -> "ip:port", "auto.offset.reset" -> "largest") val kc = new KafkaCluste
2020-05-20 11:10:06 503
原创 SparkStreaming 新增Metrics 支持Kafka数据消费堆积监控
在SparkStreaming任务运行的过程中,由于数据流量或者网络的抖动,任务的batch很可能出现delay,所以就出现了一个需求:实时监控任务对kafka消息的消费,及时了解堆积情况。这个需求应该有很多种解决方案,我这边提供的思路是基于Spark Metrics System的。SparkStreaming任务在运行过程中,会产生很多Metrics信息,不断地推送到Sink上面,我们这里使用到的是MetricsServlet。打开Spark UI,我们能够很方便地通过RestAPI方式请求任务Me
2020-05-20 11:07:04 483
原创 SparkStreaming使用messageHandler预处理Kafka数据
在SparkStreaming任务中,可以使用DirectKafkaInputDStream中的messageHandler功能对接受到的kafka数据做下预处理,接口声明如下图:最近就收到一个需求,很简单:如果kafka中的原数据类似于【a,b,1:2:3,d】,但想要将数据的[1:2:3]字段拆开分别跟其他字段组成一个字符串,如:【a,b,1,d】【a,b,2,d】【a,b,3,d】这时就可以使用messageHandler对原数据做处理,实现主要代码如下:...
2020-05-20 11:05:35 340
原创 HistoryServer 进程运行日志无限增长问题解决
Spark-HistoryServer在运行过程中会打印自身进程的日志,这里是指打印在${SPARK_HOME}/logs目录下,名称为spark-spark-org.apache.spark.deploy.history.HistoryServer-1-node.hostname.out的日志,非eventLog。这个日志在Spark层面没有做相应的控制,也没有相应的参数做调优。这种情况下该日志文件会无限增长,最终将磁盘打满。前面我分享过一篇关于Driver/Executor日志控制的文章(在这里),这篇
2020-05-20 11:04:13 383
原创 SparkOptimizer 优化规则:OptimizeMetadataOnlyQuery
这两天在SparkSQL Core看到一个优化规则:OptimizeMetadataOnlyQuery,它的意思是如果一个sql只涉及表的分区字段元信息查询的话,执行过程将不会路由到TableScanExec的PhysicalPlan进行表扫描,而是通过分区元信息的字段和值构建LocalRelation,进而构造一个LocalTable,走LocalTableScanExec的PhysicalPlan。这个规则的触发要满足下面几个条件:sql中所有查询的字段必须是分区字段如果使用了聚合函数,必须满足
2020-05-20 11:01:55 416
原创 SparkSQL针对DataSource表的Cache优化
Spark内部针对DataSource表的查询做了缓存优化,使得在同一任务中多次访问同一张DataSource表场景下可以跳过重复的获取表meta数据过程,以提升表读取性能。缓存的内容是表名和其对应的LogicalRelation。缓存机制:SQL语法解析后进行Analyzer的过程,因为我们关注表的缓存机制,所以只看表分析中的一个关键Rule:ResolveRelations。Analyzer 对Parsed Logical Plan进行遍历,发现UnresolvedRelation后,就对它启动合规
2020-05-20 11:00:17 512
原创 Spark日志过大导致磁盘溢出问题解决方案
一 问题背景平台近期出现多次spark任务日志文件将磁盘打满,导致平台异常报警和任务失败的情况,这些任务包括Spark-Streaming任务和普通Spark任务。产生该问题的原因主要是:Spark-Streaming任务运行时间比较长,Executor和Driver进程产生的Spark系统日志数量很大;业务用户在应用代码中使用System.out.print等输出了大量的调试信息(曾有任务运行40分钟打满100G日志文件)。以上信息全部输出在Yarn Container日志路径下的stdout和std
2020-05-20 10:58:50 1495
原创 SparkOptimizer 优化:OptimizeIn(In to InSet)
最近在调试Spark-SQL的时候看了一个OptimizeIn优化规则,该规则做了两个事情:去除In中重复的Literal条件;如果In中Literal条件数目大于optimizerInSetConversionThreshold(默认值为10),做In到InSet的表达式转换。在做DataSource扩展filter pushdown的时候要注意处理这种优化。源码如下:实例:...
2020-05-18 12:02:41 366
原创 使用Spark-SQL进行ElasticSearch数据探查
目前针对SQL on ElasticSearch 已经有了比较好的解决方案:elasticsearch-sql,其实Spark-SQL也可以满足一些基本的ES数据探查的需求,实现起来也相对简单。elasticsearch-spark的包针对ES扩展了Spark Datasource,我们可以使用sql查询es中的数据,中间Spark充当了“SQL解析器”的角色。环境与数据准备:Spark-2.1.0环境;elasticsearch-spark-20_2.11-5.4.2.jar;Hive环境E
2020-05-18 12:01:12 709
原创 Spark JDBC DataSource 下推全部SQL逻辑
通过源码可以知道,目前Spark JDBC Datasource在拉取数据形成JDBCRDD时,只把查询字段列表,表名和Filter下推到了数据库一侧:如果我的sql还有聚合查询,那么聚合查询其实是在Spark端执行的。即先经过过滤把所需字段的所有数据抽取出来形成RDD,在RDD上再执行聚合操作。那能不能把全部SQL都下推到数据库侧呢?答案是可以的。看代码逻辑,只要将table变量构成一个子句即可,子句的逻辑就是我要查询的sql逻辑,比如select avg(scores), class from
2020-05-18 11:58:57 458
原创 Spark LogicalPlan 逆向生成SQL语句
在使用spark进行sql分析过程中,一般是将sql语句解析成LogicalPlan查看执行计划,LogicalPlan能够帮助我们了解Spark-SQL的解析,转换,优化,映射和执行的机制。最近在看Spark-SQL源码过程中,了解到一个逆向逻辑,即将LogicalPlan逆向生成SQL语句。代码实现在org.apache.spark.sql.catalyst.SQLBuilder中。如果手上有一个logicalPlan,通过创建SQLBuilder实例,调用toSQL方法就可以进行逆向转化。值
2020-05-18 11:55:19 681
原创 clickhouse连接Tableau
目录Windows版本tableau连接Linux 版本Tableau连接Windows版本tableau连接windows版本tableau是通过ODBC配置管理器加载clickhouse ODBC驱动连接。下载clickhouseODBC驱动并安装: clickhouse-odbc-1.1.7-win64.msi打开windows ODBC数据源(64位)点击添加选择Clickhouse ODBC Driver (Unicode)配置ODBC连接,注意name不能有空格打开t
2020-05-17 12:29:54 3874 3
原创 Spark通过ClickHouse-Native-JDBC写入Clickhouse
目前通过JDBC写Clickhouse有两种插件可以用官方的JDBC:8123端口基于HTTP实现的,整体性能不太出色,有可能出现超时的现象housepower的ClickHouse-Native-JDBC:9000端口基于TCP协议实现,支持高性能写入,数据按列组织并有压缩记录下使用ClickHouse-Native-JDBC的过程:Spark版本:2.1.0Clickhouse版本:20.2.1.2183,单点部署ClickHouse-Native-JDBC版本:2.1-stable
2020-05-15 15:17:11 3914
原创 jquery 导航条 显示和自动隐藏div
$(document).ready(function(){$(".div2").click(function(){ $(this).next("div").slideToggle("slow") .siblings(".div3:visible").slideUp("slow");});});ps: 1、slideToggle实现选中div的显示和隐藏;
2015-03-16 20:09:24 683
Oracle.PL.SQL程序设计_第五版_上册
2016-01-26
大容量Web应用性能测试与LoadRunner实战
2016-01-22
架构之美(清晰中文完整版)
2016-01-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人