Hbase
1.为什么要使用hbase?

前面我们使用hive来组织大数据,能够让开发者和用户使用sql来查询和分析数据,但是当我们需要对大数据进行更新删除等操作时,尤其时事务式操作时,hive是不支持的,这时就需要用到hbase来事务式的操作大数据;

2.Hbase为什么使用列式存储?

行式存储是将一行多列数据当作一个逻辑单元来处理,类似于向量,并且进一步的还有join on 等集合之间的操作,类似向量、向量空间之间的操作;
列式存储是将多行的同列的数据变化历史当作一个逻辑单元来处理,即关注某个属性随时间变化,重点是多行即多次事件之间某个受关注的属性的对比;
而大数据的处理的基本思路就是按照时间来观察某个属性的变化;
另外一般的SQL型数据库的思想是发生的事件必定带有同样的属性,表现为每行的数据的列字段都一样;
而NoSQL的思想是发生的事件不一定严格有同样的属性,或者有些属性有没有不重要,而是个别属性必须有,表现为每行数据之间的列不一样相同;

3.Habase的数据存储的逻辑结构

Hbase整体的逻辑存储结构类似于 Namespace table Map<RowKey,Map<columnFamilyKey,Map<columnKey,Stack<byte[], timestamp>>>>;
table Map<RowKey,row>即整个表中存储多行,每行数据的 key 就是 RowKey,此key在表中唯一代表行;
row Map<columnFamilyKey,columns>每行 包含多个列族,由columnFamilyKey标识;
columns Map<columnKey, Queue> 每个列族由多个列组成;
Stack<byte[], timestamp> 每个列由具体的数据(字节)和64位整形时间戳组成,根据时间形成后进先出的查询顺序;

spark
1.spark 和 mr 执行类似,逻辑处理数据的单元为 RDD,和 mr一样 也有transform(map)和action(reduce)算子;
2.spark 会将原始数据分片 partition,每个分片分给一个RDD来处理,RDD执行一个算子之后交给下一个RDD继续处理;
1.kudu 代替 HBase

随机读写?
其实是HDFS + HBase的替代方案

2.kudu如何创建表

1.需要Schema,并且表明哪个字段为 key,理解为主键
2.指定副本数量,满足高可用
3.为了高效的查询,使用了分区,故而需要指定数据落入分区的策略和分区数量
    1.hash,根据指定字段的hash落入分区
    2.range,指定落入分区范围的字段以及其值

1.实时流计算的数据源从哪里来?

unix一切皆文件,那么数据源实际上都是监听文件获取的,那么数据可以从
    1.log等文件,但是需要通过 tail 来监听文件的变化
    2.Avro Socket 端口数据
    3.主动的从kafka等消息中间件拉取,本质上同1

2.数据以流式流入,spark何时被触发进行计算?

spark被设计成按照秒来触发计算,具体为数据流入多少秒开始计算这段事件内的数据。

3.spark底层是如何运行流式任务?

spark streaming 是将计算的数据任务转化为RDD,然后交给sparkCore来当作一个普通的批处理任务来执行的;

1.Alluxio 能做什么?

1.本质上是基于内存的分布式文件系统;
2.使用的场景
    1.每次进行计算任务时会将数据读入内存,若多个任务读取同样的数据则会导致读取数据到内存这个IO是重复工作;
    2.计算任务的中间结果存在Driver内存中,若Driver宕机则需要整个任务重新执行,需要有个地方来存储中间结果;
        1.其实checkpoint可以满足
    3.多个计算任务执行过程中,存在共享数据的需求;
3.解决方式
    1.Alluxio对接多个数据存储系统,例如 hdfs,将数据缓存;
        1.支持列式存储
    2.Alluxio对接多个计算引擎,例如 MR Spark Flink Hive Hbase的等;
    3.Alluxio提供近似于文件系统的API操作方便;

Fox_Valentin
1 声望1 粉丝