
双写,就是写主
表的时候,同时写索引表[这里这个索引表是根据业务对查询的需求建立的]。比
如我们要查询的主表是A, 里面有RowKey,还有一列ColumnA. 如果想对ColumnA
这一列建立索引,就自定义一个协处理器(观察者模式),当我们写入 A 表中一条
数据,比如 行键 rowkey(123),cloumnA 列值:abc,这时协处理在索引表(自己
建立,比如 A_INDEX)中插入一条记录 行键为刚才列 A 的值 abc,列值为主表的
rowkey(123). 查询的时候,先查索引表得到 rowkey,然后根据 rowkey 在主表
中查。
54、
Kafka Partition 如何保证副本数据的一致性
参考:http://coder.yihongyeyan.com/question/42
55、
HBase 如何保证数据的强一致性
HBase
是牺牲了数据的部分可用性来保证它的数据强一致性的。
* HBase 中每一条数据只会出现在一个
Region,它的数据冗余备份不是在
Region 这个层面做的,还是依赖 HDFS
来做的冗余。而且同一时间一个 Region
只会被分配给一个 RegionServer,这就保证了系统中只会有一条可以使用的数
据。HBase 支持行级事物,即一个 put 操作要么成功,要么失败。
* 另外当有 RegionServer 宕机的时候,Region 会被分配到其他的
RegionServer 上,同时重写 WAL Log,这个过程中整个 Region 中的数据是不
可用的,因为它是缺失的。如果可用性强的话那么必定会有数据不一致的问题(即
写入过的数据查询不到),所以这里用可用性来换取了强一致性,等到
WAL 写
完,保证了数据完整性之后,才可重新访问。
56、
Spark Structured Streaming
优势
增量查询模型(Incremental
query model): Structured Streaming
将会在
新增的流式数据上不断执行增量查询,同时代码的写法和批处理 API
(基于
Dataframe 和 Dataset API)完全一样,而且这些 API 非常的简单。支持端到端的引用(Support for
end-to-end
application): Structured
Streaming 和内置的 connector 使的
end-to-end
程序写起来非常的简单,而
且 “correct by default”。数据源和
sink 满足 “exactly-once” 语义,这样
我们就可以在此基础上更好地和外部系统集成
复用 Spark SQL 执行引擎:我们知道 Spark SQL 执行引擎做了非常多的优
化工作,比如执行计划优化、codegen、内存管理等。这也是 Structured
Streaming 取得高性能和高吞吐的一个原因。
支持了基于事件时间(event time)的窗口操作,同时结合水位线
(watermark)来处理延迟数据。
57、
Spark Cache,Presist,CheckPoint 的区别
* Cache、Persist 是转化类算子,和其他算子一样,触发的时机是在对应分区
的上游算子计算完成之后。
* Cache、Persist
会把 RDD 缓存到指定位置,这个操作不会改变 Lineage 血
缘的依赖关系,且
Job 执行完成之后,缓存的数据会被清除。
* Cache、Persist
一般应用于需要访问重复数据的应用(如迭代型算法和交互
式应用)缓存可以运行得更快。
* CheckPoint 执行完毕后,会产生 CheckPointRDD,此时 lineage 血缘关系已
经改变了,容错会从 CheckPointRDD 开始。
* CheckPoint 将 RDD 持久化到 HDFS ,会被永久保存,可以给其他的 Driver
使用
* 虽然 Presist 也可以持久化数据到磁盘,但是它有 BlockManager 管理,一旦
Driver 结束,BlockManager 也会 stop,被 cache 到磁盘上的 RDD 也会被清
空,而 checkpoint 将 RDD 持久化到 HDFS 或本地文件,如果不被手动 remove
掉,是一直存在的