原文链接:批流一体数据集成工具ChunJun同步Hive事务表原理详解及实战分享
课件获取:关注公众号__ “数栈研习社”,__后台私信__ “ChengYing”__ 获得直播课件
视频回放:点击这里
ChengYing 开源项目地址:github 丨 gitee 喜欢我们的项目给我们点个__ STAR!STAR!!STAR!!!(重要的事情说三遍)__
技术交流钉钉 qun:30537511
本期我们带大家回顾一下无倦同学的直播分享《Chunjun同步Hive事务表详解》
一、Hive事务表的结构及原理
Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。
在分享Hive事务表的具体内容前,我们先来了解下HIve 事务表在 HDFS 存储上的一些限制。
Hive虽然支持了具有ACID语义的事务,但是没有像在MySQL中使用那样方便,有很多局限性,具体限制如下:
以下矩阵包括可以使用Hive创建的表的类型、是否支持ACID属性、所需的存储格式以及关键的SQL操作。
了解完Hive事务表的限制,现在我们具体了解下Hive事务表的内容。
1、事务表文件名字详解
$partition/base_$wid/$bucket
$partition/delta_$wid_$wid_$stid/$bucket
$partition/delete_delta_$wid_$wid_$stid/$bucket
2、事务表文件内容详解
$ orc-tools data bucket_00000
{"operation":0,"originalTransaction":1,"bucket":536870912,"rowId":0,"currentTransaction":1,"row":{"id":1,"name":"Jerry","age":18}}
{"operation":0,"originalTransaction":1,"bucket":536870912,"rowId":1,"currentTransaction":1,"row":{"id":2,"name":"Tom","age":19}}
{"operation":0,"originalTransaction":1,"bucket":536870912,"rowId":2,"currentTransaction":1,"row":{"id":3,"name":"Kate","age":20}}
operation 0 表示插入、1 表示更新,2 表示删除。由于使用了 split-update,UPDATE 是不会出现的。
originalTransaction是该条记录的原始写事务 ID:
a、对于 INSERT 操作,该值和 currentTransaction 是一致的;
b、对于 DELETE,则是该条记录第一次插入时的写事务 ID。
bucket 是一个 32 位整型,由 BucketCodec 编码,各个二进制位的含义为:
a、1-3 位:编码版本,当前是 001;
b、4 位:保留;
c、5-16 位:分桶 ID,由 0 开始。分桶 ID 是由 CLUSTERED BY 子句所指定的字段、以及分桶的数量决定的。该值和 bucket_N 中的 N 一致;
d、17-20 位:保留;
e、21-32 位:语句 ID;
举例来说,整型 536936448 的二进制格式为 00100000000000010000000000000000,即它是按版本 1 的格式编码的,分桶 ID 为 1。
rowId 是一个自增的唯一 ID,在写事务和分桶的组合中唯一;
currentTransaction 当前的写事务 ID;
row 具体数据。对于 DELETE 语句,则为 null。
3、更新 Hive 事务表数据
UPDATE employee SET age = 21 WHERE id = 2;
这条语句会先查询出所有符合条件的记录,获取它们的 row_id 信息,然后分别创建 delete 和 delta 目录:
/user/hive/warehouse/employee/delta_0000001_0000001_0000/bucket_00000
/user/hive/warehouse/employee/delete_delta_0000002_0000002_0000/bucket_00000 (update)
/user/hive/warehouse/employee/delta_0000002_0000002_0000/bucket_00000 (update)
delete_delta_0000002_0000002_0000/bucket_00000
包含了删除的记录:
{"operation":2,"originalTransaction":1,"bucket":536870912,"rowId":1,"currentTransaction":2,"row":null}
delta_0000002_0000002_0000/bucket_00000
包含更新后的数据:
{"operation":0,"originalTransaction":2,"bucket":536870912,"rowId":0,"currentTransaction":2,"row":{"id":2,"name":"Tom","salary":21}}
4、Row_ID 信息怎么查?
5、事务表压缩(Compact)
随着写操作的积累,表中的 delta 和 delete 文件会越来越多,事务表的读取过程中需要合并所有文件,数量一多势必会影响效率,此外小文件对 HDFS 这样的文件系统也不够友好,因此Hive 引入了压缩(Compaction)的概念,分为 Minor 和 Major 两类。
● Minor
Minor Compaction 会将所有的 delta 文件压缩为一个文件,delete 也压缩为一个。压缩后的结果文件名中会包含写事务 ID 范围,同时省略掉语句 ID。
压缩过程是在 Hive Metastore 中运行的,会根据一定阈值自动触发。我们也可以使用如下语句人工触发:
ALTER TABLE dtstack COMPACT 'MINOR'。
● Major
Major Compaction 会将所有的 delta 文件,delete 文件压缩到一个 base 文件。压缩后的结果文件名中会包含所有写事务 ID 的最大事务 ID。
压缩过程是在 Hive Metastore 中运行的,会根据一定阈值自动触发。我们也可以使用如下语句人工触发:
ALTER TABLE dtstack COMPACT 'MAJOR'。
6、文件内容详解
ALTER TABLE employee COMPACT 'minor';
语句执行前:
/user/hive/warehouse/employee/delta_0000001_0000001_0000
/user/hive/warehouse/employee/delta_0000002_0000002_0000 (insert 创建, mary的数据)
/user/hive/warehouse/employee/delete_delta_0000002_0000002_0001 (update)
/user/hive/warehouse/employee/delta_0000002_0000002_0001 (update)
语句执行后:
/user/hive/warehouse/employee/delete_delta_0000001_0000002
/user/hive/warehouse/employee/delta_0000001_0000002
7、读 Hive 事务表
我们可以看到 ACID 事务表中会包含三类文件,分别是 base、delta、以及 delete。文件中的每一行数据都会以 row_id 作为标识并排序。从 ACID 事务表中读取数据就是对这些文件进行合并,从而得到最新事务的结果。这一过程是在 OrcInputFormat 和 OrcRawRecordMerger 类中实现的,本质上是一个合并排序的算法。
以下列文件为例,产生这些文件的操作为:
插入三条记录
进行一次 Major Compaction
然后更新两条记录。
1-0-0-1 是对 originalTransaction - bucketId - rowId - currentTra
8、合并算法
对所有数据行按照 (originalTransaction, bucketId, rowId) 正序排列,(currentTransaction) 倒序排列,即:
originalTransaction-bucketId-rowId-currentTransaction
(base_1)1-0-0-1
(delete_2)1-0-1-2# 被跳过(DELETE)
(base_1)1-0-1-1 # 被跳过(当前记录的 row_id(1) 和上条数据一样)
(delete_2)1-0-2-2 # 被跳过(DELETE)
(base_1)1-0-2-1 # 被跳过(当前记录的 row_id(2) 和上条数据一样)
(delta_2)2-0-0-2
(delta_2)2-0-1-2
获取第一条记录;
如果当前记录的 row_id 和上条数据一样,则跳过;
如果当前记录的操作类型为 DELETE,也跳过;
通过以上两条规则,对于 1-0-1-2 和 1-0-1-1,这条记录会被跳过;
如果没有跳过,记录将被输出给下游;
重复以上过程。
合并过程是流式的,即 Hive 会将所有文件打开,预读第一条记录,并将 row_id 信息存入到 ReaderKey 类型中。
三、ChunJun读写Hive事务表实战
了解完Hive事务表的基本原理后,我们来为大家分享如何在ChunJun中读写Hive事务表。
1、事务表数据准备
-- 创建事务表
create table dtstack(
id int,
name string,
age int
)
stored as orc
TBLPROPERTIES('transactional'='true');
-- 插入 10 条测试数据
insert into dtstack (id, name, age)
values (1, "aa", 11), (2, "bb", 12), (3, "cc", 13), (4, "dd", 14), (5, "ee", 15),
(6, "ff", 16), (7, "gg", 17), (8, "hh", 18), (9, "ii", 19), (10, "jj", 20);
2、配置 ChunJun json 脚本
3、提交任务(读写事务表)
启动 Session
/root/wujuan/flink-1.12.7/bin/yarn-session.sh -t $ChunJun_HOME -d
提交 Yarn Session 任务
读取事务表
/root/wujuan/ChunJun/bin/ChunJun-yarn-session.sh -job /root/wujuan/ChunJun/ChunJun-examples/json/hive3/hive3_transaction_stream.json -confProp {\"yarn.application.id\":\"application_1650792512832_0134\"}
写入事务表
/root/wujuan/ChunJun/bin/ChunJun-yarn-session.sh -job /root/wujuan/ChunJun/ChunJun-examples/json/hive3/stream_hive3_transaction.json -confProp {\"yarn.application.id\":\"application_1650792512832_0134\"}
根据上一行结果替换 yarn.application.id
三、ChunJun 读写Hive事务表源码分析
压缩器是在 Metastore 境内运行的一组后台程序,用于支持 ACID 系统。它由 Initiator、 Worker、 Cleaner、 AcidHouseKeeperService 和其他一些组成。
1、Compactor
● Delta File Compaction
在不断的对表修改中,会创建越来越多的delta文件,需要这些文件需要被压缩以保证性能。有两种类型的压缩,即(minor)小压缩和(major)大压缩:
minor 需要一组现有的delta文件,并将它们重写为每个桶的一个delta文件
major 需要一个或多个delta文件和桶的基础文件,并将它们改写成每个桶的新基础文件。major 需要更久,但是效果更好
所有的压缩工作都是在后台进行的,并不妨碍对数据的并发读写。在压缩之后系统会等待,直到所有旧文件的读都结束,然后删除旧文件。
●Initiator
这个模块负责发现哪些表或分区要进行压缩。这应该在元存储中使用hive.compactor.initiator.on来启用。 每个 Compact 任务处理一个分区(如果表是未分区的,则处理整个表)。如果某个分区的连续压实失败次数超过 hive.compactor.initiator.failed.compacts.threshold,这个分区的自动压缩调度将停止。
● Worker
每个Worker处理一个压缩任务。 一个压缩是一个MapReduce作业,其名称为以下形式。-compactor-..。 每个Worker将作业提交给集群(如果定义了hive.compactor.job.queue),并等待作业完成。hive.compactor.worker.threads决定了每个Metastore中Worker的数量。 Hive仓库中的Worker总数决定了并发压缩的最大数量。
● Cleaner
这个进程是在压缩后,在确定不再需要delta文件后,将其删除。
● AcidHouseKeeperService
这个进程寻找那些在hive.txn.timeout时间内没有心跳的事务并中止它们。系统假定发起交易的客户端停止心跳后崩溃了,它锁定的资源应该被释放。
● SHOW COMPACTIONS
该命令显示当前运行的压实和最近的压实历史(可配置保留期)的信息。这个历史显示从HIVE-12353开始可用。
● Compact 重点配置
2、如何 debug Hive
debug hive client
hive --debug
debug hive metastore
hive --service metastore --debug:port=8881,mainSuspend=y,childSuspend=n --hiveconf hive.root.logger=DEBUG,console
debug hive mr 任务
3、读写过滤和CompactorMR排序的关键代码
4、Minor&Major 合并源码(CompactorMR Map 类)
四、ChunJun 文件系统未来规划
最后为大家介绍ChunJun 文件系统未来规划:
● 基于 FLIP-27 优化文件系统
批流统一实现,简单的线程模型,分片和读数据分离。
● Hive 的分片优化
分片更精细化,粒度更细,充分发挥并发能力
● 完善 Exactly Once 语义
加强异常情况健壮性。
● HDFS 文件系统的断点续传
根据分区,文件个数,文件行数等确定端点位置,状态存储在 checkpoint 里面。
● 实时采集文件
实时监控目录下的多个追加文件。
● 文件系统格式的通用性
JSON、CSV、Text、XM、EXCELL 统一抽取公共包。
袋鼠云开源框架钉钉技术交流qun(30537511),欢迎对大数据开源项目有兴趣的同学加入交流最新技术信息,开源项目库地址:https://github.com/DTStack
你可能感兴趣的:(大数据)
数据分析:低代码平台助力大数据时代的飞跃发展
快乐非自愿
数据分析 低代码 大数据
随着信息技术的突飞猛进,我们身处于一个数据量空前增长的时代——大数据时代。在这个时代背景下,数据分析已经成为企业决策、政策制定、科学研究等众多领域不可或缺的重要工具。然而,面对海量的数据和日益复杂多变的分析需求,传统的数据分析方法往往捉襟见肘,难以应对。幸运的是,低代码平台的兴起为大数据分析注入了新的活力,成为推动大数据时代发展的重要力量。低代码平台,顾名思义,是一种通过少量甚至无需编写代码,就能
Apache Kafka的伸缩性探究:实现高性能、弹性扩展的关键
i289292951
kafka kafka
引言ApacheKafka作为当今最流行的消息中间件之一,以其强大的伸缩性著称。在大数据处理、流处理和实时数据集成等领域,Kafka的伸缩性为其在面临急剧增长的数据流量和多样化业务需求时提供了无与伦比的扩展能力。本文将深入探讨Kafka如何通过其独特的架构设计实现高水平的伸缩性,以及在实际部署中如何优化和利用这一特性。一、Kafka伸缩性的核心设计分区(Partitioning)与水平扩展Kafk
山东省大数据局副局长禹金涛一行莅临聚合数据走访调研
聚合数据
API 大数据 人工智能 API
3月19日,山东省大数据局党组成员、副局长禹金涛莅临聚合数据展开考察调研。山东省大数据局数据应用管理与安全处处长杨峰,副处长都海明参加调研,苏州市大数据局副局长汤晶陪同。聚合数据董事长左磊等人接待来访。调研组一行参观了聚合数据展厅,了解了聚合数据的发展历程、数据产品、应用案例、奖项荣誉等情况。并就企业在数据处理和应用方面取得的成绩进行了深入交流。作为最早一批进入大数据行业的企业,聚合数据深耕行业十
智慧公厕的先进技术应用
中期科技ZONTREE
智慧厕所 智慧公厕 智慧城市
公共厕所一直以来都是城市管理中一个重要的工作,但设施老化、环境脏乱、服务质量低下等问题一直困扰着城市居民。然而,随着科技的进步和数字技术的应用,智慧公厕的建设正在改变这一现状。智慧公厕通过对所在辖区内所有公共厕所的全域感知、全网协同、全业务融合和全场景智慧的赋能,“千厕一云”的公共厕所云管理模式应运而生。智慧公厕的云端多屏管理,将各个公厕连接在一起,实现信息的共享和管理的集中化。通过大数据、云计算
【Hadoop】使用Scala与Spark连接ClickHouse进行数据处理
音乐学家方大刚
Scala Hadoop hadoop scala spark
风不懂不懂得叶的梦月不听不听闻窗里琴声意难穷水不见不曾见绿消红霜不知不知晓将别人怎道珍重落叶有风才敢做一个会飞的梦孤窗有月才敢登高在夜里从容桃花有水才怕身是客身是客此景不能久TieYann(铁阳)、薄彩生《不知晓》在大数据分析和处理领域,ApacheSpark是一个广泛使用的高性能、通用的计算框架,而ClickHouse作为一个高性能的列式数据库,特别适合在线分析处理(OLAP)。结合Scala语
一文详解大数据时代与低代码开发应用
快乐非自愿
大数据 低代码
随着信息技术的飞速发展,我们迎来了一个崭新的时代——大数据时代。在这个时代,数据成为了一种新的资源,大数据技术的应用成为了推动社会进步的关键力量。而在大数据技术的浪潮中,低代码开发应用也逐渐崭露头角,以其高效、灵活的特点,成为大数据时代的重要支撑。大数据时代的来临随着科技的飞速发展和互联网的广泛普及,我们迎来了一个被称为“大数据时代”的全新时代。这个时代,数据无处不在,无时不刻不在增长,其规模之大
Spark面试整理-Spark是什么?
不务正业的猿
面试 Spark spark 大数据 分布式
ApacheSpark是一个开源的分布式计算系统,它提供了一个用于大规模数据处理的快速、通用、易于使用的平台。它最初是在加州大学伯克利分校的AMPLab开发的,并于2010年开源。自那时起,Spark已经成为大数据处理中最受欢迎和广泛使用的框架之一。下面是Spark的一些关键特点:速度:Spark使用了先进的DAG(有向无环图)执行引擎,可以支持循环数据流和内存计算。这使得Spark在数据处理方面
请介绍一下大数据主要是干什么的?决策支持预测分析用户行为分析个性化服务操作优化风险管理创新与产品开发加拿大卡尔加里大学历史背景学术结构研究和创新校园设施
盛溪的猫猫
感悟 大数据 英语 加拿大
目录请介绍一下大数据主要是干什么的?决策支持预测分析用户行为分析个性化服务操作优化风险管理创新与产品开发加拿大卡尔加里大学历史背景学术结构研究和创新校园设施国际化学生生活大语言模型目前的问题卡尔加里经济地理和气候文化和活动教育交通绿色城市AVL树的旋转单右旋(LL旋转)单左旋(RR旋转)左右旋(LR旋转)右左旋(RL旋转)请介绍一下大数据主要是干什么的?大数据是一个涉及从极其庞大和复杂的数据集中提
GEE在灾害预警中的遥感云大数据应用及GPT模型辅助分析
AIzmjl
GPT 生态 遥感 大数据 gpt gee 灾害预警 水体湿地 遥感
随着遥感技术的快速发展,云大数据在灾害、水体与湿地领域的应用日益广泛。通过遥感云大数据,我们能够实时获取灾害发生地的影像信息,为灾害预警、应急响应提供有力支持。同时,在水体与湿地监测方面,遥感云大数据也发挥着重要作用,帮助我们了解水体的分布、变化以及湿地的生态状况。近年来,GPT模型在自然语言处理领域取得了显著成果,其强大的文本生成和理解能力为遥感云大数据的应用提供了新的可能。通过将GPT模型与遥
大数据毕设 图像识别-人脸识别与疲劳检测 - python opencv
fawubio_A
python 算法
文章目录0前言1课题背景2Dlib人脸识别2.1简介2.2Dlib优点2.3相关代码2.4人脸数据库2.5人脸录入加识别效果3疲劳检测算法3.1眼睛检测算法3.2打哈欠检测算法3.3点头检测算法4PyQt54.1简介4.2相关界面代码0前言这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师
大数据开发(Hive面试真题-卷二)
Key-Key
大数据 hive 面试
大数据开发(Hive面试真题)1、举几个Hive开窗函数例子?什么要有开窗函数,和聚集函数区别?2、说下Hive是什么?跟数据仓库区别?3、Hive架构?4、Hive数据倾斜以及解决方案?5、Hive如果不用参数调优,在map和reduce端应该做什么?6、Hive的三种自定义函数是什么?实现步骤与流程?它们之间的区别?作用是什么?7、Hive分区和分桶的区别?8、Hive的执行流程?9、Hive
【大数据面试题】014 Flink CDC 用过吗,请简要描述
Jiweilai1
一天一道面试题 flink 大数据 面试 flink cdc
一步一个脚印,一天一道面试题。FlinkCDC的诞生背景FlinkCDC的全称是ChangeDataCapture(变更数据捕获)每一项技术的诞生都是为了解决某个问题,某个痛点。而FlinkCDC的诞生就是为了解决在读取,监控MySQL这样的数据库时,不会因为读取数据库,对数据库本身造成压力,影响性能。同时,保证了数据源的准确,正确。FlinkCDC原理方式一:通过查询来获取更新的数据。如查询数据
【大数据】Flink SQL 语法篇(五):Regular Join、Interval Join
G皮T
# Flink SQL 大数据 flink sql Regular Join Interval Join 双流Join
《FlinkSQL语法篇》系列,共包含以下10篇文章:FlinkSQL语法篇(一):CREATEFlinkSQL语法篇(二):WITH、SELECT&WHERE、SELECTDISTINCTFlinkSQL语法篇(三):窗口聚合(TUMBLE、HOP、SESSION、CUMULATE)FlinkSQL语法篇(四):Group聚合、Over聚合FlinkSQL语法篇(五):RegularJoin、I
有一点动心
段duan
《有一点动心》是6月4日新上映的一部影片,在香山国际影城的支持下,与水姐观影群的伙伴们共同观看了这部影片。随着社会意识形态的不断变化,人们对感情的态度,也呈现出多元化的状态。爱情,自从人类诞生之日起,不论朝代如何更替变迁,都是生命的一大核心主题,演绎出无数个动人的故事,让经历者体验其中,让倾听者无比动容。从调查出来的大数据来看,适龄人群的不婚比例,是空前高的一个数字,越来越多的适婚人士,加入了不婚
大数据开发(Kafka面试真题-卷一)
Key-Key
大数据 kafka 面试
大数据开发(Kafka面试真题)1、请解释以下ApacheKafka是什么?它在大数据系统中的角色是什么?2、请解释以下Kafka的工作原理和它与传统消息队列服务的不同之处?3、解释以下ApacheKafka的作用以及它与常见消息队列系统(如RabbitMQ)之间的区别?4、如何使用ApacheKafka来实现实时数据流处理?5、Flinkcheckpoint和Kafkaoffset的关联是什么?
什么是分布式搜索引擎
罗彬桦
分布式搜索引擎 搜索引擎 分布式
什么是分布式搜索引擎搜索引擎所谓搜索引擎,就是根据用户需求与一定算法,运用特定策略从互联网检索出制定信息反馈给用户的一门检索技术。搜索引擎依托于多种技术,如网络爬虫技术、检索排序技术、网页处理技术、大数据处理技术、自然语言处理技术等,为信息检索用户提供快速、高相关性的信息服务。搜索引擎技术的核心模块一般包括爬虫、索引、检索和排序等,同时可添加其他一系列辅助模块,以为用户创造更好的网络使用环境。分布
挑战杯 大数据商城人流数据分析与可视化 - python 大数据分析
laafeer
python
0前言优质竞赛项目系列,今天要分享的是基于大数据的基站数据分析与可视化该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!学长这里给一个题目综合评分(每项满分5分)难度系数:3分工作量:3分创新点:3分更多资料,项目分享:https://gitee.com/dancheng-senior/postgraduate课题背景随着当今个人手机终端的普及,出行群体中手机拥有率和使用率已达到相当高的比例,手
Java开发从入门到精通(七):Java的面向对象编程OOP:常用API
HACKNOE
Java开发从入门到精通 java intellij-idea
Java大数据开发和安全开发(一)Java的常用API1.1Object类1.1toString1.1equals方法1.1对象克隆clone1.1Objects类1.1包装类1.1StringBuilder1.1StringBuffer1.1StringJoiner1.1Math、System、Runtime1.1BigDecimal1.1传统时间:Date日期类、SimpleDateForma
linux安装单机版spark3.5.0
爱上雪茄
大数据 JAVA知识 spark 大数据 分布式
一、spark介绍是一种通用的大数据计算框架,正如传统大数据技术Hadoop的MapReduce、Hive引擎,以及Storm流式实时计算引擎等.Spark主要用于大数据的计算二、spark下载spark3.5.0三、spark环境变量配置exportJAVA_HOME=/usr/local/jdk1.8.0_391exportJRE_HOME=/usr/local/jdk1.8.0_391/jr
Hadoop简介
程序员小郭同学
hadoop
简介大数据简介概述大数据的说法从出现到现在,也经历了十多年时间的发展。而在这十几年的发展过程中,非常多的机构、组织都试图对大数据做出过定义,例如:研究机构Gartner给出了这样的定义:"大数据"是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。再例如根据维基百科的定义,大数据是指无法在可承受的时间范围内用常规软件工具进行捕捉、管理和处理的数据集合。
数大数据时代的关键:融合数据治理与AI为企业增值_光点科技
光点数据治理
人工智能 大数据 科技
在数据驱动的今天,企业不能再将数据治理和人工智能(AI)视作孤立的实体。它们之间的协同作用已经成为推动企业增长的强大引擎。本文将探索数据治理与AI如何相互作用,形成闭环,以及企业如何利用这一关系来提升数据价值,实现数字化转型。数据治理与AI的依存共生数据治理是整理和优化数据的过程,以确保其质量、安全性和可用性。而AI,尤其是大模型,是解析和应用这些数据的工具。没有高质量的数据治理,AI无法发挥其最
2024年阿里云大数据acp认证条件
腾科教育
阿里云 大数据 云计算
阿里云大数据acp认证考试没有条件,在校大学生、应届毕业生、在职员工均可报考。acp认证考试预约流程1.账户注册,认证人员登录阿里云认证全球培训中心网站,在页面右上角点击“立即注册”2.选择专业。账户注册成功会自动返回到网站首页,认证人员根据实际需要进行报考,3,认证购买。进入专业介绍页后点击“购买认证"跳转到认证购买页,点击对应专业认证名称再点击“立即购买”,确认订单后完成支付即可。4.考试预约
Redis 的 RDB 和 AOF
龙大.
Redis redis 数据库
1.RDB(RedisDatabase)定义:RDB是Redis的持久化机制之一,它会在指定的时间间隔内生成数据集的时间点快照。工作原理:当RDB持久化被触发时,Redis会创建一个子进程来执行实际的数据保存工作,父进程则继续处理客户端请求。子进程将内存中的数据写入到一个临时RDB文件中,完成后替换旧的RDB文件。优点:快速恢复大数据集。子进程创建的方式减少了主进程的内存消耗。RDB文件是一个紧凑
挑战杯 机器学习股票大数据量化分析与预测系统 - python 挑战杯
laafeer
python
文章目录0前言1课题背景2实现效果UI界面设计web预测界面RSRS选股界面3软件架构4工具介绍Flask框架MySQL数据库LSTM5最后0前言优质竞赛项目系列,今天要分享的是机器学习股票大数据量化分析与预测系统该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!学长这里给一个题目综合评分(每项满分5分)难度系数:3分工作量:3分创新点:3分更多资料,项目分享:https://gitee.com
03hive数仓安装与基础使用
daydayup9527
hadoop_hive 运维 hadoop
hiveHive概述Hive是基于Hadoop的一个数据仓库工具。可以将结构化的数据文件映射为一张表,并提供完整的sql查询功能,本质上还是一个文件底层是将sql语句转换为MapReduce任务进行运行本质上是一种大数据离线分析工具学习成本相当低,不用开发复杂的mapreduce应用,十分适合数据仓库的统计分析hive可以用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在hadoop
Spark的数据结构——RDD
bluedraam_pp
Spark spark 数据结构 大数据
RDD的5个特征下面来说一下RDD这东西,它是ResilientDistributedDatasets的简写。咱们来看看RDD在源码的解释。Alistofpartitions:在大数据领域,大数据都是分割成若干个部分,放到多个服务器上,这样就能做到多线程的处理数据,这对处理大数据量是非常重要的。分区意味着,可以使用多个线程了处理。Afunctionforcomputingeachsplit:作用在
Hbase集群搭建超详细教程
笑看风云路
集群搭建系列 hbase hbase hadoop 大数据
Hbase集群搭建前言详细步骤1、下载安装包2、解压3、修改配置文件3.1修改hbase-env.sh文件3.2修改hbase-site.xml3.3修改regionservers文件4、分发hbase目录5、启动HBase集群6、查看HBaseWebUI大家好,我是风云,欢迎大家关注我的博客,在未来的日子里我们一起来学习大数据相关的技术,一起努力奋斗,遇见更好的自己!前言HBase是一个开源的、
flink重温笔记(十五): flinkSQL 顶层 API ——实时数据流转化为SQL表的操作
那就学有所成吧(˵¯͒¯͒˵)
Flink重温笔记 flink 笔记 sql 大数据 学习方法 数据库 KAFKA
Flink学习笔记前言:今天是学习flink的第15天啦!学习了flinkSQL基础入门,主要是解决大数据领域数据处理采用表的方式,而不是写复杂代码逻辑,学会了如何初始化环境,鹅湖将流数据转化为表数据,以及如何查询表数据,结合自己实验猜想和代码实践,总结了很多自己的理解和想法,希望和大家多多交流!Tips:"分享是快乐的源泉,在我的博客里,不仅有知识的海洋,还有满满的正能量加持,快来和我一起分享这
大数据开发(Spark面试真题-卷一)
Key-Key
大数据 spark 面试
大数据开发(Spark面试真题)1、什么是SparkStreaming?简要描述其工作原理。2、什么是Spark内存管理机制?请解释其中的主要概念,并说明其作用。3、请解释一下Spark中的shuffle是什么,以及为什么shuffle操作开销较大?4、请解释一下Spark中的RDD持久化(Caching)是什么以及为什么要使用持久化?5、请解释一下Spark中ResilientDistribut
基于HBase和Spark构建企业级数据处理平台
weixin_34071713
大数据 数据库 爬虫
摘要:在中国HBase技术社区第十届Meetup杭州站上,阿里云数据库技术专家李伟为大家分享了如何基于当下流行的HBase和Spark体系构建企业级数据处理平台,并且针对于一些具体落地场景进行了介绍。演讲嘉宾简介:李伟(花名:沐远),阿里云数据库技术专家。专注于大数据分布式计算和数据库领域,具有6年分布式开发经验,先后研发Spark及自主研发内存计算,目前为广大公有云用户提供专业的云HBase数据
java线程Thread和Runnable区别和联系
zx_code
java jvm thread 多线程 Runnable
我们都晓得java实现线程2种方式,一个是继承Thread,另一个是实现Runnable。
模拟窗口买票,第一例子继承thread,代码如下
package thread;
public class ThreadTest {
public static void main(String[] args) {
Thread1 t1 = new Thread1(
【转】JSON与XML的区别比较
丁_新
json xml
1.定义介绍
(1).XML定义
扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。
XML是标
c++ 实现五种基础的排序算法
CrazyMizzz
C++ c 算法
#include<iostream>
using namespace std;
//辅助函数,交换两数之值
template<class T>
void mySwap(T &x, T &y){
T temp = x;
x = y;
y = temp;
}
const int size = 10;
//一、用直接插入排
我的软件
麦田的设计者
我的软件 音乐类 娱乐 放松
这是我写的一款app软件,耗时三个月,是一个根据央视节目开门大吉改变的,提供音调,猜歌曲名。1、手机拥有者在android手机市场下载本APP,同意权限,安装到手机上。2、游客初次进入时会有引导页面提醒用户注册。(同时软件自动播放背景音乐)。3、用户登录到主页后,会有五个模块。a、点击不胫而走,用户得到开门大吉首页部分新闻,点击进入有新闻详情。b、
linux awk命令详解
被触发
linux awk
awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息
awk处理过程: 依次对每一行进行处理,然后输出
awk命令形式:
awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
[-F|-f|-v]大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=val
各种语言比较
_wy_
编程语言
Java Ruby PHP 擅长领域
oracle 中数据类型为clob的编辑
知了ing
oracle clob
public void updateKpiStatus(String kpiStatus,String taskId){
Connection dbc=null;
Statement stmt=null;
PreparedStatement ps=null;
try {
dbc = new DBConn().getNewConnection();
//stmt = db
分布式服务框架 Zookeeper -- 管理分布式环境中的数据
矮蛋蛋
zookeeper
原文地址:
http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/
安装和配置详解
本文介绍的 Zookeeper 是以 3.2.2 这个稳定版本为基础,最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取,Zookeeper 的安装非常简单,下面将从单机模式和集群模式两
tomcat数据源
alafqq
tomcat
数据库
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。
没有使用JNDI时我用要这样连接数据库:
03. Class.forName("com.mysql.jdbc.Driver");
04. conn
遍历的方法
百合不是茶
遍历
遍历
在java的泛
linux查看硬件信息的命令
bijian1013
linux
linux查看硬件信息的命令
一.查看CPU:
cat /proc/cpuinfo
二.查看内存:
free
三.查看硬盘:
df
linux下查看硬件信息
1、lspci 列出所有PCI 设备;
lspci - list all PCI devices:列出机器中的PCI设备(声卡、显卡、Modem、网卡、USB、主板集成设备也能
java常见的ClassNotFoundException
bijian1013
java
1.java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory 添加包common-logging.jar2.java.lang.ClassNotFoundException: javax.transaction.Synchronization
【Gson五】日期对象的序列化和反序列化
bit1129
反序列化
对日期类型的数据进行序列化和反序列化时,需要考虑如下问题:
1. 序列化时,Date对象序列化的字符串日期格式如何
2. 反序列化时,把日期字符串序列化为Date对象,也需要考虑日期格式问题
3. Date A -> str -> Date B,A和B对象是否equals
默认序列化和反序列化
import com
【Spark八十六】Spark Streaming之DStream vs. InputDStream
bit1129
Stream
1. DStream的类说明文档:
/**
* A Discretized Stream (DStream), the basic abstraction in Spark Streaming, is a continuous
* sequence of RDDs (of the same type) representing a continuous st
通过nginx获取header信息
ronin47
nginx header
1. 提取整个的Cookies内容到一个变量,然后可以在需要时引用,比如记录到日志里面,
if ( $http_cookie ~* "(.*)$") {
set $all_cookie $1;
}
变量$all_cookie就获得了cookie的值,可以用于运算了
java-65.输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999
bylijinnan
java
参考了网上的http://blog.csdn.net/peasking_dd/article/details/6342984
写了个java版的:
public class Print_1_To_NDigit {
/**
* Q65.输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999
* 1.使用字符串
Netty源码学习-ReplayingDecoder
bylijinnan
java netty
ReplayingDecoder是FrameDecoder的子类,不熟悉FrameDecoder的,可以先看看
http://bylijinnan.iteye.com/blog/1982618
API说,ReplayingDecoder简化了操作,比如:
FrameDecoder在decode时,需要判断数据是否接收完全:
public class IntegerH
js特殊字符过滤
cngolon
js特殊字符 js特殊字符过滤
1.js中用正则表达式 过滤特殊字符, 校验所有输入域是否含有特殊符号function stripscript(s) { var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]"
hibernate使用sql查询
ctrain
Hibernate
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.hibernate.Hibernate;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transa
linux shell脚本中切换用户执行命令方法
daizj
linux shell 命令 切换用户
经常在写shell脚本时,会碰到要以另外一个用户来执行相关命令,其方法简单记下:
1、执行单个命令:su - user -c "command"
如:下面命令是以test用户在/data目录下创建test123目录
[root@slave19 /data]# su - test -c "mkdir /data/test123" 
好的代码里只要一个 return 语句
dcj3sjt126com
return
别再这样写了:public boolean foo() { if (true) { return true; } else { return false;
Android动画效果学习
dcj3sjt126com
android
1、透明动画效果
方法一:代码实现
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment_main, container, fals
linux复习笔记之bash shell (4)管道命令
eksliang
linux管道命令汇总 linux管道命令 linux常用管道命令
转载请出自出处:
http://eksliang.iteye.com/blog/2105461
bash命令执行的完毕以后,通常这个命令都会有返回结果,怎么对这个返回的结果做一些操作呢?那就得用管道命令‘|’。
上面那段话,简单说了下管道命令的作用,那什么事管道命令呢?
答:非常的经典的一句话,记住了,何为管
Android系统中自定义按键的短按、双击、长按事件
gqdy365
android
在项目中碰到这样的问题:
由于系统中的按键在底层做了重新定义或者新增了按键,此时需要在APP层对按键事件(keyevent)做分解处理,模拟Android系统做法,把keyevent分解成:
1、单击事件:就是普通key的单击;
2、双击事件:500ms内同一按键单击两次;
3、长按事件:同一按键长按超过1000ms(系统中长按事件为500ms);
4、组合按键:两个以上按键同时按住;
asp.net获取站点根目录下子目录的名称
hvt
.net C# asp.net hovertree Web Forms
使用Visual Studio建立一个.aspx文件(Web Forms),例如hovertree.aspx,在页面上加入一个ListBox代码如下:
<asp:ListBox runat="server" ID="lbKeleyiFolder" />
那么在页面上显示根目录子文件夹的代码如下:
string[] m_sub
Eclipse程序员要掌握的常用快捷键
justjavac
java eclipse 快捷键 ide
判断一个人的编程水平,就看他用键盘多,还是鼠标多。用键盘一是为了输入代码(当然了,也包括注释),再有就是熟练使用快捷键。 曾有人在豆瓣评
《卓有成效的程序员》:“人有多大懒,才有多大闲”。之前我整理了一个
程序员图书列表,目的也就是通过读书,让程序员变懒。 写道 程序员作为特殊的群体,有的人可以这么懒,懒到事情都交给机器去做,而有的人又可
c++编程随记
lx.asymmetric
C++ 笔记
为了字体更好看,改变了格式……
&&运算符:
#include<iostream>
using namespace std;
int main(){
int a=-1,b=4,k;
k=(++a<0)&&!(b--
linux标准IO缓冲机制研究
音频数据
linux
一、什么是缓存I/O(Buffered I/O)缓存I/O又被称作标准I/O,大多数文件系统默认I/O操作都是缓存I/O。在Linux的缓存I/O机制中,操作系统会将I/O的数据缓存在文件系统的页缓存(page cache)中,也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。1.缓存I/O有以下优点:A.缓存I/O使用了操作系统内核缓冲区,
随想 生活
暗黑小菠萝
生活
其实账户之前就申请了,但是决定要自己更新一些东西看也是最近。从毕业到现在已经一年了。没有进步是假的,但是有多大的进步可能只有我自己知道。
毕业的时候班里12个女生,真正最后做到软件开发的只要两个包括我,PS:我不是说测试不好。当时因为考研完全放弃找工作,考研失败,我想这只是我的借口。那个时候才想到为什么大学的时候不能好好的学习技术,增强自己的实战能力,以至于后来找工作比较费劲。我
我认为POJO是一个错误的概念
windshome
java POJO 编程 J2EE 设计
这篇内容其实没有经过太多的深思熟虑,只是个人一时的感觉。从个人风格上来讲,我倾向简单质朴的设计开发理念;从方法论上,我更加倾向自顶向下的设计;从做事情的目标上来看,我追求质量优先,更愿意使用较为保守和稳妥的理念和方法。
&