parquet

字节跳动基于Flink的MQ-Hive实时数据集成

混江龙づ霸主 提交于 2020-08-14 13:43:51
背景 在数据中台建设过程中,一个典型的数据集成场景是将 MQ (Message Queue,例如 Kafka、RocketMQ 等)的数据导入到 Hive 中,以供下游数仓建设以及指标统计。由于 MQ-Hive 是数仓建设第一层,因此对数据的准确性以及实时性要求比较高。 本文主要围绕 MQ-Hive 场景,针对目前字节跳动内已有解决方案的痛点,提出基于 Flink 的实时解决方案,并介绍新方案在字节跳动内部的使用现状。 已有方案及痛点 字节跳动内已有解决方案如下图所示,主要分了两个步骤: 通过 Dump 服务将 MQ 的数据写入到 HDFS 文件 再通过 Batch ETL 将 HDFS 数据导入到 Hive 中,并添加 Hive 分区 痛点 任务链较长,原始数据需要经过多次转换最终才能进入 Hive 实时性比较差,Dump Service、Batch ETL 延迟都会导致最终数据产出延迟 存储、计算开销大,MQ 数据重复存储和计算 基于原生 Java 打造,数据流量持续增长后,存在单点故障和机器负载不均衡等问题 运维成本较高,架构上无法复用公司内 Hadoop/Flink/Yarn 等现有基础设施 不支持异地容灾 基于 Flink 实时解决方案 优势 针对目前公司传统解决方案的痛点,我们提出基于 Flink 的实时解决方案,将 MQ 的数据实时写入到 Hive,并支持事件时间以及

大数据实践解析(下):Spark的读写流程分析

旧巷老猫 提交于 2020-08-14 01:57:30
导读: 众所周知,在大数据/数据库领域,数据的存储格式直接影响着系统的读写性能。spark是一种基于内存的快速、通用、可扩展的大数据计算引擎,适用于新时代的数据处理场景。在“ 大数据实践解析(上):聊一聊spark的文件组织方式 ”中,我们分析了spark的多种文件存储格式,以及分区和分桶的设计。接下来,本文通过简单的例子来分析在Spark中的读写流程,主要聚焦于Spark中的高效并行读写以及在写过程中如何保证事务性。 1、文件读 如何在Spark中做到高效的查询处理呢?这里主要有两个优化手段: 1)减少不必要的数据处理。数据处理涉及文件的IO以及计算,它们分别需要耗费大量的IO带宽和CPU计算。在实际的生产环境中,这两类资源都是有限的,同时这些操作十分耗时,很容易成为瓶颈,所以减少不必要的数据处理能有效提高查询的效率; 以下面的查询为例: spark.read.parquet("/data/events") .where("year = 2019") .where("city = 'Amsterdam'") .select("timestamp") 由于在events表中按照year字段做了分区,那么首先通过 year 字段我们就可以过滤掉所有year字段不为 2019 的分区: 因为文件是parquet的文件格式,通过谓词下推可以帮助我们过滤掉 city 字段不是

Hive的压缩存储和简单优化

戏子无情 提交于 2020-08-13 06:42:34
一、Hive的压缩和存储 1,MapReduce支持的压缩编码 压缩格式 工具 算法 文件扩展名 是否可切分 对应的编码/解码器 DEFLATE 无 DEFLATE .deflate 否 org.apache.hadoop.io.compress.DefaultCodec Gzip gzip DEFLATE .gz 否 org.apache.hadoop.io.compress.GzipCodec bzip2 bzip2 bzip2 .bz2 是 org.apache.hadoop.io.compress.BZip2Codec LZO lzop LZO .lzo 是 com.hadoop.compression.lzo.LzopCodec Snappy 无 Snappy .snappy 否 org.apache.hadoop.io.compress.SnappyCodec 2,文件压缩格式:   TEXTFILE和SEQUENCEFILE的存储格式都是基于 行式存储 的;   ORC和PARQUET是基于 列式存储 的。 a> TextFile格式:    默认格式,数据不做压缩,磁盘开销大,数据解析开销大。可结合Gzip、Bzip2使用,但使用Gzip这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。 b> Orc格式:    Hive 0

python多种读写excel等数据文件的方式(收藏篇)

无人久伴 提交于 2020-08-11 23:44:40
前言: python处理数据文件的途径有很多种,可以操作的文件类型主要包括文本文件(csv、txt、json等)、excel文件、数据库文件、api等其他数据文件。下面小编整理下python到底有哪些方式可以读写数据文件。 1. read、readline、readlines read() :一次性读取整个文件内容。推荐使用read(size)方法,size越大运行时间越长 readline() :每次读取一行内容。内存不够时使用,一般不太用 readlines() :一次性读取整个文件内容,并按行返回到list,方便我们遍历 2. 内置模块csv python内置了csv模块用于读写csv文件,csv是一种逗号分隔符文件,是数据科学中最常见的数据存储格式之一。csv模块能轻松完成各种体量数据的读写操作,当然大数据量需要代码层面的优化。 csv模块读取文件: # 读取csv文件 import csv with open('test.csv','r') as myFile: lines=csv.reader(myFile) for line in lines: print (line) csv模块写入文件: import csv with open('test.csv','w+') as myFile: myWriter=csv.writer(myFile) #

AnalyticDB实现和特点浅析

泄露秘密 提交于 2020-08-10 22:09:14
目录 AnalyticDB介绍与背景 AnalyticDB详细解析 架构设计 数据分区 读写分离和读写流程 其他特性介绍 混合(列-行)存储引擎 索引 小结 本篇主要是根据AnalyticDB的论文,来讨论AnalyticDB出现的背景,各个模块的设计,一些特性的解析。可能还会在一些点上还会穿插一些与当前业界开源实现的比对,希望能够有一个更加深入的探讨。OK,那我们开始吧。 AnalyticDB介绍与背景 要说AnalyticDB,那起码得知道它是干什么的。这里直接贴下百度百科的介绍: AnalyticDB是阿里云自主研发的一款实时分析数据库,可以毫秒级针对千亿级数据进行即时的多维分析透视。 简单地说,就是实时OLAP型数据库,它的对标产品是Apache Kylin,Apache Druid,Clickhouse这些。然后AnalyticDB的特点, 包括高并发实时摄入数据,兼容Mysql协议,无需预计算即可有的极快响应时间,多种数据源接入,大规模集群管理等 。好吧,这几个特点都很官方,不急,接下来会逐渐讨论各个点。 然后介绍下AnalyticDB的背景。 首先先说说传统的OLAP型数据仓库,以往构建OLAP型数据仓库通常都是采用离线模式, 即在晚上设置定时任务将前一天的数据同步到数据仓库中,第二天数据分析师或报表工具就可以根据数据产出分析结果 。但这样的问题是数据延迟太高了

sparksql开发入门

孤街醉人 提交于 2020-08-08 19:17:36
一、sparksql基本操作 1.构建sparkSession import org.apache.spark.sql.SparkSession val spark: SparkSession = SparkSession .builder .enableHiveSupport() .config(initConf()) .getOrCreate 2.停止sparkSession spark.stop 3.读取parquet文件 val df1 = spark.read.parquet("hdfs://localhost:8020/tmp/testdata.parquet") 4.输出parquet文件 import org.apache.spark.sql. SaveMode df1.write.mode(SaveMode.Overwrite).parquet("hdfs://localhost:8020/tmp/testdata_out.parquet") 5.查看数据 //查看100行,列宽无限制 df1.show(100,false) 二、SQL操作数据 1.读取parquet文件,并注册临时view val df1 = spark.read.parquet("hdfs://localhost:8020/tmp/testdata.parquet") df1

Over-high memory usage during reading parquet in Python

与世无争的帅哥 提交于 2020-08-08 04:54:10
问题 I have a parquet file at around 10+GB, with columns are mainly strings. When loading it into the memory, the memory usage can peak to 110G, while after it's finished the memory usage is reduced back to around 40G. I'm working on a high-performance computer with allocated memory so I do have access to large memory. However, it seems a waste to me that I have to apply for a 128G memory just for loading data, after that 64G is sufficient for me. Also, 128G memory is more often to be out of order

Enable _metadata files in Spark 2.1.0

為{幸葍}努か 提交于 2020-08-07 08:17:09
问题 It seems that saving empty Parquet files is broken in Spark 2.1.0 as it is not possible to read them in again (due to faulty schema inference) I found that since Spark 2.0 writing the _metadata file is disabled by default when writing parquet files. But I cannot find the configuration setting to put this back on. I tried the following: spark_session = SparkSession.builder \ .master(url) \ .appName(name) \ .config('spark.hadoop.parquet.enable.summary-metadata', 'true') \ .getOrCreate() and

哪些数据库是行存储?哪些是列存储?有什么区别?

£可爱£侵袭症+ 提交于 2020-08-06 08:37:49
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 导读: 本文带你了解面向列与面向行的数据库。 大多数数据库系统存储一组数据记录,这些记录由表中的列和行组成。字段是列和行的交集:某种类型的单个值。 属于同一列的字段通常具有相同的数据类型。例如,如果我们定义了一个包含用户数据的表,那么所有的用户名都将是相同的类型,并且属于同一列。在逻辑上属于同一数据记录(通常由键标识)的值的集合构成一行。 对数据库进行分类的方法之一是按数据在磁盘上的存储方式进行分类:按行或按列进行分类。表可以水平分区(将属于同一行的值存储在一起),也可以垂直分区(将属于同一列的值存储在一起)。图1-2描述了这种区别:a)显示了按列分区的值,b)显示了按行分区的值。 面向行的数据库的例子很多:MySQL、PostgreSQL和大多数传统的关系数据库。而两个开源的、面向列数据存储的先驱则是MonetDB和C-Store(C-Store是Vertica的开源前身)。 01 面向行的数据布局 面向行的数据库按记录或行来存储数据。它的布局非常接近表格的数据表示方法,即其中每一行都具有相同的字段集合。例如,面向行的数据库可以有效地存储用户条目,其中包含姓名、出生日期和电话号码: | ID | Name | Birth Date | Phone Number | | 10

Amazon Redshift数据迁移阿里云MaxCompute技术方案

倖福魔咒の 提交于 2020-08-04 17:55:10
1 方案概述 本文将介绍如何通过公网环境迁移Amazon Redshift数据到阿里云MaxCompute服务当中。 本方案的总体迁移流程如下: 第一, 将Amazon Redshift 中的数据导出到Amazon S3存储上; 第二, 借助阿里云在线迁移服务(Data Online Migration)从AWS S3将数据迁移到阿里云OSS上; 第三, 将数据从阿里云OSS加载到同Region的MaxCompute项目中,并进行校验数据完整性。 2 前提条件 · 准备Redshift的集群环境及数据环境; 使用已有的Redshift集群或创建新的Redshift集群: ** ** 在Redshift集群中准备好需要迁移的数据,本方案中在public schema中准备了TPC-H数据集进行方案介绍: · 准备MaxCompute的项目环境; 在阿里云Region创建MaxCompute项目,这里以新加坡Region为例,创建了作为迁移目标的MaxCompute项目: 3 Redshift导出数据到S3 3.1 Unload简介 3.1.1 命令介绍 AWS Redshift支持Role-based access control和Key-based access control两种认证方式实现Redshift UNLOAD命令写入数据到S3。 基于IAM Role的UNLOAD命令