Hive知识点总结-01

*启动错误,日志查看
1.hdfs日志,hadoop安装目录下的logs目录
2.zookeeper日志
  当没有特殊指定zookeeper的日志输出目录的话,zookeeper的日志是在执行zkServer.sh start指令所在的文件夹里
  zookeeper日志的名称是:zookeeper.out
3.hbase日志
  hbase的日志在hbase安装目录下面有logs目录

*zookeeper
 分布式系统协调工具,高可用协调工具
 zookeeper上的数据存在于每一个server节点上,每一个节点上的zookeeper节点上保存的数据都是全量数据
 zookeeper上保存数据的方式和文件系统保存数据一样

*hbase的数据模型

 sql: 在sql的数据库中包含两种元素:即模式(比较强的表结构)和元组(数据记录)
 nosql: 在nosql里面一般更强调元组而弱化模式,有些nosql中没有模式,有些nosql有比较弱的模式,比方说有表而没有明确的字段,或者有表有更为广义上的字段组

 hbase是nosql的一种,它的设计和使用都是反模式的。它里面不是完全没有模式,它的模式分为三层
 1.namespace 类似于mysql的database
 2.table     类似于mysql的table
 3.column cluster(COLUMN FAMILIES)(列簇) 可以把它认为是mysql里面一个表的多个字段按照某个条件分成多组

 namespace的基本操作
 create_namespace 'bd20'
 list_namespace            -- 展示hbase有多少个namespace
 list_namespace_tables 'bd20'    -- 展示bd20数据库下有多少个表
 drop_namespace 'bd20'

 table的基本操作
 -- 创建表
 create 'bd20:table_name','c1'
 describe 'bd20:table_name'

-- 先失效,再删除表
 disable 'bd20:'
 drop 'bd20:tabltable_namee_name'

 -- alter table 删除一个列簇
 alter 'bd20:table1', NAME => 'c1', METHOD => 'delete'
 -- alter table 新增一个列簇
 alter 'bd20:table1',NAME=>'c2'
 -- alter table 修改表的配置参数信息

 create 'cms_link','primary_info','system_info'

 mysql上所说的一条数据指的是一行数据
 hbase中所说的一条数据指的是一行数据中的一个单元格

 put 'cms_link','1','primary_info:category_id','19'
 get 'cms_link','1'
 scan 'cms_link'

*hbase的底层数据存储
 hbase的底层数据是按照条来保存的,每一条数据在底层数据文件里面占据一个存储空间,每条数据的格式如下:
 rowkey  列簇:列名称                    timestamp(版本)   列值
   1      primary_info:category_id     9433747838345        19
   1      primary_info:title           9433747838345        JeeSite
  。。。。

 hbase的数据文件是把每条数据以kv的形式来存储的
 rowkey+列簇:列名称+时间戳  ------》key
 列值                       ------》value

 因为key上的大部分数据都是冗余的,凡是我们自己设计的key上的数据,尽可能的限定他们的长度
 rowkey在设计时要设计的尽可能的短
 列簇在设计上要尽可能的短:在尽可能表达列簇的内容意义的时候尽可能的短,一般只用一个字母i
 列名称设计上要尽可能的短:要尽可能的表达列值的数据内容的意义,比方说姓名、年龄等:title\color\image

 hbase中所有的数据存储都是有序的,首先按照rowkey,然后按照ColumnFamily,再然后column qualifier,最后是timestamp(降序)

*hbase的架构原理
 hbase中的每一张表都是分布式存储的
 hbase把一张表table划分成多个region,每个region可以散布在不同的regionserver上来对外提供服务。
 hbase是根据行业划分region,也就是说hbase是根据rowkey来划分region的。
 每个region都有自己的rowkey上下限,第一个region没下限,最后一个region没有上限,当一条记录需要保存在hbase中,hmaster会判断这条记录的rowkey应该分布在哪一个region上,然后转交给这个region所负责的regionserver来执行读写操作

 hbase的region的大小会随着里面的数量的增加而增加,当一个region的体量超过256M时,这个region就会分裂(split),分裂的过程由hmaster主导,由hregionserver执行,在分裂的过程中,不对外提供读写服务。

 hbase中如果在定义表时不对表进行预分区,那么整个hbase表就只有一个region。为了尽可能的避免分裂最好要对数据进行预分区

 create 'stable1','i',SPLITS=>['100','200','300','400']

 hbase根据rowkey查找一个表tableA数据的过程
 根据root表来确定meta表的位置,root表存在于zookeeper中/hbase/meta-region-server
 根据元数据定位tableA的位置,元数据保存在hbase的meta(hbase:meta)表中
 定位tableA的位置,然后根据rowkey来确定要查找记录的准确region,根据region定位其所在regionserver,regionserver根据rowkey就检索数据文件中记录的位置从而获取数据。

 Table                    (HBase table)
    Region               (Regions for the table)
        Store            (Store per ColumnFamily for each Region for the table)
            MemStore     (MemStore for each Store for each Region for the table)
            StoreFile    (StoreFiles for each Store for each Region for the table)
                Block    (Blocks within a StoreFile within a Store for each Region for the table)

/hbase
    /<Table>                    (Tables in the cluster)
        /<Region>               (Regions for the table)
            /<ColumnFamily>     (ColumnFamilies for the Region for the table)
                /<StoreFile>    (StoreFiles for the ColumnFamily for the Regions for the table)

/hbase
    /.logs
        /<RegionServer>    (RegionServers)
            /<WAL>         (WAL files for the RegionServer)

*hbase中数据的来源
 1.来源自已有的数据文件(批量)
   mapreduce
   hive
   spark

   Bulk Loading
 2.来源自业务系统不断增加的数据记录(增量)
   java api
   shell
   其他语言+thrift服务

*hbase api操作
 1.构建配置参数对象,使用HBaseConfiguration来创建
 2.创建Connection对象,使用ConnectionFactory来创建
 3.如果执行ddl操作的话需要Admin对象,通过Connection来获取
 4.如果执行dml操作的话需要Table对象,通过Connection来获取

往hbase里插入数据,需要Put对象,一个Put对象代表一行数据(多个单元格)
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值