统计Azure存储的HBase各表数据量
场景:HBase存储在Azure上,现在通过访问Azure Storage的接口,获取HBase中各个表的数据量。
注意:
1、Azure存储,默认的副本数为2,即共存3份,但只收1份的费用,取到的size也是1份的大小。如果是自建HDFS,则不同。
2、此处访问的是Azure Storage的接口,还可以访问HBase的接口来获取数据量(另行验证)。
c#代码:
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
public class HBaseResourceFetcher
{ private CloudBlobContainer blobContainer; public HBaseResourceFetcher()
{
StorageCredentials storageCred = new StorageCredentials(
AppConfigGetter.Get(ConfigConstants.KEY_STORAGEACCOUNTNAME),
AppConfigGetter.Get(ConfigConstants.KEY_STORAGEACCOUNTKEY));
CloudStorageAccount storageAccount = new CloudStorageAccount(storageCred,
AppConfigGetter.Get(ConfigConstants.KEY_ENDPOINTSUFFIX), true);
var blobClient = storageAccount.CreateCloudBlobClient();
this.blobContainer = blobClient.GetContainerReference(
AppConfigGetter.Get(ConfigConstants.KEY_STORAGECONTAINERNAME));
} public Dictionary<string, ResourceEntity> GetHBaseTableSizeInfo()
{
Dictionary<string, ResourceEntity> result = new Dictionary<string, ResourceEntity>();
CloudBlobDirectory directory = this.blobContainer.GetDirectoryReference("hbase/data/default");
if (directory == null)
return result; var items = directory.ListBlobs();
foreach (var item in items)
{
if (item is CloudBlobDirectory)
{
var dir = item as CloudBlobDirectory;
string key = dir.Prefix.Replace("hbase/data/default/", "").Replace("/", "");
if (result.ContainsKey(key)) continue;
result.Add(key, new ResourceEntity() {
Type = ResourceType.HBase,
TableName=key,
CopiesNum=,//Azure存储,HDFS默认的副本数为2,即共存3份,但只收1份的费用,故此处记为0
Size_B = GetFileSizeByBlobPath(dir.Prefix)//Azure存储,HDFS默认的副本数为2,即共存3份,但只收1份的费用,此处取到的size也是1份的大小
});
}
}
return result;
} public long GetFileSizeByBlobPath(string directoryPath)
{
CloudBlobDirectory directory = this.blobContainer.GetDirectoryReference(directoryPath);
if (directory == null)
return ;
var items = directory.ListBlobs(true, BlobListingDetails.All).Where(item => (item as CloudBlockBlob).Properties.Length > );
long size = ;
foreach (var item in items)
{
var tmp = (item as CloudBlockBlob);
if (tmp.Name.Contains(".regioninfo") || tmp.Name.Contains(".tableinfo") || tmp.Name.Contains("recovered.edits")) continue;
string[] guid = tmp.Name.Replace(directoryPath, "").Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
size += tmp.Properties.Length;
}
return size;
}
}
统计Azure存储的HBase各表数据量的更多相关文章
- 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作
CSSDesk body { background-color: #2574b0; } /*! zybuluo */ article,aside,details,figcaption,figure,f ...
- sql server编写通用脚本自动统计各表数据量心得
工作过程中,如果一个数据库的表比较多,手工编写统计脚本就会比较繁琐,于是摸索出自动生成各表统计数据量脚本的通用方法,直接上代码: /* 脚本来源:https://www.cnblogs.com/zha ...
- HBase协处理器统计表数据量
1.Java代码实现 import org.apache.hadoop.hbase.client.coprocessor.AggregationClient; import org.apache.ha ...
- SOME:收缩数据库日志文件,查看表数据量和空间占用,查看表结构索引修改时间
---收缩数据库日志文件 USE [master]ALTER DATABASE yourdatabasename SET RECOVERY SIMPLE WITH NO_WAITALTER DATAB ...
- 表数据量影响MySQL索引选择
现象 新建了一张员工表,插入了少量数据,索引中所有的字段均在where条件出现时,正确走到了idx_nap索引,但是where出现部分自左开始的索引时,却进行全表扫描,与MySQL官方所说的最左匹配原 ...
- [源码分享] HIVE表数据量统计&邮件
概要: 计算HIVE BI库下每天数据表总大小及增量 输出: 总大小:xxxG 日同比新增数据量:xxxG 周同比新增数据量:xxxG 月同比新增数据量:xxxG 总表数:xxx 日新增表数:xxx ...
- MySQL单表数据量过千万,采坑优化记录,完美解决方案
问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...
- HBase 清空表数据
public int clearTableByTableName(String tableName) throws Exception { logger.debug("======InitH ...
- sql sever 查询用户所有的表和各个表数据量
和oracle有区别, 需要关联表 SELECT A.NAME ,B.ROWS FROM sysobjects A JOIN sysindexes B ON A.id = B.id WHERE A ...
随机推荐
- Drupal8学习之路--官网文档碎碎记--主题篇
主要记录一些琐碎的知识点. 1.“In Drupal 8 drupal_add_css(), drupal_add_js() and drupal_add_library()were removed ...
- android开启线程的误区
发现一些刚学android的人,和我当初一样,对android的线程会存在着一定误区. 在android中,开启新线程时,一些人会用以下方法: new Handler().post(r); 但是这样并 ...
- fuzz系列之libfuzzer
前言 本文以 libfuzzer-workshop 为基础 介绍 libFuzzer 的使用. libFuzzer简介 libFuzzer 是一个in-process,coverage-guided, ...
- Android自带语音播报+讯飞语音播报封装(直接用)
一.Android自带的语音播报 1.查看是否支持中文,在测试的设备中打开‘设置’ -->找到 '语言和输入法'-->查看语音选项,是否支持中文,默认仅支持英文. 使用如下: public ...
- linux yum list、search、-y、install、update、remove、grouplist、groupinstall、groupremove
redhat使用yum需要付费yum安装的也是rpm包 centos的网络yum源默认已经配置好了,连接的是centos官方yum源,在国外,网速慢 yum源配置在/etc/yum.repos.d下 ...
- java基础(二) 自增自减与贪心规则
引言 JDK中提供了自增运算符++,自减运算符--.这两个操作符各有两种使用方式:前缀式(++ a,--a),后缀式(a++,a--).可能说到这里,说不得有读者就会吐槽说,前后缀式都挺简单的,前 ...
- springMVC结合AjaxForm上传文件
最近在项目中需要上传文件文件,之前一直都是form提交的,尝试了一下AjaxForm,感觉还比较好用,写篇随笔mark下,供以后使用. 准备工作: 下载jquery-form.js 相关jar: co ...
- oracle数据泵备份(Expdp命令)
Oracle备份方式主要分为数据泵导出备份.热备份与冷备份三种,今天首先来实践一下数据泵备份与还原.数据泵导出/导入属于逻辑备份,热备份与冷备份都属于物理备份.oracle10g开始推出了数据泵(ex ...
- 从一个简单的 JPA 示例开始
本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示例:接着重构该示例,并引入 Sp ...
- ASP.NET 通过配置hiddenSegment禁止目录下资源通过Url形式访问
根据默认的ASP.NET配置,App_Data下的资源是禁止通过Url形式直接访问的,在实际开发中,可能也会有这样的需求,比如某些是系统资源目录,该目录下的资源也需要像App_Data目录一样禁止访问 ...