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个列族。

  • 相关阅读:
    1011. A+B和C (15)
    1010. 一元多项式求导 (25)
    1009. 说反话 (20)
    1007. 素数对猜想 (20)
    1008. 数组元素循环右移问题 (20)
    1006. 换个格式输出整数 (15)
    1005. 继续(3n+1)猜想 (25)
    算法学习(八)
    算法学习(七)
    算法学习(六)
  • 原文地址:https://www.cnblogs.com/testzcy/p/9117789.html
Copyright © 2011-2022 走看看