大数据Hadoop之——新一代流式数据湖平台 Apache Hudi

数据湖存储解决方案之Hudi Apache Hudi是一个Data Lakes的开源方案,Hudi是Hadoop Upserts Delete and Incremental的简写,它是由Uber开发并开源的Data Lakes解决方案。Hudi能够基于HDFS之上管理大型分析数据集,可以对数据进行插入、更新、增量消费等操作,主要目的是高效减少摄取过程中的数据延迟。官方对 Hudi 的定义如下:Apache Hudi将核心仓库和数据库功能直接引入数据湖。 阅读详情

一、概述

Hudi(Hadoop Upserts Deletes and Incrementals),简称Hudi,是一个流式数据湖平台,支持对海量数据快速更新,内置表格式,支持事务的存储层、 一系列表服务、数据服务(开箱即用的摄取工具)以及完善的运维监控工具,它可以以极低的延迟将数据快速存储到HDFS或云存储(S3)的工具,最主要的特点支持记录级别的插入更新(Upsert)和删除,同时还支持增量查询。

  • Apache Hudl本身不存储数据,仅仅管理数据,借助外部存储引擎存储数据,比如HDFS;
  • 此外,Apache Hudi也不分析数据,需要使用计算分析引擎,查询和保存数据,比如Spark或Flink;
  • 使用Hudi时,加载jar包,底层调用API,所以需要依据使用大数据框架版本,编译Hudi源码,获取对应依赖jar包。

GitHub地址:github.com/apache/hudi

官方文档:hudi.apache.org/cn/docs/ove… 

上图从下到上,由左向右看

  • hudi 底层的数据可以存储到hdfs、s3、azure、alluxio 等存储。
  • hudi 可以使用spark/flink 计算引擎来消费 kafka、pulsar 等消息队列的数据,而这些数据可能来源于 app 或者微服务的业务数据、日志数据,也可以是 mysql 等数据库的 binlog 日志数据。
  • spark/hudi 首先将这些数据处理为 hudi 格式的 row tables (原始表),然后这张原始表可以被 Incremental ETL (增量处理)生成一张 hudi 格式的 derived tables 派生表。
  • hudi 支持的查询引擎有:trino、hive、impala、spark、presto 等。
  • 支持 spark、flink、map-reduce 等计算引擎继续对 hudi 的数据进行再次加工处理。

二、Hudi 架构

  1. 通过DeltaStreammer、Flink、Spark等工具,将数据摄取到数据湖存储,可使用HDFS作为数据湖的数据存储;
  2. 基于HDFS可以构建Hudi的数据湖;
  3. Hudi提供统一的访问Spark数据源和Flink数据源;
  4. 外部通过不同引擎,如:Spark、Flink、Presto、Hive、Impala、Aliyun DLA、AWS Redshit访问接口;

三、Hudi的表格式

Hudi提供两类型表:写时复制(Copy on Write,COW)表和读时合并(Merge On Read,MOR)表。

  • 对于 Copy-On-Write Table,用户的 update 会重写数据所在的文件,所以是一个写放大很高,但是读放大为 0,适合写少读多的场景。
  • 对于 Merge-On-Read Table,整体的结构有点像 LSM-Tree,用户的写入先写入到 delta data 中,这部分数据使用行存,这部分 delta data 可以手动 merge 到存量文件中,整理为 parquet 的列存结构。

1)Copy on Write(写时复制)

简称COW,顾名思义,它是在数据写入的时候,复制一份原来的拷贝,在其基础上添加新数据。正在读数据的请求,读取的是最近的完整副本,这类似Mysql 的MVCC的思想。 

  • 优点:读取时,只读取对应分区的一个数据文件即可,较为高效;
  • 缺点:数据写入的时候,需要复制一个先前的副本再在其基础上生成新的数据文件,这个过程比较耗时。

2)Merge On Read(读时合并)

简称MOR,新插入的数据存储在delta log 中,定期再将delta log合并进行parquet数据文件。读取数据时,会将delta log跟老的数据文件做merge,得到完整的数据返回。下图演示了MOR的两种数据读写方式。

  • 优点:由于写入数据先写delta log,且delta log较小,所以写入成本较低;
  • 缺点:需要定期合并整理compact,否则碎片文件较多。读取性能较差,因为需要将delta log和老数据文件合并

3)COW vs MOR

  • COW表,用户在 snapshot 读取的时候会扫描所有最新的 FileSlice 下的 base file。
  • MOR表,在 READ OPTIMIZED 模式下,只会读最近的经过 compaction 的 commit。
权衡写时复制(COW )读时合并(MOR )
数据延迟更高更低
更新代价( I/O)更高(重写整个parquet文件)更低(追加到增量日志)
Parque&件大小更小(高更新代价( I/O)更大(低更新代价)
写放大更高更低(取决于压缩策略)
适用场景写少读多写多读少

四、元数据表(Metadata Table)

  • Apache Hudi元数据表可以显著提高查询的读/写性能。元数据表的主要目的是消除“列出文件”操作的要求。
  • 读取和写入数据时,将执行文件列表操作以获取文件系统的当前视图。当数据集很大时,列出所有文件可能是性能瓶颈,但更重要的是,对于AWS S3等云存储系统,由于某些请求限制,大量的文件列出请求有时会导致节流。相反,元数据表将主动维护文件列表,并消除递归文件列表操作的需要。

五、索引(Indexing)

Hudi通过索引机制将给定的hoodie键(记录键+分区路径)一致地映射到文件id,从而提供高效的升级。一旦将记录的第一个版本写入文件,记录键和文件组/文件id之间的映射就不会改变。简而言之,映射的文件组包含一组记录的所有版本。

目前,Hudi支持以下索引类型:

  • Bloom索引(默认):使用由记录键构建的Bloom过滤器,也可以使用记录键范围修剪候选文件。

  • 简单索引:根据从存储上的表中提取的键,对传入的更新/删除记录执行精简联接。

  • HBase索引:管理外部Apache HBase表中的索引映射。

  • 自定义索引:当然也可以扩展这个公共API来实现自定义索引。

六、查询类型(Query Type)

Hudi支持三种不同的查询表的方式:Snapshot Queries(快照查询)、Incremental Queries(增量查询)和Read Optimized Queries(读优化查询)。

1)Snapshot Queries(快照查询)

  • 查询查看给定提交或压缩操作时表的最新快照。在合并读取表的情况下,它通过动态合并最新文件切片的基本文件和增量文件来公开接近实时的数据(几分钟)。
  • 对于随写复制表,它提供了现有拼花桌的插入式替换,同时提供了upsert/delete和其他写入端功能。

2)Incremental Queries(增量查询)

  • 在给定的提交/压缩之后,查询只会看到写入表的新数据。这有效地提供了更改流以启用增量数据管道。
  • 可查看自给定commit/delta commit即时操作依赖新写入的数据,有效地提供变更流来启用增量数据管道。

3)Read Optimized Queries(读优化查询)

  • 查询查看给定提交/压缩操作时表的最新快照。仅显示最新文件切片中的基/列文件,并确保与非hudi列表相比具有相同的列查询性能。
  • 读优化查询和快照查询相同仅访问基本文件,提供给定文件片自上次执行压缩操作以来的数据。通常查询数据的最新程度的保证取决于压缩策略。

七、计算模型

在hudi过去的使用场景里,和大部分公司的架构类似,采用批式和流式共存的Lambda架构,后来Uber提出增量Incremental模型,相对批式来讲,更加实时,相对流式而言,更加经济。

1)批式模型(Batch)

批式模型就是使用MapReduce、Hive、Spark等典型的批计算引擎,以小时任务或者天任务的形式来做数据计算。特性如下:

  • 延迟:小时级延迟或者天级别延迟。这里的延迟不单单指的是定时任务的时间,在数据架构里,这里的延迟时间通常是定时任务间隔时间+一系列依赖任务的计算时间+数据平台最终可以展示结果的时间。数据量大、逻辑复杂的情况下,小时任务计算的数据通常真正延迟的时间是2-3小时。
  • 数据完整度:数据较完整。以处理时间为例,小时级别的任务,通常计算的原始数据已经包含了小时内的所有数据,所以得到的数据相对较完整。但如果业务需求是事件时间,这里涉及到终端的一些延迟上报机制,在这里,批式计算任务就很难派上用场。
  • 成本:成本很低。只有在做任务计算时,才会占用资源,如果不做任务计算,可以将这部分批式计算资源出让给在线业务使用。从另一个角度来说成本是挺高的,如原始数据做了一些增删改查,数据晚到的情况,那么批式任务是要全量重新计算。

2)流式模型(Stream)

流式模型,典型的就是使用Flink来进行实时的数据计算,特性:

  • 延迟:很短,甚至是实时。
  • 数据完整度:较差。因为流式引擎不会等到所有数据到齐之后再开始计算,所以有一个watermark的概念,当数据的时间小于watermark时,就会被丢弃,这样是无法对数据完整度有一个绝对的保障。在互联网场景中,流式模型主要用于活动时的数据大盘展示,对数据的完整度要求并不算很高。在大部分场景中,用户需要开发两个程序,一是流式数据生产流式结果,而是批式计算人物,用于次日修复实时结果。
  • 成本:很高。因为流式任务时常驻的,并且对于多流join的场景,通常要借助内存或者数据库来做state的存储,不管是序列化开销,还是和外部组件交互产生的额外IO,在大数据量下都是不容忽视的。

3)增量模型(Incremental)

针对批式和流式的优缺点,Uber提出了增量模型(Incremental Mode),相对批式来讲,更加实时;相对流式而言,更加经济。 增量模型,简单来讲,就是一mini batch的形式来跑准实时任务。hudi在增量模型中支持了两个最重要的特性:

  • Upsert:这个主要是解决批式模型中,数据不能插入、更新的问题,有了这个特性,可以往Hive中写入增量数据,而不是每次进行完全的覆盖。(hudi自身维护了key-file的映射,所以当upsert时很容易找到key对应的文件)
  • Incremental Query:增量查询,减少计算的原始数据量。以uber中司机和乘客的数据流join为例,每次抓取两条数据流中的增量数据进行批式的join即可,相比流式数据而言,成本要降低几个数量级。

八、数据仓库 VS 数据湖

1)数据类型

  • 结构化数据——来自关系型数据库中的行和列。
  • 半结构化数据——如CSV、日志、XML、JSON等。
  • 非结构化数据——如email、文档、PDF等。
  • 二进制数据——如图像、音频、视频等。

2)数据仓库与数据湖的区别

  • 数据仓库可以理解为是一个优化的数据库,用户分析来自事物系统和业务线应用程序的关系型数据(结构化数据和半结构化数据)。
  • 数据湖可以理解存储来自业务应用程序的关系型数据(结构化数据),以及来自移动应用程序、IOT设备和社交媒体的非关系型数据(非结构化数据)等所有类型数据。

特性数据仓库数据湖
数据来自事务系统、运营数据库和业务线应用程序的关系型数据来自loT设备、网站、移动应用程序、社交媒体和企业应用程序的非关系型和关系型数据
Schema设计在超仓库实施之前(写入型Schema)写入在分析时(读取型Schema)
性价比更快的查询结果会带来更高的存储成本更快查询结果只需较低存储成本
数据质量可作为重要事实依据的高度监管数据任何可以或无法进行监管的数据(例如原始数据
用户业务分析师数据科学家、数据开发人员和业务分析师(使用监管数据)
分析批处理报告、BI和可视化机器学习、询分析、数据发现和分析

3)湖仓一体化

  • Data Lakehouse (湖仓一体)是新出现的一种数据架构,它同时吸收了数据仓库和数据湖的优势,数据分析师和数据科学家可以在同一个数据存储中对数据进行操作,同时它也能为公司进行数据治理带来更多的便利性。
  • LakeHouse使用新的系统设计:直接在用于数据湖的低成本存储上实现与数据仓库中类似的数据结构和数据管理功能。

九、源码编译

wget https://dlcdn.apache.org/hudi/0.12.0/hudi-0.12.0.src.tgz
tar -xf hudi-0.12.0.src.tgz ; cd cd hudi-0.12.0
# mvn clean package -DskipTests
mvn clean package -DskipTests -DskipITs -Dspark3.2 -Dscala-2.12
复制代码

编译好的Hudi 包下载地址:

链接:pan.baidu.com/s/15qKm1kW1…
提取码:ihhb

新一代流式数据湖平台 Apache Hudi介绍与源码编译就先到这里了,有疑问的小伙伴欢迎给我留言,后续会持续更新【云原生+大数据】相关的文章,请小伙伴耐心等待~

基于Apache Hudi新一代数据湖实践 近期,科杰科技湖仓一体智能平台keendata lakehouse成功通过全国首批云原生数据湖评测,平台在存储能力、计算能力、安全能力、数据管理能力、湖应用能力、兼容能力、高可用能力等方面均获得权威认可!... 阅读详情

相关推荐

流式数据湖存储技术,Apache Paimon是什么?

是一项流式数据湖存储技术,可以为用户提供高吞吐、低延迟的数据摄入、流式订阅以及实时查询能力。Paimon 采用开放的数据格式和技术理念,可以与 Apache Flink / Spark / Trino 等诸多业界主流计算引擎进行对接,共同推进 Streaming Lakehouse 架构的普及和发展。

一个写湿的程序猿 2万+

数据湖-hudi概述

数据湖是一个集中式存储库,允许您以任意规模存储所有结构化和非结构化数据。您可以按原样存储数据(无需先对数据进行结构化处理),并运行不同类型的分析 – 从控制面板和可视化到大数据处理、实时分析和机器学习,以指导做出更好的决策。

懒猫的脚印 2万+

通过Apache Hudi和Alluxio建设高性能数据湖

T3出行的杨华和张永旭描述了他们数据湖架构的发展。该架构使用了众多开源技术,包括Apache Hudi和Alluxio。在本文中,您将看到我们如何使用Hudi和Alluxio将数据摄取时间缩短一半。此外,数据分析人员如何使用Presto、Hudi和Alluxio让查询速度提高了10倍。我们基于数据编排为数据管道的多个阶段(包括提取和分析)构建了数据湖。 1.T3出行数据湖总览 T3出行当前还处于业务扩张期,在构建数据湖之前不同的业务线,会选择不同的存储系统、传输工具以及处理框架,从而出现了严重的数据孤岛使得

xleesf 1271

Hudi学习一:Hudi简介

数据湖-Hudi学习

NC_NE的博客 3万+

802.11ax 的OFDMA资源分配详解

802.11ax 引入的最重要的技术就是OFDMA。OFDMA中引入了RU(资源块)概念,也就是20Mhz/40Mhz/80Mhz/160Mhz的带宽可以切割成不同尺寸的RU,分配给不同的用户使用,这样就大大提高了频谱资源的利用率。 常见的RU尺寸有26/52/102/242/484/996,单位是子载波,每个子载波是78.125Khz,这样20Mhz的带宽可以划分为如下图所示的不同RU大小。 按照11ax规范的要求,上下行的数据传输都可以由AP来统一调度,这样上下行的OFDM...

weixin_43408952的博客 1万+

ArduSub程序学习(1)——ardupilot框架整理

AP_HAL层(硬件抽象层)是我们制作 ArduPilot 的方式可移植到许多不同的平台。有一个顶级AP_HAL libraries/AP_HAL,用于定义代码其余部分的接口 有针对具体的板子特性,然后就有了AP_HAL_XXX 子目录,例如,AP_HAL_AVR 用于基于 AVR 的 开发板,AP_HAL_PX4用于 Pixhawk 开发板和 AP_HAL_Linux 基于 Linux 开发板。工具目录tools directories工具目录是杂项支持目录。

weixin_49839886的博客 2812

大数据之数据湖Apache Hudi

上图中采用时间(小时)作为分区字段,从 10:00 开始陆续产生各种 commits,10:20 来了一条 9:00 的数据,该数据仍然可以落到 9:00 对应的分区,通过 timeline 直接消费 10:00 之后的增量更新(只消费有新 commits 的 group),那么这条延迟的数据仍然可以被消费到。因为流式引擎不会等到所有数据到齐之后再开始计算,所以有一个 watermark 的概念,当数据的时间小于 watermark 时,就会被丢弃,这样是无法对数据完整度有一个绝对的报障。

happy_king_zi的博客 3653

高通Camera IFE时钟配置

高通Camera IFE时钟配置中的minHorizontalBlanking和minVerticalBlanking配置计算方法

一个懒癌的驱动工程师的随笔分享 6167

大数据Hadoop之——Apache Hudi 数据湖实战操作(Spark,Flink与Hudi整合)

简称Hudi,是一个流式数据湖平台,支持对海量数据快速更新,内置表格式,支持事务的存储层、 一系列表服务、数据服务(开箱即用的摄取工具)以及完善的运维监控工具,它可以以极低的延迟将数据快速存储到HDFS或云存储(S3)的工具,最主要的特点支持记录级别的插入更新(Upsert)和删除,同时还支持增量查询。大数据Hadoop之——新一代流式数据湖平台 Apache Hudi。

匠人精神,持之以恒! 2703

拆开华为BBU5900,看看5G基站的大脑里到底装了啥?

本文深度拆解华为BBU5900,揭示5G基站核心处理单元的硬件架构与设计哲学。通过详细解析模块化设计、智能电源系统和动态散热方案,展现其支撑千兆速率、毫秒级时延的技术奥秘,为5G网络部署提供实用参考。

weixin_31456563的博客 561

史上最强量化工具库 Ta-Lib 从入门到精通,一篇文章就够了!

Ta-Lib 提供的 13 个关键指标,并配上详细的代码示例,确保你看完就能直接上手!🔥。

奔跑的蜗牛 9919

大数据Hadoop之——Apache Hudi 数据湖实战操作(FlinkCDC)

Hudi 是一个流式数据湖平台大数据Hadoop之——新一代流式数据湖平台 Apache Hudi大数据Hadoop之——Apache Hudi 数据湖实战操作(Spark,Flink与Hudi整合)数据处理:计算引擎,例如:flink、spark等。数据存储:HDFS、云存储、AWS S3、对象存储等。数据管理数据查询:查询引擎,例如:Spark、Trino(Presto)、Hive、Starrocks(Doris)等。

匠人精神,持之以恒! 4314

TensorFlow_PyTorch实战:构建AI人工智能回归模型

回归分析是机器学习的核心任务之一,用于预测连续型目标变量(如房价、股票价格、用户留存时间等)。基础线性回归模型的数学原理与代码实现多项式回归模型的过拟合处理与正则化技巧自定义数据集加载与数据预处理流程动态图(PyTorch)与静态图(TensorFlow)的编程范式对比模型评估指标与可视化分析方法核心概念:对比两大框架的架构设计,解析回归模型核心组件数学原理:推导线性回归的假设函数、损失函数及优化算法算法实现:提供TensorFlow和PyTorch的完整代码示例项目实战。

AI天才研究院 1429

Apache Hudi 数据湖概述

前言 介绍本文之前,先给大家说一些简单的大数据概念。在大数据体系中,我们常用的存储是 HDFS(Hadoop Distributed File System),常用的计算是 map-reduce、spark、flink。对于 HDFS(Hadoop Distributed File System),是一个分布式的文件系统,数据平台的所有数据都存储在里面,最佳的使用实践是:一次写入,多次读取。所以大数据的计算基本上都是批处理计算(对有界的、确定数据范围的数据进行计算,不具备实时性),也就是 T-1 的计算,T

苏苏爱自由 3780

高通平台 5G RF调试总结

目录: 1.QRCT4的使用 2.RFC配置 3.5G CA 配置概括 4.RFPD 运行及错误分析 5.CA吞吐率问题分析

嘿v小米的博客 9678

【深度学习新浪潮】气候预测模型的研发进展一览(2025年版)

模型类型核心优势适用场景不足ARIMA(统计模型)简单高效、可解释性强短期单变量预测非线性、长时依赖建模差随机森林(机器学习)多特征融合、抗噪声中短期多因素预测空间相关性、时序趋势捕捉弱LSTM(深度学习)长时依赖建模、端到端中长期时序预测物理一致性差、数据需求量大物理知情AI物理规律约束、高可靠性极端天气、长期气候变化模型复杂、计算成本高。

专注:太空算力、AI infra、异构调度、大模型成本工程 528

数据湖07:Apache Hudi原理和功能概述

Hudi是Uber公司开源的数据湖架构,数据湖架构是近些年出现的一种新的技术架构,主要是解决目前大数据中Hive储存的一些痛点。HUDI的名字来自四个英文单词的缩写(Hadoop Upsert Delete and Incremental),顾名思义HUDI就是为大数据增加了修改、删除的特性。............

渡江客涂鸦板 7702

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Hudi数据湖简介

今天跟大家分享的大数据产品叫Apache Hudi,Hudi是Hadoop Updates and Incrementals的简写,它是由Uber开发并开源的Data Lakes解决方案。下面首先放一张Hudi在Hadoop体系架构中的位置图: 1. 什么是数据湖? 首先介绍一下什么是数据湖,提到数据湖,不得不说一下数据仓库。 关系型数据库大行其道的年代,随着各个业务系统增多,在应对一些分析场景时,慢慢产生了数据仓库的概念,包括之前介绍的Greenplum、Teradata等产品,都是数据仓库的代

专注数据库、大数据领域干货分享,用严谨的数据技术广交天下朋友。 5493

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【Hudi】数据湖Hudi核心概念与架构设计总结

Hudi是现在非常热门的数据湖开源方案,非常适合于搭建一个数据湖平台。 有些人认为数据湖肯定与大数据技术体系完全不一样,是两个东西,甚至认为他俩没关系。但是,你知道Hudi的全称叫啥么?就是“Hadoop Updates and Incrementals” 简单来说,就是基于Hadoop生态,支持HDFS的数据删除和增量更新的技术框架。 所以,Apache Hudi其实本就是从Hadoop生态里来的,依赖 HDFS 做底层的存储,所以可以支撑非常大规模的数据存储。...

菜鸟叔叔的博客 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

数据湖之Hudi(3):Apache Hudi 基本介绍

目录 0. 相关文章链接 1. 什么是Hudi 2. Hudi在大数据中的位置 3. Hudi的特性 4. Hudi各版本发布时间 0. 相关文章链接 大数据基础知识点 文章汇总 1. 什么是Hudi Apache Hudi(发音“hoodie”)是下一代流数据湖平台。Apache Hudi将核心仓库和数据库功能直接带到数据湖中。Hudi提供了表,事务,高效upserts /删除,高级索引,流式摄取服务,数据群集/压缩优化以及并发,同时保持数据以开源文件格式保留。 ...

yang_shibiao的博客 3925

Apache Hudi现代数据湖核心技术概论

(Hadoop Upserts Deletes and Incrementals) 是一个开源的数据湖框架,旨在提供高效的数据管理和数据更新功能。它允许在大数据平台上执行诸如数据插入、更新和删除操作,同时支持增量式数据处理。Hudi 最初由 Uber 开发,用于处理不断增长的实时数据流问题,现在已成为 Apache 顶级项目。与传统的数据湖(例如存储在 HDFS 或 Amazon S3 上的文件系统)不同,Hudi 为这些文件系统提供了事务支持、增量处理和表级别的管理能力。

hello.reader 2221

Hudi核心知识点详解——快速入门数据湖

Hudi的入门文章

Maynor的博客 1万+

数据湖 | Apache Hudi 设计与架构最强解读

点击上方蓝色字体,选择“设为星标”回复”资源“获取更多资源大数据技术与架构点击右侧关注,大数据开发领域最强公众号!大数据真好玩点击右侧关注,大数据真好玩!本文将介绍Apache Hudi...

微信搜:import_bigdata,大数据领域硬核原创作者 1427

《从零起步,开启 Hudi 大数据魔法之旅》

随着大数据的迅猛发展,企业在数据处理和存储方面面临着越来越多的挑战。Apache Hudi(Hadoop Upserts Deletes and Incrementals)作为一个现代化的大数据框架,旨在解决这些挑战,提供高效的数据湖解决方案。本文将介绍Hudi的基本概念、核心特性以及使用场景。Hudi是一个开源的分布式数据湖框架,主要用于管理和存储大规模数据集。它允许用户在数据湖中进行高效的增量数据更新、删除和查询,同时保持良好的读写性能。

m0_74453787的博客 3078

Delta Lake 和 Apache Hudi 两种数据湖产品全方面对比

Delta Lake 是数砖公司在2017年10月推出来的一个项目,并于2019年4月24日在美国旧金山召开的 Spark+AI Summit 2019 会上开源的一个存储层。它是 Da...

过往记忆大数据 4560
上一篇: Flink详解之一--概述
下一篇: 数据大体系(一)——数据纵向分层
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值