HBase第一天

作者: 夙夜M | 来源:发表于2017-08-25 20:22 被阅读0次

    创建表:create '1705hbase:test1','cf'

    加载数据:put 'test1','row1001','cf:name','fanbingbing'    表名,行健,列族:列名,值

    alter 'test1',{NAME='cf',VERSIONS=>3}

    scan 'test1',{COLUMNS=>'cf:name'},limit=>10}

    删除一行:deleteall 'test1','row1002'

    删除一列:delete 'test1','row1002','cf:name'

    清空表:truncate 'test1'

    删除表:disable 'test1'+drop 'test1'

    一、YARN资源调度器三种

    1、容器调度器 Capacity Scheduler

    2、公平调度器 Fair Scheduler

    3、先入先出调度器 FIFO Scheduler

    二、HA:High Availability 高可用集群原理

    三、Hive调优:有关数据倾斜的六大场景和解决方案

    影评案例

    行转列(Lateral view explode)

     列转行(case when)

    四、SQL on hadoop:impala sparkSQL presto flink

    五、Sqoop:HDFS---RDBMS(关系型数据库) 之间的数据迁移工具

    SQL语法:

    export:导出 HDFS-->RDBMS

    import:

    特点:只有map task 没有reducer

    六、工具

    ZooKeeper:分布式的协调服务

        fast paxos算法

    Azkaban(Oozie) 分布式的工作流调度引擎

    HBase 分布式的数据库

    flume 分布式日志收集工具

    Kafka 分布式的消息系统

    Storm 分布式的流式计算模型  思维

    Scala 

        Scala 是 Scalable Language 的简写,是一门多范式的编程语言

        突然想起大学学过的一门课程:实变函数与泛函分析

    Spark 

    ElasticSearch 分布式的搜索引擎

    机器学习

    ClouderaManager 管理大数据集群的工具

    七、Hadoop版本升级过程

    Hadoop1.x  中MapReduce :JobTracker ---TaskTracker

    Hadoop1.x 主从式架构的缺陷

    HDFS:Hadoop Distributed File System

    1)NameNode只有一个,单点故障

    2)内存受限

    3)权限校验

    Hadoop2:HA中只支持两个NameNode

    针对hadoop1缺陷的改进

    1、针对NameNode单点故障:

    两个NameNode之间的元数据时刻保持一致

    1)共享目录 NFS

    2)QJM  

    JournalNode 同步元数据 

            处于active状态的NameNode时刻写,处于standby状态的NameNode时刻读

    为什么不设计成同时向两个NameNode同时写数据?万一一个失败,会导致元数据不同步。

    为什么不两个都为active状态?防止多主多从的出现。

    3)ZooKeeper 

    zkfc检查NameNode健康状况

             同步锁:谁拿到锁谁就是NameNode

             两种方式:1)当active挂掉,standby自动接位  2)手动将standby设为active

    zookeeper可以接管JournalNode同步元数据的功能

    Hadoop类似于一个操作系统:组成:

                   HDFS(文件系统,Windows的文件系统叫NTFS)

                   YARN(资源管理 内存CPU等)

                   MR(做计算)

    2、针对内存受限问题

    元数据太多NameNode装不下

    1)方案一:联邦:是一个整体,一个集群

    加NameNode:这两个NameNode的元数据不一样,各存一部分元数据,再实现HA设计,四个NameNode,其中两个用来同步元数据

    一套NameNode包括active和standby

    一套NameNode对应一个web访问地址

    多个NameNode共享DataNode

    联邦的使用场合:集群特别大的时候,解决内存受限问题

    局限:

    1)只支持两个NameNode

    2)副本存放的是一模一样的数据,浪费

    MapReduce

    1)单点故障

    2)JobTracker 既要分配资源,又要分配任务

    3)难以支撑第三方的框架运行

    客户端的任务都会提交给JobTracker,当提交任务过多,容易出现单点故障

    slot方式的缺陷:

    1)资源利用率不高

    2)一个DataNode默认两个slot   粗粒度

    解决思想:任务分配有ApplicationMaster执行,资源调度由YARN执行

    每提交一个任务,产生一个JobTracker(即ApplicationMaster)------------------压力变小

    向资源调度器(YARN)申请资源(Container),封装资源提交到DataNode

    YARN集群资源调度原理:ResourceManager可以有多个

    YARN目前只能管理内存和CPU(磁盘,网络等等)

    公司原来的业务系统使用的Oracle,现在数据量达到10亿,处理响应比较缓慢,用hive提到Oracle,这个方案怎么样?

    从几个方面来回答

    第一个方面:Oracle和hive分别适合的业务场景:Oracle主要强调的是事务,适合OLTP的业务场景;hive更强调分析,处理的数据量大,更关心的是ETL过程。

    第二方面:Oracle是数据库,在加载错误数据到表会报错;hive是数据仓库,要求把大量数据快速导入到表,加载错误数据不会报错,只会在查询时报错。并且hive在处理数据时使用MR程序进行处理,速度非常的慢。

    更适合的方案是HBase。

    Hadoop的作者:Doug Cutting-----------hadoop的来源

    Lucene->elasticsearch:定位:搜索服务器 全文搜索引擎

    实现的功能:基于内容的相关度推荐

    --------------------------------------------------------------------------------------------

    BigTable->HBase :Hadoop DataBase

    HBase关键字:面向列  可伸缩  开源  非结构化  半结构化

    可伸缩:解决的是MySQL数据存储不下的问题,可扩展节点,是相对于关系型数据库来说。

     MySQL,Oracle的设计之初是面向单机,后来勉强的设计出分布式版本,问题:

    1)搭建分布式的MySQL,Oracle非常复杂,扩一个节点也非常复杂。

    非结构化:

    首先说结构化:关系型数据库存储的数据的特点。

    非结构化:视频,图片

    半结构化:

    想象一个场景:微博评论,现在用一条信息存储一条微博对应的信息,包括userid,微博内容,创建时间,以及评论,即前面几个字段是固定的,后面的评论的所有字段是不断增长的,这就是半结构化数据的一个场景。

    面向列:

    首先说面向行:关系型数据库:MySQL、Oracle、SQLServlet

    创建表的时候要指定字段类型和长度,行存储,每条数据长度固定,搜索时快速定位,如果数据没有做磁盘预留。

    连表查询---->建一张大表/宽表

    MySQL查询数据原理:首先将所有的数据加载到内存,再从内存过滤我们需要的字段。

    面向行的局限:稀松表+数据量大---->磁盘利用率不高,内存利用率不高

    面向列:列族 每个列族单独一个文件,当我们查询某个字段,只会打开该字段所在列族文件,解决了内存利用率不高的缺陷;如果没有数据,直接不占内存。这种设计模式只适合稀松表和海量数据场景。

    场景:联通流量查询,快速在几千亿条信息中查询流量。

    HBase使用:电信行业

    HBase的数据模型:主要是表的概念。

    表(table):划分数据的集合

    行健(row key):类似于关系型数据库的主键,区别:主键是我们自己指定的,行健是HBase数据库天然自带。

    列族(column cluster):列的集合,一个列族单独一个文件。

    列限定符(column):列族中的列

    列单元格(cell):用三个维度(行健、列族、列)定位一个单元格。

    时间戳:一个单元格可以存储多份数据,不同份数据以时间戳区分。这不符合了关系型数据库的原子性。(关系型数据库的三个原则)

    库:namespace

    创建库 create_namespace '1705hbase'

    显示所有库:list_namespaces

    创建表:create '1705hbase:test1','cf' 第一个参数为库名:表名,第二个参数为列族名

    显示所有的表:list

    显示表详细信息:desc 'test1'

    插入数据:put 'test1','row1001','cf:name','fanbingbing'

    查看数据:scan 'test1'

    插入数据:put 'test1','row1001','cf:age','38'

    列名在插入的时候指定。

    rowkey标识行,一条数据是一个单元格。

    HBase数据库数据存储形式

    HBase的update功能:HBase没有真正意义上的update,但是可以通过一个单元格存储多份数据来实现。

    修改表的语句:

    修改版本号 alter 'test1',{NAME='cf',VERSIONS=>3}

    HBase默认展示版本号最新的数据,原来的数据仍然可以查看。

    表示展示两份数据 scan 'test1',{VERSIONS=>2} 

    之所有有这个功能,搜索引擎

    scan 'test1',{COLUMNS=>'cf:name'},limit=>10}

    删除rowkey的所有信息:

    deleteall 'test1','row1002'

    删除某个rowkey的某个列:delete 'test1','row1002','cf:name'

    清空表:truncate 'test1'

    删除表:disable 'test1' 

                    drop 'test1'

    HBase数据库表的存储:

    region:水平切表 ,region分散在各个节点上。

    同一个rowkey的数据,不能分离在两个region,这样的结果是每个region的大小不是完全一样

    HBase架构

    主节点:Master 可以有多个:决定region存储地域

    从节点:RegionServer:管理region

    同时引进zookeeper  保证任何时候只有一个running状态的master

    相关文章

      网友评论

        本文标题:HBase第一天

        本文链接:https://www.haomeiwen.com/subject/wkuhdxtx.html