创建表: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
网友评论