当前位置: 首页 > news >正文

接广告的网站网络营销软件推广

接广告的网站,网络营销软件推广,公司网站建设代理怎么做,网站前台模板免费下载为什么选择HBase 1、海量存储 Hbase适合存储PB级别的海量数据#xff0c;在PB级别的数#xff0c;能在几十到几百毫秒内返回数据。这与Hbase的极易扩展性息息相关。正是因为Hbase良好的扩展性#xff0c;才为海量数据的存储提供了便利。 2、列式存储 这里的列式存储其实说的…为什么选择HBase 1、海量存储 Hbase适合存储PB级别的海量数据在PB级别的数能在几十到几百毫秒内返回数据。这与Hbase的极易扩展性息息相关。正是因为Hbase良好的扩展性才为海量数据的存储提供了便利。 2、列式存储 这里的列式存储其实说的是列族存储Hbase是根据列族来存储数据的。HBase中的每个列都由Column Family(列族)和Column Qualifier列限定符进行限定例如infonameinfoage。 3、极易扩展 Hbase的扩展性主要体现在两个方面一个是基于上层处理能力RegionServer的扩展一个是基于存储的扩展HDFS。 通过横向添加RegionSever的机器进行水平扩展提升Hbase上层的处理能力提升Hbsae服务更多Region的能力。 4、稀疏 稀疏主要是针对Hbase列的灵活性在列族中你可以指定任意多的列在列数据为空的情况下是不会占用存储空间的。 5、 数据多版本 数据多版本每个单元中的数据可以有多个版本默认情况下版本号自动分配版本号就是单元格插入时的时间戳。 HBase架构与角色 架构图 角色 1Region Server Region Server为 Region的管理者其实现类为HRegionServer主要作用如下: 对于数据的操作get, put, delete 对于Region的操作splitRegion、compactRegion。 StoreFile 保存实际数据的物理文件StoreFile以Hfile的形式存储在HDFS上。每个Store会有一个或多个StoreFileHFile数据在每个StoreFile中都是有序的。 MemStore 写缓存由于HFile中的数据要求是有序的所以数据是先存储在MemStore中排好序后等到达刷写时机才会刷写到HFile每次刷写都会形成一个新的HFile。 WAL 由于数据要经MemStore排序后才能刷写到HFile但把数据保存在内存中会有很高的概率导致数据丢失为了解决这个问题数据会先写在一个叫做Write-Ahead logfile的文件中然后再写入MemStore中。所以在系统出现故障的时候数据可以通过这个日志文件重建。 BlockCache 读缓存每次查询出的数据会缓存在BlockCache中方便下次查询。 2Master Master是所有Region Server的管理者其实现类为HMaster主要作用如下 对于表的操作create, delete, alter 对于RegionServer的操作分配regions到每个RegionServer监控每个RegionServer的状态负载均衡和故障转移。 3Zookeeper HBase通过Zookeeper来做master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作。 4HDFS HDFS为Hbase提供最终的底层数据存储服务同时为HBase提供高可用的支持。 HBase存储结构 逻辑结构 物理存储结构 1Name Space 命名空间类似于关系型数据库的database概念每个命名空间下有多个表。HBase两个自带的命名空间分别是hbase和defaulthbase中存放的是HBase内置的表default表是用户默认使用的命名空间。 2Table 类似于关系型数据库的表概念。不同的是HBase定义表时只需要声明列族即可不需要声明具体的列。这意味着往HBase写入数据时字段可以动态、按需指定。因此和关系型数据库相比HBase能够轻松应对字段变更的场景。 3Row HBase表中的每行数据都由一个RowKey和多个Column列组成数据是按照RowKey的字典顺序存储的并且查询数据时只能根据RowKey进行检索所以RowKey的设计十分重要。 4Column HBase中的每个列都由Column Family(列族)和Column Qualifier列限定符进行限定例如infonameinfoage。建表时只需指明列族而列限定符无须预先定义。 5Time Stamp 用于标识数据的不同版本version每条数据写入时系统会自动为其加上该字段其值为写入HBase的时间。 6Cell 由{rowkey, column Familycolumn Qualifier, time Stamp} 唯一确定的单元。cell中的数据是没有类型的全部是字节码形式存贮。 HBase写流程 写流程 1Client先访问zookeeper获取hbase:meta表位于哪个Region Server。 2访问对应的Region Server获取hbase:meta表根据读请求的namespace:table/rowkey查询出目标数据位于哪个Region Server中的哪个Region中。并将该table的region信息以及metA表的位置信息缓存在客户端的meta cache方便下次访问。 3与目标Region Server进行通讯。 4将数据顺序写入追加到WAL。 5将数据写入对应的MemStore数据会在MemStore进行排序。 6向客户端发送ack。 7等达到MemStore的刷写时机后将数据刷写到HFile。 MemStore刷写时机 1当某个memstroe的大小达到了默认值128M其所在region的所有memstore都会刷写。 hbase.hregion.memstore.flush.size默认值128M 当memstore的大小达到了以下会阻止继续往该memstore写数据。 block.multiplier默认值4如果一个Memstore的内存大小已经超过hbase.hregion.memstore.flush.size * hbase.hregion.memstore.block.multiplier则会阻塞该Memstore的写操作为避免阻塞可以适当调大例如6~8但如果太大则会有OOM的风险 hbase.hregion.memstore.flush.size默认值128Mhbase.hregion.memstore.block.multiplier默认值4 2 当region server中memstore的总大小达到java_heapsize百分比时候region会按照其所有memstore的大小顺序由大到小依次进行刷写。直到region server中所有memstore的总大小减小到下述值以下。 HBase 为 RegionServer 的 MemStore 分配了一定的写缓存 大小等于 hbase_heapsizeRegionServer 占用的堆内存大小* hbase.regionserver.global.memstore.size。hbase.regionserver.global.memstore.size 的默认值是 0.4 也就是说写缓存大概占用 RegionServer 整个 JVM 内存使用量的 40%。 如果整个 RegionServer 的 MemStore 占用内存总和大于 hbase.regionserver.global.memstore.size.lower.limit * hbase.regionserver.global.memstore.size * hbase_heapsize 的时候 将会触发 MemStore 的刷写。 其中 hbase.regionserver.global.memstore.size.lower.limit 的默认值为 0.95。 hbase.regionserver.global.memstore.size默认值0.4 hbase.regionserver.global.memstore.size.lower.limit默认值0.95 当region server中memstore的总大小达到java_heapsize时会阻止继续往所有的memstore写数据。 hbase.regionserver.global.memstore.size默认值0.4 3 到达自动刷写的时间也会触发memstore flush。自动刷新的时间间隔由该属性进行配置。 hbase.regionserver.optionalcacheflushinterval默认1小时 4 当WAL文件的数量超过hbase.regionserver.max.logs最大值为32region会按照时间顺序依次进行刷写。 HBase读流程 读流程 1Client先访问zookeeper获取hbase:meta表位于哪个Region Server。 2访问对应的Region Server获取hbase:meta表根据读请求的namespace:table/rowkey查询出目标数据位于哪个Region Server中的哪个Region中。并将该table的region信息以及meta表的位置信息缓存在客户端的meta cache方便下次访问。 3与目标Region Server进行通讯。 4分别在MemStore和Store FileHFile中查询目标数据并将查到的所有数据进行合并。此处所有数据是指同一条数据的不同版本time stamp或者不同的类型Put/Delete。 5将查询到的新的数据块BlockHFile数据存储单元默认大小为64KB缓存到Block Cache。 6将合并后的最终结果返回给客户端。 StoreFile Compaction 由于memstore每次刷写都会生成一个新的HFile且同一个字段的不同版本timestamp和不同类型Put/Delete有可能会分布在不同的HFile中因此查询时需要遍历所有的HFile。为了减少HFile的个数以及清理掉过期和删除的数据会进行StoreFile Compaction。 Compaction分为两种分别是Minor Compaction和Major Compaction。Minor Compaction会将邻近的若干个较小的HFile合并成一个较大的HFile并清理掉部分过期和删除的数据。Major Compaction会将一个Store下的所有的HFile合并成一个大HFile并且会清理掉所有过期和删除的数据。 Region Split 默认情况下每个Table起初只有一个Region随着数据的不断写入Region会自动进行拆分。刚拆分时两个子Region都位于当前的Region Server但处于负载均衡的考虑HMaster有可能会将某个Region转移给其他的Region Server。 Region Split时机 当1个region中的某个Store下所有StoreFile的总大小超过下面的值该Region就会进行拆分。 Min(initialSize*R^3 ,hbase.hregion.max.filesize)其中initialSize的默认值为2*hbase.hregion.memstore.flush.sizeR为当前Region Server中属于该Table的Region个数 具体的切分策略为 第一次split1^3 * 256 256MB 第二次split2^3 * 256 2048MB 第三次split3^3 * 256 6912MB 第四次split4^3 * 256 16384MB 10GB因此取较小的值10GB 后面每次split的size都是10GB了。 HBase与Hive的对比 Hive (1) 数据仓库 Hive的本质其实就相当于将HDFS中已经存储的文件在Mysql中做了一个双射关系以方便使用HQL去管理查询。 (2) 用于数据分析、清洗 Hive适用于离线的数据分析和清洗延迟较高。 (3) 基于HDFS、MapReduce Hive存储的数据依旧在DataNode上编写的HQL语句终将是转换为MapReduce代码执行。 HBase 1数据库 是一种面向列存储的非关系型数据库。 2 用于存储结构化和非结构化的数据 适用于单表非关系型数据的存储不适合做关联查询类似JOIN等操作。 3 基于HDFS 数据持久化存储的体现形式是Hfile存放于DataNode中被ResionServer以region的形式进行管理。 4 延迟较低接入在线业务使用 面对大量的企业数据HBase可以直线单表大量数据的存储同时提供了高效的数据访问速度。 预分区 每一个region维护着startRow与endRowKey如果加入的数据符合某个region维护的rowKey范围则该数据交给这个region维护。那么依照这个原则我们可以将数据所要投放的分区提前大致的规划好以提高HBase性能。 方式 1手动设定预分区 create staff,info,partition,SPLITS [100000,200000,300000,400000] 216进制序列预分区 create staff,info,partition,{NUMREGIONS 15, SPLITALGO HexStringSplit} 3按照文件中设置的规则预分区 1111 2222 3333 4444create staff,partition,SPLITS_FILE splits.txt 4JavaAPI创建预分区 //自定义算法产生一系列Hash散列值存储在二维数组中 byte[][] splitKeys 某个散列值函数 //创建HBaseAdmin实例 HBaseAdmin hAdmin new HBaseAdmin(HBaseConfiguration.create()); //创建HTableDescriptor实例 HTableDescriptor tableDesc new HTableDescriptor(tableName); //通过HTableDescriptor实例和散列值二维数组创建带有预分区的HBase表 hAdmin.createTable(tableDesc, splitKeys); RowKey设计 设计原则 1rowkey长度原则 Rowkey是一个二进制数据流Rowkey的长度建议设计在10-100个字节不过建议是越短越好不要超过16个字节。如果设置过长会极大影响Hfile的存储效率。 MemStore将缓存部分数据到内存如果Rowkey字段过长内存的有效利用率降低系统将无法缓存更多的数据这会降低检索效率。 2rowkey散列原则 如果Rowkey是按时间戳的方式递增不要将时间放在二进制码的前面建议将Rowkey的高位作为散列字段由程序循环生成低位放时间字段这样将提高数据均衡分布在每个Regionserver实现负载均衡的几率。如果没有散列字段首字段直接是时间信息将产生所有新数据都在一个 RegionServer上堆积的热点现象这样在做数据检索的时候负载将会集中在个别RegionServer降低查询效率。 3rowkey唯一原则 如何设计 1生成随机数、hash、散列值 2字符串反转 HBase优化 高可用 在HBase中Hmaster负责监控RegionServer的生命周期均衡RegionServer的负载如果Hmaster挂掉了那么整个HBase集群将陷入不健康的状态并且此时的工作状态并不会维持太久。所以HBase支持对Hmaster的高可用 内存优化 HBase操作过程中需要大量的内存开销毕竟Table是可以缓存在内存中的一般会分配整个可用内存的70%给HBase的Java堆。但是不建议分配非常大的堆内存因为GC过程持续太久会导致RegionServer处于长期不可用状态一般16~48G内存就可以了如果因为框架占用内存过高导致系统内存不足框架一样会被系统服务拖死。 配置优化 1开启HDFS追加同步可以优秀的配合HBase的数据同步和持久化。默认值为true。 dfs.support.append 2HBase一般都会同一时间操作大量的文件根据集群的数量和规模以及数据动作设置为4096或者更高。默认值4096。 fs.datanode.max.transfer.threads 3优化延迟高的数据操作的等待时间 如果对于某一次数据操作来讲延迟非常高socket需要等待更长的时间建议把该值设置为更大的值默认60000毫秒以确保socket不会被timeout掉。 dfs.image.transfer.timeout 4优化数据的写入效率 开启这两个数据可以大大提高文件的写入效率减少写入时间。第一个属性值修改为true第二个属性值修改为org.apache.bigdata.io.compress.GzipCodec或者其他压缩方式。 mapreduce.map.output.compress mapreduce.map.output.compress.codec 5优化HStore文件大小 默认值10GB如果需要运行HBase的MR任务可以减小此值因为一个region对应一个map任务如果单个region过大会导致map任务执行时间过长。该值的意思就是如果HFile的大小达到这个数值则这个region会被切分为两个Hfile。 hbase.hregion.max.filesize 6优化HBase客户端缓存 用于指定HBase客户端缓存增大该值可以减少RPC调用次数但是会消耗更多内存反之则反之。一般我们需要设定一定的缓存大小以达到减少RPC次数的目的。 hbase.client.write.buffer (7) 指定scan.next扫描HBase所获取的行数 用于指定scan.next方法获取的默认行数值越大消耗内存越大。 hbase.client.scanner.caching 8flush、compact、split机制 当MemStore达到阈值将Memstore中的数据Flush进Storefilecompact机制则是把flush出来的小文件合并成大的Storefile文件。split则是当Region达到阈值会把过大的Region一分为二。 128M就是Memstore的默认阈值hbase.hregion.memstore.flush.size134217728 当MemStore使用内存总量达到HBase.regionserver.global.memstore.upperLimit指定值时将会有多个MemStores flush到文件中MemStore flush 顺序是按照大小降序执行的直到刷新到MemStore使用内存略小于lowerLimit hbase.regionserver.global.memstore.upperLimit0.4hbase.regionserver.global.memstore.lowerLimit0.38 Phoenix二级索引 在Hbase中按字典顺序排序的rowkey是一级索引。不通过rowkey来查询数据时需要过滤器来扫描整张表。通过二级索引这样的场景也可以轻松定位到数据。 二级索引的原理通常是在写入时针对某个字段和rowkey进行绑定查询时先根据这个字段查询到rowkey然后根据rowkey查询数据二级索引也可以理解为查询数据时多次使用索引的情况。 索引 全局索引 全局索引适用于多读少写的场景在写操作上会给性能带来极大的开销因为所有的更新和写操作DELETE,UPSERT VALUES和UPSERT SELECT都会引起索引的更新,在读数据时Phoenix将通过索引表来达到快速查询的目的。 本地索引 本地索引适用于写多读少的场景当使用本地索引的时候即使查询的所有字段都不在索引字段中时也会用到索引进行查询Phoneix在查询时会自动选择是否使用本地索引。 覆盖索引 只需要通过索引就能返回所要查询的数据所以索引的列必须包含所需查询的列。 函数索引 索引不局限于列可以合适任意的表达式来创建索引当在查询时用到了这些表达式时就直接返回表达式结果 索引优化 1根据主表的更新来确定更新索引表的线程数 index.builder.threads.max:默认值10 2builder线程池中线程的存活时间 index.builder.threads.keepalivetime默认值60 3更新索引表时所能使用的线程数(即同时能更新多少张索引表)其数量最好与索引表的数量一致 index.write.threads.max:默认值10 (4) 更新索引表的线程所能存活的时间 index.write.threads.keepalivetime默认值60 (5) 每张索引表所能使用的线程(即在一张索引表中同时可以有多少线程对其进行写入更新)增加此值可以提高更新索引的并发量 hbase.htable.threads.max默认值2147483647 (6) 索引表上更新索引的线程的存活时间 hbase.htable.threads.keepalivetime默认值60 (7) 允许缓存的索引表的数量 增加此值可以在更新索引表时不用每次都去重复的创建htable由于是缓存在内存中所以其值越大其需要的内存越多 index.tablefactoy.cache.size默认值10
http://www.dnsts.com.cn/news/9409.html

相关文章:

  • 网站做什么内容赚钱北京工程建设交易中心网站
  • 企业网站怎么注册网站流量ip造假图片
  • 汽车之家网站做的很烂自己做网站的成本
  • 四川铁科建设监理有限公司官方网站天津网站开发工资水平
  • 网站框架图wordpress提高打开速度慢
  • 网站建设江门视频直播平台开发
  • 湛江市政工程建设公司网站logo设计公司介绍
  • 用php做电商网站有哪些青岛网站设计公司推荐
  • 做网站路由器映射外网房屋设计网站有哪些
  • 网站开发参考书目大理 网站建设
  • 商城小程序开发多少钱网站优化和提升网站排名怎么做
  • 南昌网站建设培训学校网站集约化建设工作总结
  • 带icp备案的网站男生怎么找的小资源
  • 色彩设计网站科技项目申报
  • 网站优化建设工作总结范文网站建设推广优化岗位说明书
  • 甘肃再就业建设集团网站高端网站报价
  • ftp 网站管理塘下做网站
  • 网站建设怎么分析市场成都十大骗子公司
  • 有没有什么 网站能够做试卷犀牛云网站建设费用
  • 辽宁省建设厅官方网站职称评定安徽软件开发公司
  • 通常做网站要多久高端自适应网站设计
  • 服装网站设计方案上海网络公司查询
  • 文登区城乡建设和规划局网站网页游戏大全4399
  • 自己做网站 需要哪些阜阳做网站的网络公司
  • 做网站数据需求分析好的优化网站推广公司
  • 美食网站主页怎么做软件开发外包交易平台
  • 工程建设网站怎么提交wordpress在线视频插件
  • 网站建设个人职责网站更换域名seo
  • 鹿邑网站设计公司软件开发模型是什么
  • 上海网站建设市场分析简单个人网页制作