HBase(分布式、面向列、非结构化数据存储,基础框架,设计和操作)总结

2023-11-04

1. HBase 介绍

  • 分布式、面向列开源数据库

  • Big Table开源实现

  • 适合非结构化数据的存储

  • PB级别数据

  • 可以支撑在线业务

  • 分布式系统特点 :易于扩展,支持动态伸缩,并发数据处理

2. 面向列数据库

2.1 HBase 与 传统关系数据库的区别

HBase 关系型数据库
数据库大小 PB级别 GB TB
数据类型 Bytes 丰富的数据类型
事务支持 ACID只支持单个Row级别 全面的ACID支持, 对Row和表
索引 只支持Row-key 支持
吞吐量 百万写入/秒 数千写入/秒
  • 关系型数据库中数据示例
ID FILE NAME FILE PATH FILE TYPE FILE SIZE CREATOR
1 file1.txt /home txt 1024 tom
2 file2.txt /home/pics jpg 5032 jerry
  • 同样数据保存到列式数据库中 列族:列标识符:值
RowKey FILE INFO SAVE INFO
1 file_info:name:file1.txt
file_info:type:txt
file_info:size:1024
path:/home/pics creator:Jerry
2 file_info:name:file2.jpg
file_info:type:jpg
file_info:size:5032
path:/home creator:Tom
  • 行数据库&列数据库存储方式比较

在这里插入图片描述

  • 关系型数据库:行式存储 每一行数据都是连续的 所有的记录都放到一个连续的存储空间中

  • 列数据库: 列式存储 每一列对应一个文件 不同列并不对应连续的存储空间

  • 结构化数据 V.S. 非结构化数据

    • 结构化数据
      • 预定义的数据模型 模型一旦确定不会经常变化(表结构不会频繁调整)
    • 非结构化数据
      • 没有预定义数据模型
      • 模型不规则 不完整
      • 文本 图片 视频 音频

2.2 Hive 和 Hbase区别

  • hive hbase 共同点
    • 都可以处理海量数据
    • 文件都是保存到hdfs
  • hive 和 hbase不同
    • hbase计算不是通过mapreduce实现的 自己实现的CRUD(增删改查)功能
    • hive 通过mapreduce实现 数据查询的
    • hbase 可以有集群 集群的管理是通过zookeeper实现
    • hive 只能做离线计算
    • hbase 提供对数据的随机实时读/写访问功能
  • HBase 对事务的支持 只支持行级别的事务
  • CAP定理
    • C consistency 一致性 所有节点在同一时间具有相同的数据
    • A availability 可用性 保证每个请求不管成功或失败都有响应,但不保证获取的数据的正确性
    • P partition tolerance 分区容错性 系统中任意信息的丢失或失败不会影响系统的运行,
    • 分区容错性 分布式系统都要有的特性,任何时候都要能提供服务 P保证
    • HBase CP系统 强一致性

2.3 Hbase 和 传统关系型数据库区别

  • 创建HBase表的时候只需要指定表名 和 列族

  • 每一个行当中 只需要列族相同就可以了 至于每个列族中的 key:value key可以完全不同

3. Hbase 数据模型

  • NameSpace 对应 关系型数据库 database
  • 表(table):用于存储管理数据,具有稀疏的、面向列的特点。
  • 行 (row): 每一行都对应一个row key 行键 Hbase有索引但是只是在行键 rowkey有索引
  • 列 Column family 和 Column qualifier 组成
  • 列族(Column Family)保存的就是 键值对集合 key:value
  • 列修饰符(Column Qualifier) 就是key 对应关系型数据库的列
  • 时间戳(TimeStamp):是列的一个属性
  • 区域(Region):HBase自动把表水平划分成的多个区域,划分的区域随着数据的增大而增多。
  • Hbase支持对行级别的 操作保证完全的 ACID
    • A 原子性 整个事务中的所有操作,要么全部完成,要么全部不完成
    • C 一致性 事物必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少
    • I 隔离性 串行化或者序列化 隔离状态执行事务
    • D 持久性 事务完成后,事务对数据库所做的更改持久保存在数据库中,不会回滚

4. HBase 基础架构

在这里插入图片描述

  • Client

    • 与Zookeeper 通信
    • Client与HMaster进行通信进行管理类操作;
    • Client与HRegionServer进行数据读写类操作。
  • Zookeeper

    • 保证HMaster有一个活着
    • HRegionServer HMaster地址存储
    • 监控Region Server状态 将Region Server信息通知HMaster
    • 元数据存储
  • HMaster

    • Region server分配region
    • 负责region server的负载均衡
    • 发现失效的region serve并重新分配其上的region;
    • HDFS上的垃圾文件回收;
    • 处理用户对表的增删改查操作。
  • HRegionServer

    • HBase中最核心的模块,主要负责响应用户I/O请求,向HDFS文件系统中读写数据
    • 维护Master分配给它的region,处理对这些region的IO请求
    • HRegionServer管理一系列HRegion对象
  • HRegion

    • 一个表最开始存储的时候,是一个region
    • 一个Region中会有个多个store,每个store用来存储一个列簇
    • region会随着插入的数据越来越多,会进行拆分。默认大小是10G一个
  • HStore

    • HBase存储的核心,由MemStoreStoreFile组成。
    • 每一个column family 对应了一个HStore
    • 用户写入数据的流程为:client访问ZK, ZK返回RegionServer地址-> client访问RegionServer写入数据 -> 数据存入MemStore,一直到MemStore满 -> Flush成StoreFile
  • HLog

    在分布式系统环境中,无法避免系统出错或者宕机,一旦HRegionServer意外退出,MemStore中的内存数据就会丢失,引入HLog就是防止这种情况。

5. HBase的安装

  • 下载安装包 http://archive.cloudera.com/cdh5/cdh/5/hbase-1.2.0-cdh5.7.0.tar.gz

  • 配置伪分布式环境

    • 环境变量配置

      export HBASE_HOME=/usr/local/development/hbase-1.2.4
      export PATH=$HBASE_HOME/bin:$PATH
      
    • 配置hbase-env.sh

      export JAVA_HOME=/usr/local/development/jdk1.7.0_15
      export HBASE_MANAGES_ZK=false  --如果你是使用hbase自带的zookeeper就是true,如果使用自己的zk就是false
      
    • 配置hbase-site.xml

      <property>
            <name>hbase.rootdir</name>  --hbase持久保存的目录
            <value>hdfs://hadoop001:8020/opt/hbase</value>   
      </property>
      <property>
            <name>hbase.cluster.distributed</name>  --是否是分布式
            <value>true</value>
      </property>
      <property>     
                <name>hbase.zookeeper.property.clientPort</name>    --指定要连接zk的端口
                <value>2181</value>    
      </property>    
      <property>        
                <name>hbase.zookeeper.property.dataDir</name>            <value>/home/hadoop/app/hbase/zkData</value>    
      </property>          
      
    • 启动hbase(启动的hbase的时候要保证hadoop集群已经启动)

      /hbase/bin/start-hbase.sh
      
    • 输入hbase shell(进入shell命令行)

6. HBase shell

名称 命令表达式
创建表 create ‘表名’, ‘列族名1’,‘列族名2’,‘列族名n’
添加记录 put ‘表名’,‘行名’,‘列名:’,'值
查看记录 get ‘表名’,‘行名’
查看表中的记录总数 count ‘表名’
删除记录 delete ‘表名’, ‘行名’,‘列名’
删除一张表 第一步 disable ‘表名’ 第二步 drop ‘表名’
查看所有记录 scan “表名称”
查看指定表指定列所有数据 scan ‘表名’ ,{COLUMNS=>‘列族名:列名’}
更新记录 重写覆盖
  • 创建表
create 'user','base_info'
  • 删除表
disable 'user'
drop 'user'
  • 创建名称空间
create_namespace 'test'
  • 展示现有名称空间
list_namespace
  • 创建表的时候添加namespace
create 'test:user','base_info'
  • 显示某个名称空间下有哪些表
list_namespace_tables 'test'
  • 插入数据

    put ‘表名’,‘rowkey的值’,’列族:列标识符‘,’值‘

put 'user','rowkey_10','base_info:username','Tom'
put 'user','rowkey_10','base_info:birthday','2014-07-10'
put 'user','rowkey_10','base_info:sex','1'
put 'user','rowkey_10','base_info:address','Tokyo'

put 'user','rowkey_16','base_info:username','Mike'
put 'user','rowkey_16','base_info:birthday','2014-07-10'
put 'user','rowkey_16','base_info:sex','1'
put 'user','rowkey_16','base_info:address','beijing'
  • 查询表中的所有数据
scan 'user'
  • 查询某个rowkey的数据
get 'user','rowkey_16'
  • 查询某个列簇的数据
get 'user','rowkey_16','base_info'
get 'user','rowkey_16','base_info:username'
get 'user', 'rowkey_16', {COLUMN => ['base_info:username','base_info:sex']}
  • 删除表中的数据
delete 'user', 'rowkey_16', 'base_info:username'
  • 清空数据
truncate 'user'
  • 操作列簇
alter 'user', NAME => 'f2'
alter 'user', 'delete' => 'f2'
  • HBase 追加型数据库 会保留多个版本数据
  desc 'user'
  Table user is ENABLED
  user
  COLUMN FAMILIES DESCRIPTION
  {NAME => 'base_info', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_B
  HE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MI
  ER => 'NONE', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOM
  se', COMPRESSION => 'NONE', BLOCKCACHE => 'false', BLOCKSIZE => '65536'}
  • VERSIONS=>'1’说明最多可以显示一个版本 修改数据
  put 'user','rowkey_10','base_info:username','Tom'
  • 指定显示多个版本
  get 'user','rowkey_10',{COLUMN=>'base_info:username',VERSIONS=>2}
  • 修改可以显示的版本数量
  alter 'user',NAME=>'base_info',VERSIONS=>10

可以通过HbaseUi界面查看表的信息

端口60010打不开的情况,是因为hbase 1.0 以后的版本,需要自己手动配置,在文件 hbase-site

  <property>  
  <name>hbase.master.info.port</name>  
  <value>60010</value>  
  </property> 

7. HappyBase操作HBase

 import happybase

  hostname = '192.168.19.188'
  table_name = 'users'
  column_family = 'cf'
  row_key = 'row_1'

  conn = happybase.Connection(hostname)

  def show_tables():
      print('show all tables now')
      tables =  conn.tables()
      for t in tables:
          print t

  def create_table(table_name, column_family):
      print('create table %s' % table_name)
      conn.create_table(table_name, {column_family:dict()})


  def show_rows(table, row_keys=None):
      if row_keys:
          print('show value of row named %s' % row_keys)
          if len(row_keys) == 1:
              print table.row(row_keys[0])
          else:
              print table.rows(row_keys)
      else:
          print('show all row values of table named %s' % table.name)
          for key, value in table.scan():
              print key, value

  def put_row(table, column_family, row_key, value):
      print('insert one row to hbase')
      # column_family:qualifier:value
      # column_qualifier = name 
      table.put(row_key, {'%s:name' % column_family:'name_%s' % value})

  def put_rows(table, column_family, row_lines=30):
      print('insert rows to hbase now')
      for i in range(row_lines):
          put_row(table, column_family, 'row_%s' % i, i)

  def delete_row(table, row_key, column_family=None, keys=None):
      if keys:
          print('delete keys:%s from row_key:%s' % (keys, row_key))
          key_list = ['%s:%s' % (column_family, key) for key in keys]
          table.delete(row_key, key_list)
      else:
          print('delete row(column_family:) from hbase')
          table.delete(row_key)

  def delete_table(table_name):
      pretty_print('delete table %s now.' % table_name)
      conn.delete_table(table_name, True)

  def main():
      table = conn.table(table_name)
      show_rows(table)
      put_rows(table, column_family)
      show_rows(table)
      # 更新操作
      # put_row(table, column_family, row_key, 'xiaoh.me')
      # show_rows(table, [row_key])
      # 删除数据
      # delete_row(table, row_key)
      # show_rows(table, [row_key])
      # delete_row(table, row_key, column_family, ['name'])
      # show_rows(table, [row_key])
      # delete_table(table_name)

  if __name__ == "__main__":
      main()
  • 建立连接 conn = happybase.Connection(hostname)
  • 创建表 conn.create_table(table_name,{column_family,dict()})
  • 查看所有表 table_list = conn.tables()
  • 连接表 table = conn.table(table_name)
  • 查看表中数据 table.row(column_qualifier) table.rows(column_qualifiers)
  • 遍历表中数据 for key,value in table.scan(): print key,value
  • 插入数据 table.put(row_key,{’’%s:%s:%s’ %column_family,%column_qualifier,%value})
  • 删除表中数据 table.delete(row_key,column_qualifier)
  • 删除表 conn.delete_table(table_name)

8. HBase表设计

  • DDI 目的是为了克服HBase架构上的缺陷(join繁琐 只有row key索引等)

    • Denormalization (反规范化, 解决join麻烦的问题)
    • Duplication (数据冗余)
    • Intelligent keys(通过row key设计实现 索引 排序对读写优化)
  • 设计HBase表时需要注意的特点

    • HBase中表的索引是通过rowkey实现的
    • 在表中是通过Row key的字典顺序来对数据进行排序的, 表中Region的划分通过起始Rowkey和结束Rowkey来决定的
    • 所有存储在HBase中的数据都是二进制字节, 没有数据类型
    • 原子性只在行内保证, HBase表中没有多行事务
    • 列族(Column Family)在表创建之前就要定义好
    • **列族中的列标识(Column Qualifier)**可以在表创建后动态插入数据的时候添加
    • 不同的column family保存在不同的文件中。

9. HBase表设计案例:社交应用互粉信息表

  • 设计表保存应用中用户互粉的信息

    • 读场景:
      • 某用户都关注了哪些用户
      • 用户A有没有关注用户B
      • 谁关注了用户A
    • 写场景
      • 用户关注了某个用户
      • 用户取消关注了某个用户
  • 设计

    • 列名 user_id
      在这里插入图片描述
  • 最终设计(DDI)

    • 解决谁关注了用户A问题
      • ① 设计一张新表, 里面保存某个用户和他的粉丝
      • ② 在同一张表中同时记录粉丝列表的和用户关注的列表, 并通过Rowkey来区分
        • 01_userid: 用户关注列表
        • 02_userid: 粉丝列表
      • 上两种设计方案的问题(事务)
  • 案例总结

    • Rowkey是HBase表结构设计中很重要的环节, 直接影响到HBase的效率和性能
    • HBase的表结构比传统关系型数据库更灵活, 能存储任何二进制数据,无需考虑数据类型
    • 利用列标识(Column Qualifier)来存储数据
    • 衡量设计好坏的简单标准 是否会全表查询
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HBase(分布式、面向列、非结构化数据存储,基础框架,设计和操作)总结 的相关文章

  • 2024 人工智能与大数据专业毕业设计(论文)选题指导

    目录 前言 毕设选题 选题迷茫 选题的重要性 更多选题指导 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生
  • 面试官问,如何在十亿级别用户中检查用户名是否存在?

    面试官问 如何在十亿级别用户中检查用户名是否存在 前言 不知道大家有没有留意过 在使用一些app注册的时候 提示你用户名已经被占用了 需要更换一个 这是如何实现的呢 你可能想这不是很简单吗 去数据库里查一下有没有不就行了吗 那么假如用户数量
  • Mysql中设置只允许指定ip能连接访问(可视化工具的方式)

    场景 Mysql中怎样设置指定ip远程访问连接 Mysql中怎样设置指定ip远程访问连接 navicat for mysql 设置只有某个ip可以远程链接 CSDN博客 前面设置root账户指定ip能连接访问是通过命令行的方式 如果通过可视
  • 温室气体排放更敏感的模型(即更高的平衡气候敏感性(ECS))在数年到数十年时间尺度上也具有更高的温度变化(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • 在 Java 中连接来自 HBase 的两个结果集?

    是否可以连接从 java 中的 hbase 检索的两个或多个结果集 不 不可能加入 JDBC 结果集 但是 您可以获取它们的结果并手动组合它们 如果它们兼容 如果它们属于同一实体 EDIT 如果您只需要组合两个相同类型的列表 您可以这样做
  • 高效查询Hbase

    我使用 Java 作为查询 Hbase 的客户端 我的 Hbase 表设置如下 ROWKEY HOST EVENT 21 1465435 host hst com clicked 22 1463456 hlo wrld com dragge
  • Hbase 架构嵌套实体

    有谁有关于如何创建带有嵌套实体的 Hbase 表的示例吗 Example UserName string SSN string Books collection 例如 书籍收藏看起来像这样 Books isbn title etc 我找不到
  • Sqoop - 数据分割

    Sqoop 能够使用以下方式从多个表导入数据 query子句 但不清楚是否能够导入以下查询 按部门号从员工组中选择部门号 平均工资 另一个问题是 sqoop import connect jdbc mysql myserver 1202 u
  • 使用主机系统上的客户端访问在虚拟机中运行的 HBase

    我尝试使用客户端程序将一些数据写入hbase HBase Hadoop 在 Cloudera ubuntu 的预配置虚拟机中运行 客户端运行在托管虚拟机的系统上 并直接在虚拟机中运行客户端 所以现在想使用vm外的客户端来访问vm上的服务器
  • oozie Sqoop 操作无法将数据导入到 hive

    我在执行 oozie sqoop 操作时遇到问题 在日志中我可以看到 sqoop 能够将数据导入到临时目录 然后 sqoop 创建 hive 脚本来导入数据 将临时数据导入配置单元时失败 在日志中我没有收到任何异常 下面是我正在使用的 sq
  • Hortonworks HDP Sandbox 上的 HBase:无法从 ZooKeeper 获取主地址

    我从 hortonworks for virtualbox 下载了 HDP 2 1 在简单命令中使用 Hbase shell 时出现以下错误 create t1 NAME gt f1 VERSIONS gt 5 Hortonworks 错误
  • 使用 Spark 和 Phoenix 将 CSV 文件保存到 hbase 表

    有人可以向我指出使用 Spark 将 csv 文件保存到 Hbase 表的工作示例吗2 2我尝试过但失败的选项 注意 它们都适用于我的 Spark 1 6 凤凰火花 hbase spark it nerdammer bigdata spar
  • 使用Java连接到远程HBase服务

    我有一个小示例代码 我在其中尝试建立与远程 HBase 实体的连接 该代码在未安装 HBase 的 Windows 计算机上运行 我尝试连接到已安装并运行该代码的远程 Ubuntu 服务器 下面代码片段中的 IP 当然只是一个占位符 代码如
  • Spark 在 Hbase 的 InputSplit 期间给出空指针异常

    我正在使用 Spark 1 2 1 Hbase 0 98 10 和 Hadoop 2 6 0 从 hbase 检索数据时出现空点异常 找到下面的堆栈跟踪 sparkDriver akka actor default dispatcher 2
  • 如何在spark中配置hbase?

    Spark连接hbase的步骤是什么 我有两者的主地址 我是否只需将 hbase 地址添加到 Spark 类路径中 这篇关于 Spark 与 HBase 连接的文章应该会有所帮助 http www vidyasource com blog
  • Hbase 列族

    Hbase 文档表示 避免创建超过 2 3 个列族 因为 Hbase 不能很好地处理超过 2 3 个列族 其原因在于压缩和刷新 以及 IO 但是 如果我的所有列总是填充 对于每一行 那么我认为这个推理并不那么重要 因此 考虑到我对列的访问是
  • HBase 作为 Web 应用程序后端

    任何人都可以建议将 HBase 作为基于 Web 的应用程序的主要数据源是否是一个好主意 我主要关心的是 HBase 对查询的响应时间 是否有可能实现亚秒级响应 编辑 有关应用程序本身的更多详细信息 数据量 约500GB文本数据 预计很快将
  • HBase:创建多个表或包含多个列的单个表?

    什么时候创建多个表而不是创建具有大量列的单个表才有意义 据我了解 表通常只有几个列族 1 2 每个列族可以支持 1000 多个列 当 HBase 似乎在单个表中可能存在大量列时表现良好时 什么时候创建单独的表才有意义 在回答问题本身之前 让
  • 如果 HBase 不是运行在分布式环境中,它还有意义吗?

    我正在构建数据索引 这将需要以形式存储大量三元组 document term weight 我将存储多达几百万个这样的行 目前我正在 MySQL 中将其作为一个简单的表来执行 我将文档和术语标识符存储为字符串值 而不是其他表的外键 我正在重
  • 使用 Cassandra 进行单元版本控制

    我的应用程序使用 AbstractFactory 作为 DAO 层 因此一旦实现了 HBase DAO 系列 创建 Cassandra DAO 系列并从多个角度查看差异对我来说将是非常好的 不管怎样 试图做到这一点 我看到 Cassandr

随机推荐

  • C语言学习系列1-helloworld示例

    操作环境 CentOS release 6 4 Final 新建文件helloworld c 编辑保存如下内容 include
  • C语言函数大全-- s 开头的函数(3)

    s 开头的函数 3 1 sleep 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 sopen 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 sound 3 1 函数说明 3 2 演示示例 4 spawnl 4 1 函
  • leetcode20. 有效的括号 [简单题]

    题目 给定一个只包括 的字符串 s 判断字符串是否有效 有效字符串需满足 左括号必须用相同类型的右括号闭合 左括号必须以正确的顺序闭合 每个右括号都有一个对应的相同类型的左括号 示例 1 输入 s 输出 true 示例 2 输入 s 输出
  • Windows server远程桌面端口修改

    服务器的远程桌面端口号默认都是3389 修改端口方法如下 1 进入控制面板 防火墙 高级设置 入站规则 可以看到远程桌面TCP In的端口号默认是3389 2 进入注册表 运行 regedit 在注册表中 依次展开目录 HKEY LOCAL
  • ESP32-CAM使用过程的问题

    Esp32 cam算比较便宜实惠的摄像头模块 但是esp32在国内很冷门 可以查看的资料很少 使用过程走了很多弯路 一直跟厂家的技术支持沟通 终于可以显示画面了 以下是本人使用过程中遇到的一些问题 希望对大家有点帮助 有些问题有点蠢 1 a
  • 【文生图系列】如何在Stable Diffusion Webui中使用ControlNet

    文章目录 ControlNet Stable Diffusion ControlNet 安装ControlNet插件 bug 例子展示 参考 ControlNet ControlNet是一个神经网络结构 通过添加额外的条件控制扩散模型 给定
  • 成功解析TT100K

    import os import json from random import random import cv2 import shutil import json import xml dom minidom from tqdm im
  • 华为OD机试真题-施肥问题【2023Q1】

    题目内容 解题思路 首先需要计算每个果园的施肥时间 即果园面积除以施肥机能效 然后找到最小的施肥机能效 保证施肥任务能在规定时间内完成 如果施肥天数小于果园数量 则无法完成施肥任务 返回 1 如果施肥天数等于果园数量 则直接返回最大果园面积
  • 无法用opencv 设置usb camera的解决办法

    apt get install v4l utils v4l2 ctl set fmt video width 1920 height 1080 pixelformat YUYV 转载于 https www cnblogs com gabri
  • 二叉树面试题以及线索化二叉树

    二叉树面试题 完整代码 include
  • echarts之formatter两种使用形式及蝴蝶图的绘制

    1 formatter两种使用形式 可以通过函数和字符串模板来自定义formatter 通过函数动态创建节点 通过循环param的长度 不写死节点 这样有一个好处就是当点击了某一个legend取消了数据的展示的时候 tooltip提示框不至
  • Java8-17 --- idea2022

    目录 一 idea官网 二 使用idea编写hello world 三 查看工程中的JDK配置信息 四 详细设置 4 1 显示工具栏 4 2 默认启动项目配置 4 3 取消自动更新 4 4 选择整体主体与背景图 4 5 设置编辑器主题样式
  • React 使用技巧:useReducer、immer库和 Formik工具库

    1 使用 useReducer hook useReducer 是 useState 的替代品 它可以更好的管理组件的状态 useReudcer 的格式 import useReducer from react let state disp
  • 纯CSS绘制形状(三角形、菱形、球体,长方体等等

    在前段时间看到有的面试题说让说一下梯形 当时自己懵了 所以把各种各样的常见的形状的CSS实现总结一下 基本形状实现之后就可以利用这些基本形状进行组合 就可以实现复杂的形状 1 三角形 triangle width 0 height 0 bo
  • Windows 10创建文件夹目录链接

    问题引出 我们安装软件的时候会发现有些软件虽然设置了安装在非系统盘 但是有些插件文加夹会默认放在系统盘 当我们想把这些文件夹移到别的盘 怎么办呢 毕竟要想开机快 电脑运行更顺畅 还是把系统盘空间留大一点比较好 解决措施 将原来位置下的文件夹
  • 蓝桥杯.Java.进制转换

    在本节内容 我们主要解释三道题 十六进制转八进制 十六进制转十进制和十进制转十六进制 1 十六进制转八进制 问题描述 给定n个十六进制正整数 输出它们对应的八进制数 输入格式 输入的第一行为一个正整数n 1 lt n lt 10 接下来n行
  • pyquery用法详解

    PyQuery库也是一个非常强大又灵活的网页解析库 如果你有前端开发经验的 都应该接触过jQuery 那么PyQuery就是你非常绝佳的选择 PyQuery 是 Python 仿照 jQuery 的严格实现 语法与 jQuery 几乎完全相
  • 华为OD机试真题 Java 实现【矩阵中非1的元素个数】【2023 B卷 200分】,附详细解题思路

    目录 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 1 输入 2 输出 3 说明 先将 0 0 位置的值变为1 第一次同化 第二次同化 大家好 我是哪吒 一 题目描述 存在一个m n的二维数组
  • react-11(样式组件-组件)

    import React Component from react import ReactDOM from react dom client import styled from styled components const root
  • HBase(分布式、面向列、非结构化数据存储,基础框架,设计和操作)总结

    sqoop 总结 1 HBase 介绍 2 面向列数据库 2 1 HBase 与 传统关系数据库的区别 2 2 Hive 和 Hbase区别 2 3 Hbase 和 传统关系型数据库区别 3 Hbase 数据模型 4 HBase 基础架构