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

现在做一个网站多少钱wordpress下载主题demo

现在做一个网站多少钱,wordpress下载主题demo,Wordpress博客怎么盈利,百度关键词热度查询工具对应 HBase 版本0.94.1#xff0c;对照了开源的版本和工作使用的某发行版 问题#xff1a;在 HBase shell 里面输入 flush table_or_region_name之后#xff0c;发生了什么#xff1f;具体的实现是怎么样的#xff1f;对于现有的某个表#xff0c;我如何在做操作之前估算… 对应 HBase 版本0.94.1对照了开源的版本和工作使用的某发行版 问题在 HBase shell 里面输入 flush table_or_region_name之后发生了什么具体的实现是怎么样的对于现有的某个表我如何在做操作之前估算 flush 执行的时间 1. HBase shell 入口 HBase shell 使用 ruby 实现在 putty 敲hbase shell调用的是${HBASE_HOME}/bin/hbase这个 bash 脚本根据shell这个参数触发调用 ruby 代码相关的部分如下 if [ $COMMAND shell ] ; then if [ $JRUBY_HOME ! ] ; then CLASSPATH$JRUBY_HOME/lib/jruby.jar:$CLASSPATH HBASE_OPTS$HBASE_OPTS -Djruby.home$JRUBY_HOME -Djruby.lib$JRUBY_HOME/lib fi CLASSorg.jruby.Main -XO ${JRUBY_OPTS} ${HBASE_HOME}/bin/hirb.rb 在 hirb.rb 里面引入相关的包${HBASE_HOME}/lib/ruby目录下然后启动一个运行的 CLI 环境。 进入正题了。 在 hbase shell 里面所有执行的命令都在${HBASE_HOME}/lib/ruby/shell/commands目录下有对应的${COMMAND}.rb的对应文件。 找到 flush.rb核心代码如下 def command(table_or_region_name) format_simple_command do admin.flush(table_or_region_name) end end 这里调用了 admin.rb 这个文件里面的方法 admin org.apache.hadoop.hbase.client.HBaseAdmin.new(configuration) def flush(table_or_region_name) admin.flush(table_or_region_name) end 到这里就找到了 Java 程序的入口调用了 HBaseAdmin.flush(table_or_region_name)这个方法。 后续几部分的类图如下 2. HBaseAdmin 包装 HBaseAdmin 类下面包含了三个 flush 方法 public void flush(String tableNameOrRegionName) throws IOException, InterruptedException {} public void flush(byte[] tableNameOrRegionName) throws IOException, InterruptedException {} private void flush(ServerName sn, HRegionInfo hri) throws IOException {} 第一个作为入口将 String 参数转化为 byte[]交给第二个第二个主要的工作方法按输入参数是 region 名、分区表、不分区表分别进行处理第三个单独针对 region 进行 flush第一个略过。 第二个逻辑清晰 如果是参数为 Region就调用第三个 flush 处理如果不是分区表就获取该表包含的所有 Region挨个调用第三个 flush 处理如果地分区表处理方式与其他的不同调用了一个分区表公共处理方法 execPartitionTableAction 订制实现了匿名类 PartitionTableActionCallableFactory进行单独处理。注意 对于没有预分区的表简单地在一个 for 循环里面串行处理对于分区表execPartitionTableAction中使用了并发数据结构 Future对分区是并行处理第三个对每个 Region 进行 flush实际上是第二个 flush 中所有 case 最终的归宿。 在第三个 flush 中实现代码如下 HRegionInterface rs this.connection.getHRegionConnection(sn.getHostname(), sn.getPort()); rs.flushRegion(hri); HRegionInterface 是一个抽象接口flushRegion 是一个抽象方法。在0.94.1这个版本下只有 HRegionServer 实现了 HRegionInterface 接口所以要在 HRegionServer 里面找到具体的代码实现。 3. HRegionServer 包装 在 HRegionServer 类里面包含了三个 flush 的实现 public void flushRegion(byte[] regionName) throws IllegalArgumentException, IOException {} public void flushRegion(byte[] regionName, long ifOlderThanTS) throws IllegalArgumentException, IOException {} QosPriority (priority100) public void flushRegion(HRegionInfo regionInfo) throws NotServingRegionException, IOException {}   第一个简单地传入 regionName确定 Region 在线然后调用region.flushcache()第二个传入 regionName 和 超时时间戳 ifOlderThanTS 确定 Region 在线且未超时的情况下将数据 flush 出去第三个QosPriority (priority100)标记使用了自定义声明给该方法赋值 rpc 调用的优先级方法体checkOpen()检查 RegionServer 在线后调用region.flushcache()接下来查看看下 HRegion 类下面flushcache()的实现。 4. HRegion 实现 flushcache只是个入口方法会做一些 flush 之前的准备工作包括建立任务状态监控、判断 Coprocessor、处理未 WAL 的 put 、写加锁等。之后调用内部方法internalFlushcache开始flush。 在 internalFlushcache 方法实现中做了 MVCC 的一些工作最终调用了StoreFlusher的flushCache方法实现。 internalFlushcache 为了保证数据一致性做了很多的检查、校验、加锁目前功力不够先标记下进入下一层。 看下 StoreFlusher 的实现。 5. StoreFlusher 实现 StoreFlusher 是个接口在0.94.1这个版本里面只有 Store.StoreFlusherImpl 一个实现类。 在 StoreFlusher 接口里面可以看到flush 操作执行的过程中包含3个部分 prepare这是个短操作创建 snapshot这个过程中会暂停写操作flushCacheflush 执行的过程中是不会阻塞该 store 上的任何操作读写commit将 flush 出的文件添加到 store 目录下清除 memstore 快照短操作会足暂停 scan6. StoreFlusherImpl 实现 StoreFlusherImpl 是 Store 类的内部私有类前面提到的 StoreFlusher 的3个方法由 StoreFlusherImpl实现后prepare 是自己实现flushCache和 commit 都是调用外部 Store类的方法来完成。 6.1 prepare public void prepare() { memstore.snapshot(); this.snapshot memstore.getSnapshot(); this.snapshotTimeRangeTracker memstore.getSnapshotTimeRangeTracker(); } 调用了 MemStore 的方法做快照。 6.2 flushCache 从 StoreFlusherImpl 调用 Store 类的flushCache方法包装了internalFlushCache方法来实现。 逻辑比较清晰 启动一个 StoreScanner根据时间戳和ScanType 参数找出需要被 Flush 的行启动一个StoreFile Writer把读出来的数据写入到一个 StoreFile 中并将该 StoreFile 的路径返回供后续 commit 阶段使用6.3 commit StoreFlusherImpl 类的 commit 方法首先调用外部 Store类的commitFile方法主要做的事情有两件 将 flushCache 生成的 StoreFile 移动到 Store所在目录下更新 Store 的相关统计参数然后会调用外部 Store类的updateStorefiles更新 Store 类的 storefile更新文件后需要调用needsCompaction()查看下是否因为本次 flush 执行造成的文件变化会触发 Compaction。如果触发 Compaction会启动 Compaction 相关的一套机制继续执行后续再单独介绍。 至此手动 flush 操作背后的实现初步梳理完毕。前面只是一个调用路径的梳理后面继续丰富和补充。转载于:https://www.cnblogs.com/YFYkuner/p/5152372.html
http://www.sadfv.cn/news/180113/

相关文章:

  • 贵州毕节建设局网站官网福田公司电话号码多少
  • 吉林市教做网站设计师培训班怎么样
  • 手机网站建设 上海ktv网站建设方案
  • 武进建设局网站南通网站制作专家
  • 咖啡网站建设的优势怎么自己用手机制作网页
  • 网站怎么做超链接做网站合肥
  • 永州 网站建设公司网站建设怎么计费
  • 建设电影网站怎么上传电影求职网站怎么做
  • 买了域名怎么做网站微信小程序投放
  • 企业网站平台模板网站有哪些在哪里下载
  • 北京一度网站建设东莞网站建设哪家最好
  • 网站架构建设方案百度订单售后电话
  • 什么网站做宣传好长春又出现一例
  • 有哪些网站做的比较好看的企业网站建设流程步骤
  • 建网站的模块hao123网址之家设为主页
  • ai做的网站怎么切图移动网上
  • 公司微信网站建设方案模板下载商标自动生成免费软件
  • 找别人做网站怎么防止后门免费简单网站
  • 网站开发的编程语言上海建设协会网站
  • 网站建设定制开发价格wordpress最近浏览
  • 诚信通旺铺网站建设网架加工费多少钱一吨
  • 系统优化软件推荐河北seo网络优化师
  • 直播平台网站建设制作微网站公司
  • 服务器怎么建设网站静态网站是什么意思
  • 大型网站的例子天都城网站建设
  • cp网站开发搭建大连网站建设策划
  • 浙江省建设厅信息中心网站wordpress固定连接设置去掉前缀
  • 加强心理咨询网站的建设毕业设计网站成品
  • 不想花钱做网站推广青岛网站制作企业
  • 双语言网站模版深圳建设管理中心网站