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