HBase(六): HBase体系结构剖析(上)

剖析大数据领域HBase的网络通信协议 HBase作为大数据领域中一款重要的分布式列式数据库,广泛应用于海量数据的存储和处理。其网络通信协议是保证各个组件之间高效、稳定通信的关键。本文的目的是深入剖析HBase的网络通信协议,详细讲解其原理、实现和应用。范围涵盖了HBase网络通信协议的核心概念、算法原理、数学模型、实际应用以及相关的开发和学习资源。本文将按照以下结构进行阐述:首先介绍核心概念与联系,包括RPC、Protobuf等在HBase网络通信中的作用和关系;接着讲解核心算法原理和具体操作步骤,通过Python代码进行详细说明; 阅读详情

 

Posted on 2016-09-10 19:37 天戈朱 阅读(3591) 评论(2) 编辑 收藏

      HBase隶属于hadoop生态系统,它参考了谷歌的BigTable建模,实现的编程语言为 Java, 建立在hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。它仅能通过主键(row key)和主键的range来检索数据,主要用来存储非结构化和半结构化的松散数据。与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。Hbase数据库中的表一般有这样的特点:

  • 大: 一个表可以有上亿行,上百万列
  • 面向列:  面向列(族)的存储和权限控制,列(族)独立检索
  • 稀疏: 对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏

目录:

  • 系统架构
  • 数据模型
  • RegionServer
  • nameSpace
  • HBase寻址

系统架构:


  • HBase采用Master/Slave架构搭建集群,由HMaster节点、HRegionServer节点、ZooKeeper集群组成,而在底层,它将数据存储于HDFS中,因而涉及到HDFS的NN、DN等,总体结构如下(注意:在hadoop(四): 本地 hbase 集群配置 Azure Blob Storage 介绍过,也可以将底层的存储配置为 Azure Blob Storage 或 Amazon Web Services),图A较清楚表达各组件之间的访问及内部实现逻辑,图B更直观表达hbase 与 hadoop hdfs 部署结构及 hadoop NN 和 HMaster 的 SPOF 解决方案
  •  
  •                                     架构图A                                                                                                架构图B
  • Client的主要功能:
    1. 使用HBase的RPC机制与HMaster和HRegionServer进行通信
    2. 对于管理类操作,Client与HMaster进行RPC
    3. 对于数据读写类操作,Client与HRegionServer进行RPC
  • Zookeeper功能:
    1. 通过选举,保证任何时候,集群中只有一个master,Master与RegionServers 启动时会向ZooKeeper注册
    2. 实时监控Region server的上线和下线信息,并实时通知给Master
    3. 存贮所有Region的寻址入口和HBase的schema和table元数据
    4. Zookeeper的引入实现HMaster主从节点的failover
    5. 详细工作原理如下图:
      1. 在HMaster和HRegionServer连接到ZooKeeper后创建Ephemeral节点,并使用Heartbeat机制维持这个节点的存活状态,如果某个Ephemeral节点失效,则HMaster会收到通知,并做相应的处理
      2. HMaster通过监听ZooKeeper中的Ephemeral节点(默认:/hbase/rs/*)来监控HRegionServer的加入和宕机
      3. 在第一个HMaster连接到ZooKeeper时会创建Ephemeral节点(默认:/hbasae/master)来表示Active的HMaster,其后加进来的HMaster则监听该Ephemeral节点,如果当前Active的HMaster宕机,则该节点消失,因而其他HMaster得到通知,而将自身转换成Active的HMaster,在变为Active的HMaster之前,它会创建在/hbase/back-masters/下创建自己的Ephemeral节点
  • HMaster功能:
    1. 管理HRegionServer,实现其负载均衡
    2. 管理和分配HRegion,比如在HRegion split时分配新的HRegion;在HRegionServer退出时迁移其内的HRegion到其他HRegionServer上
    3. 监控集群中所有HRegionServer的状态(通过Heartbeat和监听ZooKeeper中的状态)
    4. 处理schema更新请求 (创建、删除、修改Table的定义), 如下图:
  • HRegionServer功能:
    1. Region server维护Master分配给它的region,处理对这些region的IO请求
    2. Region server负责切分在运行过程中变得过大的region
  • 小结:
    1. client访问hbase上数据的过程并不需要master参与(寻址访问zookeeper,数据读写访问regione server),master仅仅维护者table和region的元数据信息,负载很低
    2. HRegion所处理的数据尽量和数据所在的DataNode在一起,实现数据的本地化

数据模型:


  • Table: 与传统关系型数据库类似,HBase以表(Table)的方式组织数据,应用程序将数据存入HBase表中
  • Row: HBase表中的行通过 RowKey 进行唯一标识,不论是数字还是字符串,最终都会转换成字段数据进行存储;HBase表中的行是按RowKey字典顺序排列
  • Column Family: HBase表由行和列共同组织,同时引入列族的概念,它将一列或多列组织在一起,HBase的列必须属于某一个列族,在创建表时只需指定表名和至少一个列族
  • Cell: 行和列的交叉点称为单元格,单元格的内容就是列的值,以二进制形式存储,同时它是版本化的
  • version: 每个cell的值可保存数据的多个版本(到底支持几个版本可在建表时指定),按时间顺序倒序排列,时间戳是64位的整数,可在写入数据时赋值,也可由RegionServer自动赋值
  • 注意:
    1. HBase没有数据类型,任何列值都被转换成字符串进行存储
    2. 与关系型数据库在创建表时需明确包含的列及类型不同,HBase表的每一行可以有不同的列
    3. 相同RowKey的插入操作被认为是同一行的操作。即相同RowKey的二次写入操作,第二次可被可为是对该行某些列的更新操作
    4. 列由列族和列名连接而成, 分隔符是冒号,如  d:Name  (d: 列族名, Name: 列名)
  • 以一个示例来说明关系型数据表和HBase表各自的解决方案(示例:博文及作者),关系型数据库表结构设计及数据如下图:
  •  
  •                (表结构设计)                                                                                       (示例数据)
  • 用HBase设计表结构如下图:
  • 存储示例数据如下:
  • 小结:
    1. HBase不支持条件查询和Order by等查询,读取记录只能按Row key(及其range)或全表扫描
    2. 在表创建时只需声明表名和至少一个列族名,每个Column Family为一个存储单元,在下节物理模型会详细介绍
    3. 在上例中设计了一个HBase表blog,该表有两个列族:article和author,但在实际应用中强烈建议使用单列族
    4. Column不用创建表时定义即可以动态新增,同一Column Family的Columns会群聚在一个存储单元上,并依Column key排序,因此设计时应将具有相同I/O特性的Column设计在一个Column Family上以提高性能。注意:这个列是可以增加和删除的,这和我们的传统数据库很大的区别。所以他适合非结构化数据
    5. HBase通过row和column确定一份数据,这份数据的值可能有多个版本,不同版本的值按照时间倒序排序,即最新的数据排在最前面,查询时默认返回最新版本。如上例中row key=1的author:nickname值有两个版本,分别为1317180070811对应的“一叶渡江”和1317180718830对应的“yedu”(对应到实际业务可以理解为在某时刻修改了nickname为yedu,但旧值仍然存在)。Timestamp默认为系统当前时间(精确到毫秒),也可以在写入数据时指定该值
    6. 每个单元格值通过4个键唯一索引,tableName+RowKey+ColumnKey+Timestamp=>value, 例如上例中{tableName=’blog’,RowKey=’1’,ColumnName=’author:nickname’,Timestamp=’ 1317180718830’}索引到的唯一值是“yedu”
    7. 存储类型
      • TableName 是字符串
      • RowKey 和 ColumnName 是二进制值(Java 类型 byte[])
      • Timestamp 是一个 64 位整数(Java 类型 long)
      • value 是一个字节数组(Java类型 byte[])

RegionServer:


  • HRegionServer一般和DN在同一台机器上运行,实现数据的本地性,如图B。HRegionServer包含多个HRegion,由WAL(HLog)、BlockCache、MemStore、HFile组成,如图A,其中图A是0.94-的架构图,图B是0.96+的新架构图
  •                                 图A                                                                                                               图B
  • WAL(Write Ahead Log):它是HDFS上的一个文件,所有写操作都会先保证将数据写入这个Log文件后,才会真正更新MemStore,最后写入HFile中
  • 采用这种模式,可以保证HRegionServer宕机后,依然可以从该Log文件中读取数据,Replay所有的操作,来保证数据的一致性
  • 一个HRegionServer只有一个WAL实例,即一个HRegionServer的所有WAL写都是串行,这当然会引起性能问题,在HBase 1.0之后,通过HBASE-5699实现了多个WAL并行写(MultiWAL),该实现采用HDFS的多个管道写,以单个HRegion为单位
  • Log文件会定期Roll出新的文件而删除旧的文件(那些已持久化到HFile中的Log可以删除)。WAL文件存储在/hbase/WALs/${HRegionServer_Name}的目录中
  • BlockCache(图B):是一个读缓存,将数据预读取到内存中,以提升读的性能
  • HBase中提供两种BlockCache的实现:默认on-heap LruBlockCache和BucketCache(通常是off-heap)。通常BucketCache的性能要差于LruBlockCache,然而由于GC的影响,LruBlockCache的延迟会变的不稳定,而BucketCache由于是自己管理BlockCache,而不需要GC,因而它的延迟通常比较稳定,这也是有些时候需要选用BucketCache的原因
  • HRegion:是一个Table中的一个Region在一个HRegionServer中的表达,是Hbase中分布式存储和负载均衡的最小单元
  • 一个Table拥有一个或多个Region,分布在一台或多台HRegionServer上
  • 一台HRegionServer包含多个HRegion,可以属于不同的Table
  • 见图A,HRegion由多个Store(HStore)构成,每个HStore对应了一个Table在这个HRegion中的一个Column Family,即每个Column Family就是一个集中的存储单元
  • HStore是HBase中存储的核心,它实现了读写HDFS功能,一个HStore由一个MemStore 和0个或多个StoreFile组成
  • MemStore:是一个写缓存(In Memory Sorted Buffer),所有数据的写在完成WAL日志写后,会 写入MemStore中,由MemStore根据一定的算法将数据Flush到底层HDFS文件中(HFile),通常每个HRegion中的每个 Column Family有一个自己的MemStore
  • HFile(StoreFile): 用于存储HBase的数据(Cell/KeyValue)。在HFile中的数据是按RowKey、Column Family、Column排序,对相同的Cell(即这三个值都一样),则按timestamp倒序排列
  • 小结:
    1. Table中的所有行都按照row key的字典序排列,Table 在行的方向上分割为多个Hregion,如下图A
    2. region按大小分割的,每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,Hregion就会等分会两个新的Hregion,如下图B
    3.                           
    4.                                    图A                                                                      图B
    5. HRegion是Hbase中分布式存储和负载均衡的最小单元。最小单元就表示不同的Hregion可以分布在不同的HRegion server上。但一个Hregion是不会拆分到多个server上的,如下图
    6. HRegion虽然是分布式存储的最小单元,但并不是存储的最小单元。事实上,HRegion由一个或者多个Store组成,每个store保存一个columns family,每个Strore又由一个memStore和0至多个StoreFile组成,如下图,说明:StoreFile以HFile格式保存在HDFS上

nameSpace:


  • 在HBase中,namespace命名空间指对一组表的逻辑分组,类似RDBMS中的database,方便对表在业务上划分。
  • Apache HBase从0.98.0, 0.95.2两个版本开始支持namespace级别的授权操作,HBase全局管理员可以创建、修改和回收namespace的授权
  • HBase系统默认定义了两个缺省的namespace,见如下图的目录结构:
    1. hbase:系统内建表,包括namespace和meta表
    2. default:用户建表时未指定namespace的表都创建在此
  •   

HBase寻址:


  • 本节主要讨论的问题:Client访问用户数据时如何找到某个row key所在的region?
  • 0.94- 版本 Client访问用户数据之前需要首先访问zookeeper,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据的位置去访问,中间需要多次网络操作,如下图:
  • 0.96+ 删除了root 表,改为zookeeper里面的文件,如下图 A, 以读为例,寻址示意图如B
  •          
  •                图A                                                                                                 图B
  • 思考:如果root表信息存储在zookeeper文件,集群重建后,文件是如何还原?

 

分类: HBase

标签: HBase

好文要顶 关注我 收藏该文  

从 Hive 数仓出发,全面剖析 StarRocks、MySQL、HBase 的使用场景与区别 本文围绕Hive数仓,对比分析StarRocks、MySQL和HBase的核心特点与适用场景。Hive作为离线数仓底座,适合批处理计算;StarRocks是高性能实时分析引擎,支持秒级查询;MySQL适用于OLTP事务处理;HBase则擅长高并发海量数据存储。文章提出混合架构方案:MySQL作为业务源,Hive处理离线数据,StarRocks支撑实时分析,HBase存储行为日志等。通过合理组合这些组件,可构建高效稳定的数仓系统,满足不同业务场景需求。 阅读详情

相关推荐

HBase 原理深度剖析:从数据模型到存储机制

本文深入剖析了HBase分布式数据库的核心原理,主要包含以下内容:1) HBase是基于HDFS的列式存储NoSQL数据库,适用于海量数据随机读写场景;2) 详细解析HBase表结构设计,包括RowKey、列族等核心概念;3) 阐述HBase架构组成,包括HMaster、RegionServer等组件协作机制;4) 重点分析数据写入流程,采用WAL日志和MemStore内存缓冲的LSM-Tree存储模型。文章通过图表直观展示了HBase的表结构、整体架构和数据存储机制,帮助读者全面理解HBase的工作原理。

yitian881112的专栏 962

HBase 的基本架构 详解

HBase 是一个分布式的、面向列的数据库,构建在 HDFS(Hadoop Distributed File System)之上,提供高效的随机读写操作。为了全面理解 HBase 的基础架构,需要从逻辑架构、物理存储、组件之间的交互、数据管理和底层设计出发,结合源码进行深入剖析。

goTsHgo的博客 2220

Apache HBase安全

当使用org.apache.hadoop.hbase.security.visibility.VisibilityClient类提供的addLabels(conf, labels)方法创建标签并通过扫描或获取在授权中传递标签时,标签可以包含UTF-8字符,以及可见标签中通常使用的逻辑运算符以及常规Java符号,而不需要任何转义方法。如果没有提供足够的文件系统保护(授权和身份验证),HBase级别授权控制(ACL,可见性标签等)就没有意义,因为用户可以随时访问文件系统中的数据。标签存储在HFiles自身中。

悦分享 2015

HBase概述

简要的介绍了HBase的基本概念

凉茶铺的博客 2424

手把手教你设计T型和Π型衰减器:从理论计算到实际搭建(含误差分析)

本文详细介绍了T型和Π型衰减器的设计方法,从理论计算到实际搭建,包括电阻值推导、元件选择技巧及误差分析。通过实例演示如何设计50Ω系统中的10dB衰减器,并提供了高频应用和优化策略,帮助电子工程师掌握阻抗匹配与信号衰减的核心技术。

weixin_33737774的博客 401

富斯遥控器-ros机器人控制

富斯遥控器-ros机器人手柄控制

zkh7758的博客 1703

HBase基础概念小结

一、什么是HBase? hbase是bigtable得开源java版本。是建立在hdfs之上,提供高可靠、高性能、列存储、可伸缩、实时读写nosql得数据库系统。 它介于nosql和RDBMS之间,仅能通过主键(row key)和主键得range来检索数据,仅支持单行事务,当然后面可以和hive做集合配合来实现多表join等复杂得操作。 HBase表的特点: 1.一个表可以有上十亿行,...

bikeSinger的博客 1347

使用 Java + PaddleOCR 实现表格识别,支持导出 HTML 和 Excel(附源码)

使用Java+PaddleOCR快速搭建表格识别系统,无需处理底层模型细节。系统支持表格结构识别和内容识别,可将图片转换为可编辑表格格式。文章提供了完整的实现流程,包括Maven依赖引入、模型下载(包含检测、识别、分类和表格结构模型)及参数配置说明。SmartJavaAI支持多种高性能模型选择,适用于不同应用场景,帮助开发者快速实现表格识别功能。

deng775747758的博客 1476

深入剖析HBase架构

HBase核心机制与优化策略摘要 HBase采用分布式架构,通过RegionServer集群处理读写请求,关键组件包括客户端、ZooKeeper、HMaster、RegionServer、WAL、MemStore和HFile。读写流程中,客户端先通过ZooKeeper定位目标Region位置,然后直接与对应RegionServer交互。写操作需先写WAL确保可靠性再写入MemStore;读操作依次查询MemStore、BlockCache和HFile。为提升性能,HBase采用BloomFilter、Blo

lrj41781196的博客 1566

企业知识库AI助手的权限管理架构:如何实现细粒度控制?

在展开架构设计前,我们需要先明确“细粒度权限”的核心定义,并理解它对AI助手的特殊意义。权限管理的“粒度”,本质是权限控制的精准程度。维度粗粒度权限细粒度权限资源范围entire document(整个文档)field/paragraph(字段/段落)操作类型read/write(读/写)generate_summary/download/export(生成摘要/下载/导出)上下文约束无(静态权限)time/ip/device(时间/IP/设备)适用场景简单系统(如内部wiki)

大数据洞察的博客 1043

道路缺陷检测实战指南:基于YOLOv11的深度学习系统从搭建到落地

道路缺陷检测项目的每一步,都是“理论→实践→反思→优化”的成长循环。当你看到自己开发的系统能精准识别出道路上的每一处裂缝、每一个坑洼时,那种“技术解决真实问题”的成就感,会让你明白深度学习不止是论文里的公式,更是改变行业的工具。如果过程中遇到模型不收敛、界面功能异常等问题,不妨把问题拆解成“数据是否标注准确?”“模型参数是否合理?”“界面逻辑是否有漏洞?”等小问题逐一排查。记住,每解决一个问题,你就离“能独立落地AI项目的工程师”更近一步。

LXY_LOVE36的博客 172

深入HBase:原理剖析与优化实战

摘要:本文深入探讨了HBase分布式NoSQL数据库的原理、架构及优化实践。HBase基于HDFS构建,具有高可靠性、大规模数据处理和实时读写能力,广泛应用于社交媒体、物联网和金融等领域。文章详细解析了HBase的核心组件(HMaster、RegionServer等)、数据模型和存储机制,并通过实际案例展示了其在用户行为分析、设备监控和交易记录存储中的价值。重点介绍了表结构设计、内存配置、压缩技术等优化策略,使读写性能提升数倍。研究表明,针对业务特点合理配置HBase参数,能显著提高大数据处理效率。

东境物语 2万+

Synthesia技术浅析(四):自然语言处理

Synthesia 的自然语言处理(NLP)模块是其核心技术之一,涵盖了文本转语音(TTS)、情感分析以及多语言支持等多个方面。

m0_75253143的博客 1167

hbase-BucketCache剖析

虽说hbase适合写多读少,但是hbase的读性能也是非常强悍的,hbase有如此好的读性能其中少不了BlockCache。BlockCache是regionserver级别的一种缓存,目前有三种实现方式:LruBlockCache、SlabCache和BucketCache,本文只对BucketCache的实现方式进行剖析。本文从BucketCache的内存模型、读写流程以及使用配置三方面进行说明。 BucketCache可以指定三种不同的存储介质:onHeap(java堆上内存)、of...

zfs_sir的博客 2033

WRFDA如何读取风云四号A 星的GIIRS数据?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1031

dify制作的工作流如何通过API调用

本文介绍了如何通过Python程序调用Dify工作流API实现数据处理功能。文章详细展示了workflow和chatflow的调用方法,包括参数设置和结果输出,并提供了一个完整的API调用工具代码示例。该工具可实现文本处理、成果查重、关键词生成等功能,支持通过Python脚本或Postman进行调用。核心代码包含API请求函数和批量处理函数,通过HTTP请求与Dify服务端交互,实现自动化数据处理流程。

hhue2007的专栏 935

Sqoop+HBase深度集成:两种导入模式原理剖析与实战

标准模式:通过HBase API逐条写入,适合小数据量和实时场景,但性能受限BulkLoad模式:生成HFile直接加载到HDFS,是生产环境海量数据导入的首选,速度提升可达10倍以上(注意兼容性)掌握这两种模式,你就能在面对不同量级的数据迁移任务时,游刃有余地选择最优方案。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1936

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Hbase基本原理剖析

每个Region包含了表中一段RowKey区间范围内的数据,HBase的一张数据表开始只包含一个Region,随着表中数据的增多,当一个Region的大小达到容量上限后会分裂成两个Region。为了提升数据操作的效率,HBase Client会在内存中缓存“hbase:meta”和用户表Region的信息,当应用程序发起下一次数据操作时,HBase Client会首先从内存中获取这些信息;上图 RegionServer的数据存储结构中Region的各部分的说明如表 Region结构说明所示。

hello.reader 2万+

深度学习工具包 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")

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

HBase优化与LSM树深度剖析技术博客

HBase基于LSM树实现了高效的写入与扩展能力,但优化需结合实际业务场景,合理调参、监控与建模。掌握其底层原理,有助于系统性提升HBase集群性能与稳定性。

IT技术学习与工作笔记分享 926

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

HBase架构深入剖析

一. 客户端client List item 整个HBase 集群的访问入口 ; 使用HBase RPC 机制 与 HMaster 和 HRegionServer 进行通信; 与HMaster 进行通信进行管理类操作; 与HRegionServer 进行数据读写类操作; 包含访问HBase 的接口 并维护Cache 来加快对于HBase 的访问 二.协调工具zookeeper 保证任何时候...

u012957549的博客 1651

HBase(七): HBase体系结构剖析(下)

HBase(七): HBase体系结构剖析(下) Posted on 2016-09-10 22:18 天戈朱 阅读(1019) 评论(0) 编辑 收藏 目录: write Compaction splite read Write: 当客户端发起一个Put请求时,首先根据RowKey寻址,从hbase:meta表中查出该Put数据最终需要去的HRegionServer 客户端将Pu...

大JAVA解决方案 316

HBase存储原理剖析笔记

慕课网《HBase 存储原理剖析》学习总结     说明:本文部分内容来自https://www.imooc.com/article/details/id/38969     学习视频:https://www.imooc.com/learn/996     视频案例演示源码:https://github.com/wind-free/springboot-HBaseDemo1....

dawf19439的博客 296

Hbase整体架构剖析

概念 Hbase是一个开源的、面向列的、稀疏的、适合存储海量非结构化和半结构化的、具备高性能、高可靠性、可灵活扩展的、支持实时数据读写的分布式数据储存系统。 典型特征: 大表:一个表可以有上亿行,上百万个列; 面向列:面向列(族)的存储、检索和权限控制; 稀疏:表中为空(null)的列不占用存储空间。 数据类型单一:HBase 中的数据类型只有一种String 无模式:每...

youngflycode的博客 3200

hbase-put流程剖析

众所周知hbase是一个写性能非常优越的NOSQL,今天从源码中分析一下put操作到了region中是如何进行处理的。 region中处理put请求的大致流程如下图所示: 1)检查region状态并尝试获取region中读写锁中的读锁,1.检查读操作时是否可读。2.检查region是否rit状态,是则不允许read、split和merge操作。3.获取region读写...

zfs_sir的博客 1041

hbase-memstore flush剖析

memstore是hbase中一个非常重要的组件,对于hbase的读写操作的性能起到举足轻重的作用,下面讲从memstore概述、memstore flush触发条件、memstore flush流程、memstore flush流程源码四个方面对memstore进行说明 memstore概述 一个RegionServer上对应多个Region,一个Region对应多个Store,一个Store对应一个Memstore和多个HFile,几者之间的关系如下图 Regionserve...

zfs_sir的博客 507
上一篇: HBase(七): HBase体系结构剖析(下)
下一篇: 关于Hbase客户端和regionserver之间的单连接
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值