partition

Parquet的那些事(二)Spark中的Schema兼容问题

 ̄綄美尐妖づ 提交于 2020-03-16 17:49:23
Parquet是一种存储格式,其本身与任何语言、平台都没有关系,也不需要与任何一种数据处理框架绑定。但是一个开源技术的发展,必然需要有合适的生态圈助力才行,Spark便是Parquet的核心助力之一。作为内存型并行计算引擎,Spark被广泛应用在流处理、离线处理等场景,其从1.0.0便开始支持Parquet,方便我们操作数据。 在Spark中操作Parquet文件有两种方式,一种是直接加载文件,另一种是透过Hive表来读取数据。我们姑且称之为文件加载、表加载。这两种方式在API层面都非常简洁,它隐藏了底层推导Schema、并行加载数据等细节。 # By File df = spark . read . parquet ( "s3://mydata/type=security" ) # By Table df = spark . read . table ( "data_mine.security_log" ) 在实际使用中,我们经常会遇到 Schema兼容 的问题,其根源是Schema不一致,主要有以下两种情况: 存放在HDFS/S3上面的Parquet文件具有不同的Schema Hive Metastore Schema与Parquet文件自带的Schema不一致 不管是需求变化、产品迭代还是其他原因,总是会出现Schema变化的情况,导致不同Parquet文件的Schema不同

HIVE-分区表详解以及实例

懵懂的女人 提交于 2020-03-13 12:46:13
HIVE中的分区表是什么,我们先看操作,然后再来体会。 创建一个分区表,分区的单位时dt和国家名 hive> create table logs(ts bigint,line string) > partitioned by (dt String,country string); 接下来我们创建要给分区 hive> load data local inpath '/root/hive/partitions/file1' into table logs > partition (dt='2001-01-01',country='GB'); 上面语句的效果是在hdfs系统上建立了一个层级目录   -logs     -dt=2001-01-01     -country=GB 我们继续执行下面语句,先看一下什么效果 hive> load data local inpath '/root/hive/partitions/file2' into table logs > partition (dt='2001-01-01',country='GB'); Loading data to table default.logs partition (dt=2001-01-01, country=GB) OK Time taken: 1.379 seconds hive> load data

分布式消息队列

时光总嘲笑我的痴心妄想 提交于 2020-03-13 03:30:56
分布式消息队列 kafka介绍 基本架构 Kafka是开源的分布式消息队列,能够轻松实现高吞吐、可扩展、高可用,并且部署简单快速、开发接口丰富。 kafka分布式消息队列的作用: 解耦:将消息生产阶段和处理阶段拆分开,两个阶段互相独立各自实现自己的处理逻辑,通过kafka提供的消息写入和消费接口实现对消息的连接处理。降低开发复杂度,提高系统稳定性。 高吞吐量:kafka通过顺序读写磁盘提供可以和内存随机读写相匹敌的读写速度,灵活的客户端API设计,利用Linux操作系统提供的“零拷贝”特性减少消息网络传输时间,提供端到端的消息压缩传输,对同一主题下的消息采用分区存储,kafka通过诸多良好的特性利用廉价的机器就可以轻松实现高吞吐率。 高容错、高可用:kafka允许用户对分区配置多副本,kafka将副本均匀分配到各个broker存储,保证同一个分区的副本不会再同一台机器上存储(集群模式下),多副本之间采用Leader-Follower机制同步消息,只有Leader对外提供读写服务,当Leader以外失败、Broker进程关闭、服务宕机等情况导致数据不可用时,kafka会从Follwer中选择一个Leader继续提供读写服务。 可扩展:理论上kafka的性能随着Broker的增多而增加,增加一个Broker只需要为新增加的Broker设置一个唯一编号,编写好配置文件后

SQL Server:PARTITION BY和GROUP BY之间的区别

谁都会走 提交于 2020-03-11 21:47:10
多年来,我一直在使用 GROUP BY 来处理所有类型的聚合查询。 最近,我一直在反向设计一些使用 PARTITION BY 来执行聚合的代码。 在阅读我可以找到的关于 PARTITION BY 所有文档时,它听起来很像 GROUP BY ,可能还添加了一些额外的功能? 它们是相同通用功能的两个版本,还是它们完全不同? #1楼 据我所知,Partition By几乎与Group By相同,但有以下不同之处: 该组实际上对结果集进行分组,每组返回一行,这导致SQL Server只允许在SELECT列表中允许聚合函数或属于group by子句的列(在这种情况下,SQL Server可以保证有唯一的每组的结果)。 考虑例如MySQL允许在SELECT列表中具有未在Group By子句中定义的列,在这种情况下,每个组仍然返回一行,但是如果列没有唯一结果,则无法保证什么是输出! 但是使用Partition By,虽然函数的结果与Group By的聚合函数的结果相同,但仍然得到正常的结果集,这意味着每个底层行获得一行,而不是每行一行group,因此,SELECT列表中的每个组都可以包含不唯一的列。 因此,作为摘要,当需要每组输出一行时,分组依据是最佳的,当需要所有行但仍希望基于组的聚合函数时,分区依据是最佳的。 当然也可能存在性能问题,请参阅 http://social.msdn

oracle的分析函数‘over’

亡梦爱人 提交于 2020-03-11 18:35:03
分析函数语法: 例 : sum(sal) over (partition by deptno order by ename) new_alias sum 就是函数名 (sal) 是分析函数的参数 , 每 个函数有 0~3 个参数 , 参数可以是表达式 , 例如 :sum(sal+comm) over 是一个 关键 字 , 用于 标识 分析函数 , 否 则查询 分析器 不能区 别 sum() 聚集函数和 sum() 分析函数 分析函数用于 计 算基于 组 的某 种 聚合 值 ,它和聚合函数的不同之 处 是: 对 于 每 个 组 返回多行,而聚合函数 对 于 每 个 组 只返回一行。 常用的分析函数如下所列 : row_number() over ( partition by ... order by ...) rank() over ( partition by ... order by ...) dense_rank() over ( partition by ... order by ...) count() over ( partition by ... order by ...) max() over ( partition by ... order by ...) min() over ( partition by ... order by ...) sum() over

MySQL优化(5):分区

时间秒杀一切 提交于 2020-03-11 16:37:12
分区: 分区也是MySQL优化中的一个重要方式 将一个表中的数据和索引,分散到不同的文件中进行存储 通常情况下,一个表,对应一组数据和索引文件,一个表的数据和索引集中存储在这组文件中 当一个表出现了大量的记录时,可以将其分布到不同的数据和索引文件中进行存储 Innodb来说,一个表对应多个ibd文件 MyISAM来说,一个表对应多个myi,myd文件 分布之后,每个文件中包含的记录数量显著减少,保证单独文件的执行效率 最常用的分区语法是:使用ID,将数据分布到多个分区中 在设计表的时候使用partition选项完成分区,需要提供分区算法和算法参数,完成分区操作 create table [table-name]( id int unsigned auto_increment primary key, subject varchar(255), content text )charset utf8 engine innodb partition by hash(id) partitions 10 ; 正常的建表语句,最后一行表示利用ID字段,使用HASH算法,将数据分布到十个分区内 建表成功之后,可以发现数据库中虽然只是一张表,但是文件夹中会有十个ibd文件,一个frm文件(结构文件)和一个par文件(分区结构文件) 分区成功后:客户端和以前没有任何区别

SQL窗口函数(Window Function)

巧了我就是萌 提交于 2020-03-10 17:23:02
窗口可以理解为记录集合,窗口函数就是在满足某种条件的记录集合上执行的特殊函数。窗口函数也称为OLAP函数,OLAP即实时分析处理(Online Analytical Processing)。 语法: <窗口函数> OVER ([PARTITION BY <分组列>] ORDER BY <排序列>) (注:通过PARTITION BY分组后的记录集合称为窗口,如果不使用PARTITION BY,那么整个数据集将作为一个大的窗口。) (注:窗口函数只能在SELECT子句中使用。) (注:此处的ORDER BY只用来决定窗口函数按照什么样的顺序进行计算,对结果的排序顺序没有影响。) 可以使用的窗口函数有: 1,能够作为窗口函数的聚合函数:SUM,AVG,COUNT,MAX,MIN 2,专用窗口函数:RANK,DENSE_RANK,ROW_NUMBER,等等 其中: RANK() :计算排序(如果存在相同位次的记录,则会跳过之后的位次,比如:1,2,2,4) DENSE_RANK() :计算排序(即使存在相同位次的记录,也不会跳过之后的位次,比如:1,2,2,3) ROW_NUMBER() :赋予连续且唯一的位次,比如:1,2,3,4 此外,除了partition子句和order by子句,还可以加上frame子句。frame是当前分区的一个子集,frame子句用来定义子集的规则

kafka深入理解

可紊 提交于 2020-03-10 15:30:37
kafka深入 1 分片与副本机制 分片机制:主要解决了 单台服务器存储容量有限 的问题 当数据量非常大的时候,一个服务器存放不了,就将数据分成两个或者多个部分,存放在多台服务器上。每个服务器上的数据,叫做一个分片 副本 :副本备份机制解决了 数据存储的高可用 问题 当数据只保存一份的时候,有丢失的风险。为了更好的容错和容灾,将数据拷贝几份,保存到不同的机器上。 kafka中对于分片的数量可以是任意的,建议不要超过节点数,但对于副本的数量,最多等于节点数 2 kafka保证数据不丢失机制 2.1 producer到kafka过程 解决方案:当producer发送数据到kafka后,kafka应该给予一个响应信息, ACK校验机制 ack校验机制的三种状态码: a) 0:生产者只负责发送数据,不关心kafka是否接受的到 b) 1:某个partition的leader收到数据给出响应 c) -1:某个partition的所有副本都收到数据后给出响应 在生产环境下设置状态码的时候, 根据数据的效率和重要性判断设置标准 数据在发送的过程中主要有二种模式: 同步模式 和 异步模式 同步模式: 发送一条数据, 等待响应, 响应成功后, 发送下一条数据即可 在同步模式下, 如果broker一直不给于响应, 设置超时(10s), 超时后, 进行重试(3)即可,最终会报错 异步模式: 引入缓冲池,

创建swap

会有一股神秘感。 提交于 2020-03-09 22:23:39
增加一个swap分区或文件 增加分区的方式 fdisk /dev/sdb t 82 增加文件的方式 dd if=/dev/zero of=/swapfile bs=1M count=2048 ----增加一个2G的文件 /swapfile 创建分区 mkswap /dev/sdb1 | /swapfile vim /etc/fstab 磁盘增加分区的方式使用 UUID=XXXX swap swap pri=10(这是优先级 数字大 优先级高),defaults(可以用默认) 0(0不备份备份) 0(开机检查) 使用文件的方式 使用文件名 /swapfile swap swap pri=10(这是优先级 数字大 优先级高),defaults(可以用默认) 0(0不备份备份) 0(开机检查) swapon -a 挂载命令 swapon -s 查看命令 swapoff /swapfile 关闭 [root@bogon ~]$swapon -s Filename Type Size Used Priority /swapfile file 2097148 0 110 /dev/sdb1 partition 4194300 0 10 /dev/sda5 partition 2097148 0 -2 [root@bogon ~]$vim /etc/fstab [root@bogon ~]

Linux之磁盘管理

天涯浪子 提交于 2020-03-09 19:39:40
一、Raid卡之初识 又叫磁盘冗余阵列,阵列卡。他的主要作用有三点 1、获取更高的容量 2、获取更高的性能 3、获取更强的安全性 raid卡按 支持的raid级别不同 和raid卡的 缓存容量 不同,分为基础raid卡和高级raid卡 左边是raid基础卡,右边是高级卡。 基础卡只支持raid0和raid1 高级卡支持0、1、3、5、10、11或者更多 常见的raid级别 raid0 主要是为了应对不做raid用不了的情况。 硬盘不做raid,识别不了硬盘。所以如果只有一块硬盘,就做个raid0吧。 安全性最低,其中一个硬盘坏掉了,所有数据都会报废。 用于安全性需求低的数据,不怕丢失的数据。优点就是读写快 raid1 只能有两块硬盘 算是个鸡肋,因为只能同时给两个硬盘做raid1。 raid5 最少需要3块硬盘,在写入之前有一个校验的过程。有一块硬盘用来做校验,用来保护数据的安全性,当其中一块硬盘坏了,就可以使用校验数据恢复丢失的数据。 可以在添加一块热位盘(RAID5 + spare),当坏了一块硬盘之后,可以启动热位盘来替换坏的硬盘。 三个有点都占一点,在并发量不高的时候,可以使用 raid10 读取速度和安全性都很高,但是很奢侈,并发量很大的时候可以使用 raid10的基本原理如下: 二、磁盘分区 磁盘分区表 所在位置:0磁头0磁道1扇区的秘密