php可以做网站吗,wordpress 另类加速,上海自己注册公司流程及费用,给小说网站做编辑HBase
1. RowKey如何设计#xff0c;设计不好会产生什么后果
唯一原则#xff1a;在设计上要保持RowKey的唯一性。
因为HBase中的数据是以KV的格式来存储的#xff0c;所以如果向同一张表中插入RowKey相同的数据#xff0c;旧的数据会被覆盖掉。
长度原则#xff1a;建…HBase
1. RowKey如何设计设计不好会产生什么后果
唯一原则在设计上要保持RowKey的唯一性。
因为HBase中的数据是以KV的格式来存储的所以如果向同一张表中插入RowKey相同的数据旧的数据会被覆盖掉。
长度原则建议RowKey的长度不要过长最好不要超过十六字节。对齐RowKey长度。
因为数据的持久化文件HFile是按照Key Value存储的如果RowKey的长度过长会使得文件过大从而影响HFile的存储效率。MemStore将缓存部分数据到内存如果RowKey的长度过长就会导致内存的有效利用率降低系统将无法缓存更多的数据降低检索速率。
散列原则设计出来的RowKey需要均匀的分布在各个RegionServer上。
如果数据分布的不均匀就可能会造成数据倾斜的发生进一步导致热点问题的出现最终造成节点崩溃。
2. 列族如何设计为什么不建议HBase设计过多列族 HBase的列族不是越多越好官方推荐一个表的列族最好不超过三个过多的列族不利于HBase数据的管理和索引。 将所有相关性很强的key_value都放在同一个列族。这样可以增加查询效率减少访问不同的磁盘文件。 列族的长度尽可能小一个是为了增加查询速率一个是为了节省空间。 内存开销列族过多内存开销会逐渐积累导致RegionServer的内存占用增加影响集群的稳定性。磁盘开销过多的列族会导致更多的磁盘寻址和IO操作增加磁盘开销。查询性能下降查询跨越多个列族会影响性能。写入性能下降写入操作需要锁定列族列族过多会导致性能下降。 3. HBase读取数据的流程 Client访问Zookeeper获取hbase:meta所在的HRegionServer的节点信息Client访问hbase:meta所在的HRegionServer获取hbase:meta记录的元数据后加载到内存中然后再从内从中查询出RowKey所在的HregionHRegion所在的HRegionServerClient对RowKey所在的HRegion对应的HRegionServer发起读取请求HRegionServer构建RegionScanner需要查询的RowKey分布在多少个HRegion中就需要构建多少个RegionScanner用于对该HRegion的数据检索RegionScanner构建StoreScannerHRegion中有多少个Store就需要构建多少个StoreScannerStore的数量取决于表中的列族的数量用于对该列族的检索所有的StoreScanner合并构建最小堆已排序的完全二叉树StoreHeap:PriorityQueueStoreScanner构建一个MemStoreScanner和一个或多个StoreFIleScanner数量取决于StoreFile的数量过滤掉能够确定索要查询的RowKey一定不存在的StoreFileScanner或MemStoreScanner布隆过滤器经过筛选后留下的Scanner开始做读取数据的准备将对应的StoreFile定位到满足的RowKey的起始位置将所有的StoreFileScanner和MemStoreScanner合并构建最小堆KeyValueHeap:PriorityQueue排序的规则按照KeyValue从小到大排序从KeyValueHeapPriorityQueue中经过一系列筛选后一行行的得到需要查询的KeyValue。
4. HBase写入数据的流程
Client访问ZooKeeper,获取hbase:meta所在的HRegionServer的节点信息Client访问hbase:meta所在的HRegionServer获取hbase:meta记录的元数据后现加载到内存中然后再从内存中查询出RowKey所在的HRegionHRegion所在的HRegionServerClient对RowKey所在的HRegion对应的HRegionServer发起写入请求建立连接后首先将DML要做的操作写入到日志HLog然后将数据的修改更新到MemStore中本次操作结束。一个HRegion由多个Store组成一个Store对应一个列族Store包括位于内存的MemStore和位于磁盘的StoreFile写入操作先写入MemStore当MemStore数据达到阈值后128M创建一个新的MemStore旧的MemStore将刷写成为一个独立的StoreFIleHRegionServer会启动FlushCache进程写入StoreFIle并存放到HDFS最后删除HLog中的历史数据。
5. Hive 和 HBase的区别
HBase和Hive都是架构在Hadoop之上的都使用了HDFS作为底层存储。
不同点
Hive是一个数仓工具可以将结构化数据映射为表格。HBase是一个分布式的非关系型数据库。Hive本身并不存储和计算数据它底层通过Hadoop的MapReduce框架来处理数据。HBase底层使用HDFS和ZooKeeper分布式协调服务来存储和管理数据。HBase是物理表提供了一个超大内存的Hash表搜索引擎通过它来存储索引方便查询操作。Hive不支持随机写入操作HBase支持随机写入操作。Hive适合查询和分析结构化数据HBase适合存储和查询非结构化数据。
6. 为什么要使用Phoenix
提供标准的SQL以及完备的ACID事务支持通过利用HBase作为存储让NoSQL数据库具备通过有模式的方式读取数据可以使用SQL语句来操作HBase。Phoenix通过协处理器在服务器端执行操作最小化客户机/服务器数据传输。Phoenix可以很好地与其他的Hadoop组件整合到一起例如Spark、Hive等。
Phoenix只是在HBase之上构建了SQL查询引擎Phoenix可以使用SQl快速查询HBase中的数据但是数据的底层必须符合HBase的存储结构HBase结合Phoenix可以实现海量数据的快速随机读写。Phoenix就相当于一个特别好用的皮肤方便了程序员的操作。
7. HBase的热点Key会产生什么问题
HBase中的热点Key是指在同一时间内被频繁访问的行键造成少数RegionServer的读写请求过多负载过大而其他RegionServer负载却很小造成热点现象。
读写性能下降由于多个请求涌入到一台RegionServer中导致该RegionServer的负载过高从而影响读写性能。均衡性差由于不同RegionServer负责不同的Region而热点Key的存在会导致某些RegionServer的负载过高从而影响整个集群的负载不平衡。单点故障如果某个RegionServer负责的某个Region出现热点Key问题该RegionServer发生故障会导致该Region不可用从而影响整个集群的可用性。
避免HBase的热点Key的方式
合理设计RowKey采用哈希算法对RowKey进行分片使数据分布更均匀使用预分区技术
8. 说一说HBase的数据刷写与合并
数据刷写FLush数据刷写是将内存中的数据写入到磁盘存储的过程。在HBase中写入的数据首先会被缓存在内存的MemStore中而不是直接写入磁盘。当MemStore中的数据达到一定大小阈值时或者出发了一定的时间阈值HBase会将该MemStore中的数据刷写到磁盘生成一个新的Store文件。这样可以减少磁盘的随机写入操作提高写入性能。
数据合并Comoaction数据合并是将多个Store文件合并成为一个更大的文件的过程。在HBase中随着数据的写入和删除会产生大量的小文件这样对于查询操作会引入额外的磁盘寻址开销。为了优化性能和减少磁盘空间的占用HBase会定期执行那个数据合并操作。数据合并会将多个Store文件合并成更大的文件从而减少文件数量和磁盘寻址次数。
触发数据合并的三种方式MemStore刷盘后台线程周期性检查手动触发。小合并Minor Compaction当一个Region中的Store文件达到一定的数量或累积了一定大小时会触发小合并。小合并只会合并相邻的几个Store文件并生成一个新的更大的文件。 不做任何删除数据、多版本数据的清理工作但是会对 minVersion0 并且设置 TTL 的过期版本数据进行清理。 大合并Major Compaction当一个Region中的Store文件数量达到一定阈值或者手动触发大合并操作时会执行大合并。大合并会将所有的Store文件都合并为一个更大的文件。大合并 可以进一步优化查询性能和节省磁盘空间但相应地需要更多的计算和IO资源。 清理三类无意义数据被删除的数据、TTL 过期数据、版本号超过设定版本号的数据。