zoukankan      html  css  js  c++  java
  • HBase 笔记

    参考资料:HBase权威指南

    一行由若干列组成,若干列又构成一个列族
    一个列族的所有列存储在同一个底层的存储文件里,这个文件叫HFile
    列族的数量有限制;一个列族里列的数量没限制
    谓词删除:例如允许用户只保存过去一周
    HBase中扩展和负载均衡的基本单位是region,一张表初始只有一个region,region大小超过限制后会拆分region变成两个
    每个region只能由一个region服务器加载,每台region服务器可以同时加载多个region
    HBase中有3个主要组件:客户端库、一台主服务器、多台region服务器,主服务器通过zookpper为region服务器分配region

    在服务器的地址空间中执行来自客户端的代码,支持这种功能的服务端框架叫做协处理器
    HBase的api主要是java代码,但也支持其他编程语言
    数据存储在存储文件中(HFile),文件由连续的块组成,HFile通常保存在Hadoop分布式文件系统(HDFS)中
    存储文件是不可以改变的,所以无法通过移除某个键值对来删除,解决般办法是做个删除标记

     

     当在同一服务器上运行Hadoop和HBase时,最少会有3个java进程(DataNode、TaskTracker和RegionServer),而且在执行MapReduce作业时,进程数还会激增,要运行这些程序需要一定数量的内存、磁盘和CPU资源

    使用java时,不应该为一个进程设置过多的内存,因为java重写堆时,会暂停所有进程内的逻辑并进行清理,堆越大,清理的时间就越长
    如果HBase警告无法找到可执行的java安装路径,就需要在conf/hbase-env.sh文件中编辑JAVA_HOME这一行,设置正确的java安装路径

    HBase只能依赖特定的Hadoop版本,因为他们之间的远程过程调用RPC是版本化的,调用方和被调用方要互相匹配,细微的差异都有可能导致通信失败

    由于HBase依赖Hadoop,所以要求Hadoop的JAR必须部署在HBase的lib目录下
    HBase使用的Hadoop版本必须与底层Hadoop集群上使用的Hadoop版本一致,使用Hadoop集群正在运行的JAR替换HBase的lib目录中依赖的Hadoop的JAR可以避免版本不匹配问题

    集群中所有节点都需要更新为一样的JAR,否则版本不匹配会造成集群无法启动或假死现象

    在服务器上禁止使用交换区,一旦服务器发生交换,HBase服务器就无法与zookeeper服务器交换信息
    集群中节点时间必须一致,仅仅一分钟的偏差就有可能是集群产生莫名其妙的行为,可以使用NTP或同等功能来“同步集群的时间”

    ======================

    参考文献:https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-bigdata-hbase/index.html

    HBase 适用于结构化的存储。并且 HBase 是一种列式的分布式数据库
    HBase 则为大型分布式 NoSql 数据库

    HBase 与 Hive 的区别:
    1 Hive 适合用来对一段时间内的数据进行分析查询;
    2 Hive 不应该用来进行实时的查询(Hive 的设计目的,也不是支持实时的查询)。因为它需要很长时间才可以返回结果;HBase 则非常适合用来进行大数据的实时查询
    3 对于 Hive 和 HBase 的部署来说,也有一些区别,Hive 一般只要有 Hadoop 便可以工作。而 HBase 则还需要 Zookeeper 的帮助
    4 HBase 本身只提供了 Java 的 API 接口,并不直接支持 SQL 的语句查询(除非与其他框架一起使用,如 Phoenix、Hive),而 Hive 则可以直接使用 HQL(一种类 SQL 语言)

    HBase 的使用建议:
    1 一个 HBase 数据库是否高效,很大程度会和 Row-Key 的设计有关:
    1)当客户端需要频繁的写一张表,随机的 RowKey 会获得更好的性能。
    2)当客户端需要频繁的读一张表,有序的 RowKey 则会获得更好的性能。
    3)对于时间连续的数据(例如 log),有序的 RowKey 会很方便查询一段时间的数据(Scan 操作)
    2 在大多数的情况下,一个表格不会超过 2 到 3 个 CF,而且很多情况下都是 1 个 CF 就足够了。

    参考资料:https://www.jianshu.com/p/569106a3008f

    Hbase表的创建的时候就必须指定列族。就像关系型数据库创建的时候必须指定具体的列是一样的。

    Hbase的列族不是越多越好,官方推荐的是列族最好小于或者等于3。我们使用的场景一般是1个列族。

  • 相关阅读:
    C# 实现 Snowflake算法生成唯一性Id
    kafka可视化客户端工具(Kafka Tool)的基本使用(转)
    docker 安装kafka
    Model类代码生成器
    使用docker 部署rabbitmq 镜像
    Vue 增删改查 demo
    git 提交代码到库
    Android ble蓝牙问题
    mac 配置 ssh 到git (Could not resolve hostname github.com, Failed to connect to github.com port 443 Operation timed out)
    okhttp
  • 原文地址:https://www.cnblogs.com/testzcy/p/9117789.html
Copyright © 2011-2022 走看看