- 博客(133)
- 资源 (38)
- 收藏
- 关注
原创 Spark Streaming平滑停止
对于长期运行在Yarn上的Spark Streaming作业,尤其是要保证不丢不重语义的作业,不能简单使用yarn application -kill <Application ID>命令来停止,应当使用平滑停止策略。思路: 在Driver端,启动一个检测线程,周期性检测HDFS上的标记文件是否存在,存在则平滑停止,不存在则继续运行。伪代码如下: val ssc = new Str...
2019-06-02 15:32:26
1126
原创 Spark Streaming动态资源分配
同反压机制一样,Spark Streaming动态资源分配(即DRA,Dynamic Resource Allocation)也可以用来应对流处理中批次流量过载的场景。Spark Streaming动态资源分配,允许为应用动态分配资源。当任务积压时,申请更多资源;当任务空闲时,使用最少资源。在生产中,可将动态资源分配和背压机制一起使用,通过背压机制来细粒度确保系统稳定;通过动态资源分配机制来粗...
2019-06-01 22:39:01
2975
1
原创 Spark Streaming反压机制
反压(Back Pressure)机制主要用来解决流处理系统中,处理速度比摄入速度慢的情况。是控制突增流量中每个批次流量过载的有效手段。反压机制原理Spark Streaming中的反压机制是Spark 1.5.0推出的新特性,可以根据处理效率动态调整摄入速率。当批处理时间(Batch Processing Time)大于批次间隔(Batch Interval,即 BatchDuration...
2019-06-01 12:11:53
1856
1
原创 Spark Streaming空DStream判断
在Spark Streaming中对空DStream的判断,最终都是对空RDD的判断。一般有三种方法:计数(RDD.count),分区(RDD.partitions.length),计数+分区(RDD.isEmpty)。RDD.count适用于所有类型的DStream,但由于是Action算子,会触发SparkContext.runJob方法,从而导致Job的提交和运行,当数据量较大时,代价也...
2019-05-14 08:07:44
2006
原创 Spark Streaming状态操作: updateStateByKey、mapWithState、基于window的状态操作
在Spark Streaming中,DStream的转换分为有状态和无状态两种。无状态的操作,即当前批次的处理不依赖于先前批次的数据,如map()、flatMap()、filter()、reduceByKey()、groupByKey()等等;而有状态的操作,即当前批次的处理需要依赖先前批次的数据,这样的话,就需要跨批次维护状态。updateStateByKey //状态更新函数 val ...
2019-05-14 06:59:09
2544
原创 Spark Streaming读取Kafka数据的两种方式
Kafka在0.8和0.10之间引入了一种新的消费者API,因此,Spark Streaming与Kafka集成,有两种包可以选择: spark-streaming-kafka-0-8与spark-streaming-kafka-0-10。在使用时应注意以下几点:spark-streaming-kafka-0-8兼容Kafka 0.8.2.1及以后的版本, 从Spark 2.3.0开始,对K...
2019-04-20 16:49:40
6022
1
原创 Spark Streaming保证Exactly-Once语义
在流计算引擎如Apache Storm、Apache Kafka(Kafka Streams)、Apache Spark(Spark Streaming、Spark Structured Streaming)、Apache Flink中,经常提到Exactly-Once语义,那Exactly-Once究竟是啥意思?当流计算引擎声称Exactly-Once时,究竟意味着啥?Spark Streami...
2019-04-13 09:03:01
4591
3
原创 Spark Streaming中的batchDuration、windowDuration、slideDuration
Spark Streaming是一种面向微批(micro-batch)处理的流计算引擎。将来自Kafka/Flume/MQ等的数据,Duration含义batchDuration: 批次时间。多久一个批次。windowDuration: 窗口时间。要统计多长时间内的数据。必须是batchDuration整数倍。slideDuration: 滑动时间。窗口多久滑动一次。必须是batchDu...
2019-04-06 23:43:56
1849
原创 Spark 推测执行
Spark 推测执行是一种优化技术。在Spark中,可以通过推测执行,即Speculative Execution,来识别并在其他节点的Executor上重启某些运行缓慢的Task,并行处理同样的数据,谁先完成就用谁的结果,并将另一个未完成的Task Kill掉,从而加快Task处理速度。适用于某些Spark任务中部分Task被hang住或运行缓慢,从而拖慢了整个任务运行速度的场景。注意:...
2019-03-31 13:04:37
5788
1
原创 Spark RDD、DataFrame、Dataset 比较以及相互转换
Spark 支持三种API:RDD、DataFrame 和 Dataset。这里,总结这三种API的差异以及相互之间的转换。RDD、DataFrame、Dataset比较 RDDDataFrameDatasetSpark 1.x✅(从0.6.0开始)✅(从1.3.0开始)✅(从1.6.0开始是试验性的)Spark 2.x✅✅✅Immu...
2019-03-23 01:07:34
3833
原创 Impala中使用Hive UDF
在Impala中,可以使用两种UDF:基于Java的UDF:即用Java编写的Hive UDF。基于C++的UDF: 用C++编写的UDF。这里总结在Impala中使用Hive UDF。Hive 1.2中没有md5函数,Impala中默认也没有类似函数,则可通过自定义UDF来实现。注:从Hive 1.3.0开始,已经内置了md5函数。Hive UDF编写继承Hive UD...
2019-03-16 22:56:25
2960
原创 Impala中的Invalidate Metadata和Refresh
Impala中有两种同步元数据的方式:INVALIDATE METADATA和REFRESH。使用Impala执行的DDL操作,不需要使用任何INVALIDATE METADATA / REFRESH命令。CatalogServer会将这种DDL元数据变化通过StateStore增量同步到集群中的所有Impalad节点。在Impala之外,使用Hive或其他Hive客户端(如Spark SQL...
2019-03-15 08:57:40
2788
原创 Impala Shell常用命令行选项与常用命令
常用命令行选项-h或–help显示帮助信息。[root@node2 ~]# impala-shell -h-i或–impalad连接到指定的impalad节点。[root@node2 ~]# impala-shell -i node3-q或–query指定要执行的Sql语句。[root@node2 ~]# impala-shell -q "select studentid,s...
2019-03-15 07:32:51
6153
2
原创 Apollo配置中心多环境HA简单部署
背景随着项目的功能越来越复杂,各种各样的配置也越来越多,渐渐的开始面临以下问题:各种配置到处都是,没有集中管理。配置的存放方式也多种多样,如程序内部hard code、配置文件中、数据库中等等。同一种配置,各处不统一。配置修改后不能实时生效。配置的修改没有完善的审核机制,想改就改等,出问题很难追溯。基于此,就需要有一个完善的配置中心。Apollo便应用而生。...
2019-03-03 01:20:00
3063
1
原创 Apache Ranger基于Apache Atlas标签的策略
Ranger-Atlas集成将Atlas的数据分类(Tag)与Ranger中的安全策略相结合,可以实现基于分类的、跨组件的权限控制,而无需在每个组件中创建单独的服务和策略。Ranger配置Tagsync配置Ranger Tagsync从Atlas中同步Tag。可通过Ambari WebUI=>Ranger配置,如图:Atlas添加Tag创建如下Tag给Tag PII添加如...
2019-03-01 07:56:05
5513
7
原创 Apache Ranger对Hive数据脱敏-行过滤Row Filter、列屏蔽Column Masking
概述Apache Ranger对Hive数据支持两种脱敏方式:行过滤Row Filter、列屏蔽Column Masking。它可对Select结果进行行列级别数据脱敏,从而达到对用户屏蔽敏感信息的目的。注意:该功能只适用于HiveServer2使用场景(如Beeline/JDBC/Hue等途径执行的Select),对Hive Cli(如Hive -e)和直接读取Hive表的HDFS文件场景不...
2019-02-26 07:20:54
5921
原创 Apache Ranger对HDFS、HBase、Hive、Yarn授权
概述与安装1. 简介Apache Ranger是集中式的权限管理框架,可以对HDFS、HBase、Hive、Yarn等组件提供细粒度的权限访问控制,并且提供WebUI和RestAPI方便进行操作。2. 功能A、集中认证(Authentication)、授权(Authorization)、审计(Audit)、加密(Encryption)、安全(Security)于一体,标准化各种Hadoop...
2019-02-24 22:12:55
5369
3
原创 Apache Atlas类型系统与Rest API
概述类型系统Type System是Atlas最核心的组件之一,用户可以通过类型系统对数据资产进行分类、定义,然后用Ingest/Export组件添加元数据或输出元数据变化。对外,其他系统可以通过REST API或Kafka Message与Atlas进行集成。这里,总结Atlas 类型系统与Rest API。Atlas 类型系统TypeType(类型)在Atlas中代表了一类数据,如h...
2019-02-23 14:21:08
6977
6
原创 Apache Atlas管理Hive元数据
部署好Atlas服务后,重点是对Atlas的使用,这里对Atlas管理Hive元数据做简单总结。Hive元数据导入全量导入/usr/hdp/2.6.4.0-91/atlas/hook-bin/import-hive.sh通过WebUI可以搜索到如下Hive数据库:通过WebUI可以搜索到如下Hive表:注意:dim_channel(维度表-渠道维),dim_date(维度表-日期...
2019-02-17 20:41:49
10271
28
原创 Apache Atlas HA部署
概述Apache Atlas是开源的元数据治理框架,可以为Hive、HBase、Kafka等提供元数据管理功能,如:数据分类查看和更新Lineage元数据搜索与Apache Ranger集成控制权限注意:为便于安装配置,以及后续的管理维护,建议用HDP Ambari等工具来部署Atlas。这里用HDP-2.6.4 Ambari部署Atlas 0.8.0元数据治理服务。架构注意...
2019-02-16 23:16:49
2220
原创 Spark Streaming Join
多数据源Join思路多数据源Join大致有以下三种思路:数据源端Join,如Android/IOS客户端在上报用户行为数据时就获取并带上用户基础信息。计算引擎上Join,如用Spark Streaming、Flink做Join。结果端Join,如用HBase/ES做Join,Join键做Rowkey/_id,各字段分别写入列簇、列或field。三种思路各有优劣,使用时注意...
2018-11-10 07:26:07
5125
5
原创 在 Spark DataFrame 中使用Time Window
从Spark 2.0.0开始,Spark Sql包内置和Spark Streaming类似的Time Window,方便我们通过时间来理解数据。Spark Sql包中的Window APITumbling Windowwindow(timeColumn: Column, windowDuration: String): ColumnSlide Windowwindow(timeColu...
2018-11-08 08:37:46
3038
1
原创 Spark SQL 与 Spark DataFrame 自定义UDF、UDAF
UDF、UDAF、UDTFUDF:用户自定义函数(User Defined Function)。一行输入一行输出。UDAF: 用户自定义聚合函数(User Defined Aggregate Function)。多行输入一行输出。UDTF: 用户自定义表函数(User Defined Table Generating Function)。一行输入多行输出。如hive/spark中的expl...
2018-11-08 07:15:50
3834
原创 Spark RDD 按Key保存到不同文件
基本需求将Keyed RDD[(Key,Value)]按Key保存到不同文件。测试数据数据格式:id,studentId,language,math,english,classId,departmentId1,111,68,69,90,Class1,Economy2,112,73,80,96,Class1,Economy3,113,90,74,75,Class1,Economy4...
2018-11-02 08:01:41
4817
4
原创 Spark DataFrame 多行转多列
在Spark DataFrame中可以用Pivot函数将多行转成多列。样本数据每个用户对每部电影的评分。数据格式:userID 用户ID,movieID 电影ID,rating评分15,399,215,1401,515,1608,415,20,418,100,318,1401,318,399,1Spark DataFrame 多行转多列package com.bigDa...
2018-10-24 07:13:15
5655
原创 Spark 共享变量:广播变量、累加器
通常,如下操作rdd.transformation(func),func所需要的外部变量都会以副本的形式从Driver端被发送到每个Executor的每个Task,当Task数目有成百上千个时,这种方式就非常低效;同时每个Task中变量的更新是在本地,也不会被传回Driver端。为此,Spark提供了两种类型的共享变量:广播变量、累加器。广播变量广播变量,Execoutor中的只读变量。在Dr...
2018-10-24 06:44:53
1284
原创 Elasticsearch MGet与Bulk
MGet(Multi Get)与Bulk 都是ES里的批量操作。可降低多次请求的网络开销,提升性能。MGet:一次请求查询多个文档。Bulk:一次请求执行多次index、create、update、delete操作。MGet注意:mget API 需要一个docs数组。数组的每一项包含_index、_type、_id。同一Index下,_index可以省略;同一Inde...
2018-09-02 22:14:11
1191
原创 Elasticsearch 自定义多个分析器
分析器(Analyzer)Elasticsearch 无论是内置分析器还是自定义分析器,都由三部分组成:字符过滤器(Character Filters)、分词器(Tokenizer)、词元过滤器(Token Filters)。分析器Analyzer工作流程:Input Text => Character Filters(如果有多个,按顺序应用) => Tokenizer =...
2018-09-02 15:35:08
4197
原创 Elasticsearch 聚合
总结Elasticsearch三种聚合 Metrics Aggregations、Bucket Aggregations、Pipeline Aggregations中的常用聚合。Metrics Aggregations 度量聚合如Count、Sum、Min、Max、Avg、Count(Distinct)就是度量。Bucket Aggregations 分桶聚合如 Group...
2018-09-01 17:21:04
2148
原创 Elasticsearch 搜索
搜索有两种方式:URL参数搜索、URL请求体搜索。在URL请求体搜索中可以使用Query DSL (Domain Specific Language)。测试数据下载测试数据wget -O accounts.json https://github.com/elastic/elasticsearch/blob/master/docs/src/test/resources/acc...
2018-09-01 16:34:35
305
原创 Elasticsearch 索引、映射、文档
索引索引(index)就像是传统关系数据库中的数据库。创建索引创建索引时可以通过设置number_of_shards和number_of_replicas来指定主分片和每个主分片对应副本分片的数量。注意:主分片数一旦设置,后期不能修改。PUT user_info{ "settings": { "number_of_shards": 3, "numb...
2018-09-01 16:17:45
2197
原创 Elasticsearch Cat 命令
总结Elasticsearch Cat 命令。Cat 命令公共参数Help 查看帮助GET _cat/master?helpid | | node id host | h | host name ip | | ip address node | n | node name Verbose 显示列名GET _cat/mas...
2018-09-01 16:09:57
14383
3
原创 Elasticsearch核心概念
Elasticsearch是一个基于Lucene开发的、高性能、可扩展、开源的全文检索和分析引擎。本文基于Elasticsearch 6.2总结。集群(cluster)集群由一个或多个节点组成。一个集群有一个默认名称”Elasticsearch”。注意:不同集群,集群名称应唯一。节点(node)节点是集群的一部分。ES 6.x中,有多种类型的节点:Master...
2018-09-01 14:59:52
793
原创 数据收集之Fluentd
Fluentd是一个完全免费且开源的日志收集系统,性能敏感的部分用C语言编写,插件部分用Ruby编写,500多种插件,只需很少的系统资源即可轻松实现”Log Everything”。一般叫Fluentd为td-agent。Fluentd与td-agent关系:td-agent是Fluentd的稳定发行包。Fluentd与Flume关系:是两个类似工具,都可用于数据采集。Fluentd的In...
2018-08-19 20:31:05
11770
1
原创 数据收集之Filebeat
Filebeat采用Go语言开发,也可用于日志收集,相较于的Logstash,更轻量,资源占用更少。一般部署在日志收集的最前端。本文基于Filebeat 6.3.2总结。设计要点主要组件Filebeat主要由两大组件组成:Harvester、Input。Output实际上是Beats公共库libbeat一部分。Harvester每个文件启动一个Harvester,即...
2018-08-19 17:38:35
4768
原创 数据收集之Flume
Flume最初由Cloudera开发,于2011年6月贡献给Apache,于2012成为顶级项目。在孵化这一年,基于老版本的Flume(Flume OG:Flume Original Generation 即Flume 0.9.x版本)进行重构,摒弃了Zookeeper和Master,升级为现在的轻量级的Flume(Flume NG:Flume Next Generation,即Flume 1.x...
2018-08-19 17:28:11
1125
原创 数据收集之Logstash
LogstashLogstash由Java+Ruby语言编写,是一个开源的日志收集、处理、转发工具。Logstash主要由三大组件组成:Input 输入、Filter过滤、Output 输出。输入产生事件,过滤器修改事件,输出将事件发送到其他地方。 注:经常看到的编解码器codec也是过滤器,可以作为输入或输出的一部分。简单部署#下载解压[wangpei@l...
2018-08-12 22:50:55
2586
原创 数据收集之DataX
DataXDataX是阿里开源的离线数据同步工具,可以实现包括 MySQL、Oracle、MongoDB、Hive、HDFS、HBase、Elasticsearch等各种异构数据源之间的高效同步。DataX原理设计理念 为了解决异构数据源同步问题,DataX将复杂的网状同步链路变成星型链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,...
2018-08-11 17:29:59
4476
原创 数据收集之binlog同步----Maxwell
简介Maxwell是由Java语言编写,Zendesk开源的binlog解析同步工具。可通过简单配置,将binlog解析并以json的格式同步到如file,kafka,redis,RabbitMQ等系统中。也可自定义输出。相比Canal,Maxwell相当于Canal Server+Canal Client。安装配置MySQLMySQL 开启Binlog#开启...
2018-08-10 07:35:24
5579
1
原创 数据收集之binlog同步---Canal
Canal是阿里开源的binlog同步工具。可以解析binlog,并将解析后的数据同步到任何目标存储中。Canal工作原理 1、mysql master节点将改变记录保存到二进制binlog文件中。 2、canal 把自己伪装成mysql slave节点,向master节点发送dump binlog请求。master节点收到请求并找到对应binlog文件及bin...
2018-08-10 07:33:56
11100
Java数据结构和算法PDF带目录
2017-04-01
中文文本分类语料(复旦)-训练集
2017-03-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅