风之小云天的博客

When your dreams come alive you're unstoppable


  • Home

  • About

  • Tags

  • Categories

  • Archives

运维开发笔记

Posted on 2020-08-14 | In devops
Words count in article: 174
ssh免密登录localhost配置1234567891011生成 ssh keysssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa将 ssh keys 输出到 authorized_keys中cat ~/.ssh/id_rsa.pub >> ~/.ssh ...
Read more »

力导向图

Posted on 2020-07-09 | In 前端
Words count in article: 699

force-graph 力导向图属性总结

力导向图

Read more »

neo4j 图数据库学习

Posted on 2020-07-01 | In 图数据库 大数据
Words count in article: 528
neo4j 图数据库学习节点属性关系标签 create 创建节点 12create(node_name:label_name {attribute_key:value})create(张小龙:微信 {age:45,company:"腾讯",position:"微信创始人 ...
Read more »

hbase 基础

Posted on 2020-06-01
Words count in article: 2.9k

hbase 是一个基于列存储的数据库,底层存储可以用hdfs,也可以用本地文件系统,这里记录下常用操作。

数据模型

在 HBase 中,数据存储在由行列构成的二维表中,这是与一个关系数据库(RDBMS)重叠的术语,但这不是一个有帮助的比喻,相反,将hbase 表视为多表映射会很有帮助。

  • 表
    HBase 表由多行组成
  • 行
    HBase 中的一行由一个行键和一个或多个具有与之关联的值的列组成,存储时候按照行键排序,因此,行键设计非常重要,其目标是以相关行彼此靠近的方式存储数据。。常见的行键模式是网站域名。如果您的行键是域名,则应该反向存储它们(org.apache.www,org.apache.mail,org.apache.jira)。这样,所有 Apache 域名都在表中彼此靠近,而不是基于子域名的第一个字母展开。
  • 列
    HBase 中的列由列族和列限定符组成,它们由 : (冒号) 字符分隔
  • 列族
    出于性能原因,列族通常在物理上拥有一簇列及其值。每个列族都有一组存储属性,例如是否应该将其值缓存在内存中,如何压缩其数据或对其行间进行编码等,表中的每一行都有相同的列族,到给定的行肯呢个不会再给定的列族中存储任何内容。
  • 列限定符
    列限定符被添加到列族中,以提供给定数据段的索引,给定列族 content,列限定符可能是 content:html,另一个可能是 content:pdf,列族在创建表时候是固定的,但是列限定符是可变的,并且行之间可能有很大差异。
  • 单元格
    单元格是行,列族和列限定符的组合,它包含一个值和一个时间戳,时间戳表示值的版本。
  • 时间戳
    时间戳与每个值一起写入,它是该值给定版本的标识符,默认情况下,时间戳表示写入数据时 RegionServer 上的时间,但是当年将数据放入单元格时候,可以指定不同的时间戳值。

概念视角 - HBase 模式设计

参考 HBase 模式设计介绍

物理视角

在概念级别,表可以看作一组稀疏的行,但在物理意义上它们是按照列族存储的,可以随时将新的列限定符(column_family:column_qualifier) 添加到现有列族中
ColumnFamily website
Row Key | Time Stamp | 列族 anchor
“com.cnn.www” | t9 | anchor:cnnsi.com = “CNN”
“com.cnn.www” | t8 | anchor:my.look.ca = “CNN.com”

ColumnFamily contents
Row Key | Time Stamp | ColumnFamily contents:
“com.cnn.www”| t6 | contents:html = “…​”
“com.cnn.www”| t5 |contents:html = “…​”
“com.cnn.www”| t3 | contents:html = “…​”
概念视角中显示的空单元格不占据物理存储空间,因此,在时间戳 t8 处对 contents:html 列的值的请求将不返回任何值。类似地,在时间戳t9处对anchor:my.look.ca值的请求将不返回任何值。但是,如果未提供时间戳,则将返回特定列的最新值。给定多个版本,最新版本也是第一个版本,因为时间戳按降序存储。因此,如果没有指定时间戳,则对行com.cnn.www中所有列的值的请求将是:来自时间戳t6的contents:html的值,来自时间戳t9的anchor:cnnsi.com的值,来自时间戳t8的anchor:my.look.ca。

命名空间

命名空间是与关系数据库系统中的数据库类似的表的逻辑分组,这种抽象为即将出现的多租户相关功能奠定了基础

  • 配额管理 限制命名空间可以使用的资源数量(即区域、表)
  • 命名空间安全管理 - 为用户提供另一级别的安全管理
  • 区域服务器组 - 可以将命名空间/表固定到 RegionServers 的子集上,从而保证粗粒度的隔离级别。

    命名空间管理

    一个空间可以被创建,被删除或被更改,通过制定表单的完全限定表名,在表创建期间确定命名空间成员资格
    1
    <table namespace>:<table qualifier>
    1
    2
    3
    4
    5
    6
    7
    8
    # Create a namespace
    create_namespace 'project'
    # create my_table in project namespace
    create 'project:my_table' ,'fam'
    # drop namespace
    drop_namespace 'project'
    # alter namespace
    alter_namespace 'project',{METHOD => 'set','PROPERTY_NAME' => 'PROPERTY_NAME'}

    预定义的名称空间

    有两个预定义的特殊命名空间
  • hbase - 系统命名空间,用于包含 HBase 内部表
  • default - 没有明确制定名称空间的表将自动落入此名称空间
    1
    2
    3
    4
    5
    #namespace=foo and table qualifier=bar
    create 'foo:bar', 'fam'

    #namespace=default and table qualifier=bar
    create 'bar', 'fam'

    表

    表在模式定义时预先声明

    行

    行键是无解释的字节,行按字典顺序排序,最低顺序首先出现在表中,空字节数组用于表示表的名称空间的开始和结束

    列族

    HBase 中的列分组为列族,列族的所有列成员都具有相同的前缀。例如,列 courses:history 和 courses:math 都是 courses 列族的成员,冒号字符(:) 从列族限定符中分隔列族。列族前缀必须由可打印字符组成,限定符的右部(列族限定符)可以由任意字节组成。列族必须在模式定义时预先定义,且可以在表启动和运行时动态变化。
    从物理上讲,所有列族成员都存储在文件系统中。由于调优和存储规范是在列族级别完成的,因此建议所有列族成员具有相同的一般访问模式和大小特征。

    单元格

    {row,column,version} 它是一个元祖并确切地指定了 HBase 的cell,单元格内容是未解释的字节。

    数据模型操作

    四个主要的数据模型操作是 Get,Put,Scan和 Delete,通过表实例应用操作。

    版本

    {row,column,version} 元祖确切地指定了 HBase 中的 cell,可以有一个无限数量的单元格,其中行和列相同但单元格地址仅在其版本纬度上有所不同。

排序顺序

HBase 中所有数据模型的操作都将按照排序顺序返回数据,首先是行,然后是列族,后面是列限定符,最后是时间戳(反向排序,因此首先返回最新的时间戳。)

列的元数据

列族的内部 KeyValue 实例之外没有列的元数据存储,因此,尽管HBase 不紧可以支持每行的大量列,而且还可以支持行之间的异构列,因此有必要追踪列名。
获取列族存在的完整列集合的唯一方法是处理所有行。
虽然行和列键表示为字节,但版本则使用长整数(long integer)类型指定。通常这个长时间类型包含时间实例,例如java.util.Date.getTime()或System.currentTimeMillis()返回的时间实例,即:当前时间与 UTC 时间 1970 年 1 月 1 日午夜之间的差异(以毫秒为单位)。

HBase 版本维度按递减顺序存储,以便在从存储文件中读取时,首先找到最近的值。
在 HBase 中,cell版本的语义存在很多混淆。特别是:
如果对单元格的多次写入具有相同的版本,则只能读取最后写入的内容。
可以按非增加版本顺序写入单元格。

HBase 表 Schema 的经验法则

因为存在许多种数据集,不同的访问模式和服务层级的要求。以下经验法则只是概述。

  • 目标是把 region 的大小限制在 10-50 GB之间
  • 目标是限制 cell 的大小在 10MB 之内,如果使用的是 mob 类型,限制在 50 MB 之内。否则,考虑把 cell 的数据存储在 HDFS中,并在 HBase 中存储指向该数据的指针。
  • 典型 schema 每张表包含1-3个列族,HBase 表设计不应该和 RDBMS 表设计类似
  • 对于拥有1或者2个列族的表来说,50-100个 region 是比较合适的。region 是列族的连续段。
  • 保持列族名称尽可能短。每个值都会存储列族的名称(忽略前缀编码)。它们不应该像典型 RDBMS 那样,是自文档化,描述性的名称。
  • 如果你正在存储基于时间的机器数据或者日志信息,并且 row key 是基于设备id 或者服务id + 时间,最终会出现这样一种情况,即更旧的数据 region 永远不会有额外写入。在这种情况下,最终会存在少量的活动 region 和大量不会再有新写入的 region。对于这种情况,可以接受更多的 region 数量,因为资源的消耗只取决于活动 region。
  • 如果只有一个列族会频繁写那么只会让这个列族占用内存,当分配资源时候注意写入模式。

    用 hbase shell连接正在运行的Hbase实例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [tools@uatgw01 ~]$ hbase shell

    HBase Shell
    Use "help" to get list of supported commands.
    Use "exit" to quit this interactive shell.
    For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
    Version 2.1.0-cdh6.3.1, rUnknown, Thu Sep 26 02:56:36 PDT 2019
    Took 0.0018 seconds
    hbase(main):001:0>
    hbase(main):002:0*

    创建表

    使用 create 创建一个表,必须执行一个表名和列族名
    1
    2
    3
    4
    5
    hbase(main):002:0* create 'hbase_test','cf'
    Created table hbase_test
    Took 2.5584 seconds
    => Hbase::Table - hbase_test
    hbase(main):003:0>

    表信息 - 使用 list 查看存在表

    1
    2
    3
    4
    5
    6
    hbase(main):003:0> list 'hbase_test'
    TABLE
    hbase_test
    1 row(s)
    Took 0.0318 seconds
    => ["hbase_test"]
Read more »

Linux中swap与memory介绍

Posted on 2020-02-09
Words count in article: 1.4k

1. 背景介绍

这篇文章介绍一下 Linux 中 swap 与 memory。memory 就是机器的物理内存ram,读写速度低于 cpu 一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存的造价是要高于磁盘的,虽然相对来说价格一直在降低。除此之外,内存的断电丢失数据也是一个原因,因此不能把所有数据和程序都保存在内存中。既然不能全部使用内存,那数据还有程序肯定不可能一直霸占在内存中。当内存没有可用的,就必须要把内存中不经常运行的程序给踢出去。但是踢到哪里去,这时候 swap 就出现了。swap 全称为 swap place,即交换区,当内存不够的时候,被踢出的进程数据被暂时存储到交换区。当需要这条被踢出的进程的时候,就从交换区重新加载到内存,否则它不会主动交换到真实内存中。

Read more »

消息推送简介

Posted on 2019-10-07
Words count in article: 2k

​ 在互联网业务中,有很多场景,都需要向用户推送消息,例如,一个论坛系统中,当用户发帖后,其他用户进行回复,需要对发帖者进行消息通知,在电商业务中,当用户下单后,管理后台需要通知用户下单成功;在一些秒杀和购物场景中,当用户提交订单未付款时候,一般会有一个截止时间,当即将到达截止时间时候,需要通知用户及时付款,在这些场景中,如何对用户实现消息通知呢?

简单消息推送

传统的开发模式,一般是前端轮询,例如在论坛系统中,在用户个人页面,前端轮询后端接口,后端返回对应的消息数据,这种方式需要每隔几秒就向后台发请求,对于实时性要求比较高的系统,轮询频率会更高,之前参与维护迭代的pc端消息推送,采用的是这种方式,前端轮询后端接口,后端通过查询数据库,判断是否有新消息,有的话就将数据返回给前端,前端进行弹窗或者其它方式进行展示,数据库设计大概如下:

Read more »

docker学习笔记

Posted on 2019-05-15 | In docker
Words count in article: 2.4k

什么是docker

docker包括一个命令行程序、一个后台守护进程、以及一组远程服务。它解决了常见的软件问题,并建华路安装、运行、发布和删除软件。这一切能够实现是使用一项Unix技术,称为容器。

容器不是虚拟化

在没有docker时代,使用硬件虚拟化(虚拟机),以提供隔离,虚拟机提供虚拟硬件,可安装一个os和其他程序,需要很长时间创建,资源开销打,因为除了要执行你需要的软件,还需要运行整个操作系统的副本。
docker容器不使用硬件虚拟化,运行在docker容器中的程序接口和逐渐的Linux内核直接打交道,容器中运行的程序与计算机操作系统直接没有额外的中间层,没有资源被冗余软件的运行或者虚拟硬件模拟而浪费掉,docker不是虚拟化技术,相反,它可以帮助使用已经内置到操作系统中的容器技术。

Read more »

毕业找工作

Posted on 2019-05-15 | In docker
Words count in article: 1.7k

黄色的林子里有两条路,
很遗憾我无法同时选择两者
身在旅途的我久久站立
对着其中一条极目眺望
直到它蜿蜒拐进远处的树丛。
我选择了另外的一条,天经地义,
也许更为诱人
因为它充满荆棘,需要开拓;
然而这样的路过
并未引起太大的改变。
那天清晨这两条小路一起静卧在
无人踩过的树叶丛中
哦,我把另一条路留给了明天!
明知路连着路,
我不知是否该回头。
我将轻轻叹息,叙述这一切
许多许多年以后:
林子里有两条路,我——
选择了行人稀少的那一条
它改变了我的一生。

Read more »

她那时候还太年轻,不知道所有命运赠送的礼物,早已在暗中标好了价格。

Posted on 2018-05-27 | In 人生
Words count in article: 5.9k
你是如何理解「她那时候还太年轻,不知道所有命运赠送的礼物,早已在暗中标好了价格」的? 太年轻”是关键,年轻,很多事不会考虑后果,肆意妄为,以为世界都是自己的,很多人抱怨自己年轻人不懂事什么的,何谓懂事?无非是现实给予我们教训好让我们认清自己,只是这教训有时候特别沉重,你连重来的机会都没有了。 在 ...
Read more »

周易-乾卦

Posted on 2017-12-12 | In 生活 , 心情
Words count in article: 8.5k

乾卦是《易经》六十四卦中的第一卦,代进取、创造的力量。乾卦六爻皆阳,好似六条巨龙,代表着天地万物变化的规律;代表着人生、或人的事业发展的六个阶段,即潜、现、惕、跃、飞,亢。乾最大的美德是刚健、自强不息。
《周易》上说,乾:元,亨,利,贞。乾卦广大、亨通、吉利、纯正,四德具备,因而卜得此卦大吉大利,和谐坚实。乾卦由天道而至人道,读懂了乾卦就读懂了人生,也就读懂了做人做事的大智慧。

Read more »
pre123next
风之小云天

风之小云天

23 posts
11 categories
11 tags
GitHub E-Mail
0%
© 2021 风之小云天 | Site words total count: 41.9k
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4
总访客 人 总访问量 次