hbase基本操作(如何将hbase.site.xml导入项目)

2024-07-22 03:36:57 4

hbase基本操作(如何将hbase.site.xml导入项目)

本文目录

如何将hbase.site.xml导入项目

方法1:最基本的数据导入方法。首先通过JDBC将原本关系型数据库中的数据读出到内存中,然后在使用HBase自带的客户端API将数据put到相应的表中。这种方法通用性强,只要写好接口就可以用,但是效率并不高。 方法2:使用这种方法之前其实是需要先将数据导出到本地,以文本的形式保存,然后使用TableReudcer类编写MapReduce job。这种方法需要频繁的I/O操作,所以效率不高,容易导致HBase节点的不稳定。 方法3:importtsv是HBase内置的数据导入工具,目的是将tsv格式的文件加载到HBase中,本质上它是通过调用MapReudce Job实现数据导入的。注意:使用该方法,需要提前将数据导出到本地,以tsv格式存储。unbulk load模式的importtsv效果一般,适用于小型的数据。 方法4:bulk load是一个快速大量数据高效导入工具,相比于importtsv效率更高。 方法5:Sqoop是apache软件基金会的一个项目,可以用来实现关系型数据库和hdfs,hbase,hive之间的数据高效传输。只需要做一些简单的配置,通过Sqoop命令行指令就可以方便的实现数据导入和导出。下面具体介绍每种方法的做法:JDBC & HBase Client API此处以MySql为例。首先在MySql数据库中创建database ‘test’,然后创建一张表’Info’,这里可以使用可视化软件(例如workbench),也可以直接在命令行输入相应指令::~$mysql -u root -p #root用户登录mysql#创建Info表CREATE TABLE Info (`ID` INT NOT NULL, `Name` VARCHAR(45) NOT NULL, `Number` INT NOT NULL, `Time` VARCHAR(45) NOT NULL, PRIMARY KEY (`ID`));12345671234567然后使用load指令将准备好的数据导入到Info中。数据格式与Info各字段的一致即可。load data local infile ’/home/lvyang/Desktop/test.csv’ into table Info fields terminated by ’,’ 11到此数据已经准备好了。下面就可以进行数据导出导入过程了。 由于需要使用MySql的数据读取接口,所以我们需要到官网下载相应的connector,并将其中包含的mysql-connector-java-版本号-bin.jar文件取出,添加到自己Project的依赖库中。如果对maven比较熟的,就可以忽视这些配置过程,直接配置pom.xml文件即可完成项目依赖设置,方便快捷。 JDBC数据读取:public class JDBCUtils { Connection conn=null; ResultSet rs=null; String databaseName=null; String userName=null; String password=null; String url=null; public JDBCUtils(String databaseName, String userName, String password, String url); public void connect(); public ResultSet readData(String sql); public void writeToConsole(ResultSet rs,String keys); public boolean writeToLocal(ResultSet rs,String path); public void close();}12345678910111213141234567891011121314上面是JDBC工具类定义,可以根据自己的需求,自行添加或者删除方法。部分方法的实现如下,仅做参考:public void connect(){ try { Class.forName("com.mysql.jdbc.Driver"); //注册驱动 System.out.println("load mysql driver successfully!"); conn= (Connection) DriverManager.getConnection(url); //获得connection对象,完成数据库连接 } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }} public ResultSet readData(String sql){ try { Statement stmt= (Statement) conn.createStatement(); //创建statement对象 rs=stmt.executeQuery(sql); //执行query命令,获取ResultSet } catch (SQLException e) { e.printStackTrace(); } return rs;}public void close(){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } }}123456789101112131415161718192021222324252627282930313233343536123456789101112131415161718192021222324252627282930313233343536到此JDBC读取数据部分已经完成,下面需要实现HBase数据导入功能:public class HBaseUtils { private static final Log LOG= LogFactory.getLog(HBaseUtils.class); //LOG用于输出部分关键信息 //Here I choose construct func to init configuration instance //and then use connectionFactory to create init conn instance //at last,I use conn to get Hadmin instance //next I will use Hadmin to operate hbase tables private Configuration conf=null; private Admin Hadmin=null; private Connection conn=null; public HBaseUtils(Configuration conf); public void connect(); public boolean isExist(String tableName); public boolean createTable(String tableName,String columnFamily); public boolean writeOne(HashMap《String,String》 data,String keys, String tableName,String columnFamily); public boolean writeMore(List《HashMap《String,String》》 list,String keys,String tableName,String columnFamily); public boolean deleteTable(String tableName); public void close();}123456789101112131415161718123456789101112131415161718部分方法的实现如下,仅做参考:public void connect(){ try { //create connection to hbase conn= ConnectionFactory.createConnection(conf); //get Hadmin which is the database manager Hadmin=conn.getAdmin(); } catch (IOException e) { e.printStackTrace(); if(conn!=null){ try { conn.close(); } catch (IOException e1) { e1.printStackTrace(); } } if(Hadmin!=null){ try { Hadmin.close(); } catch (IOException e1) { e1.printStackTrace(); } } }}public boolean createTable(String tableName,String columnFamily){ /** * create table * here I limit the number of column family to 1 * So here only can create one column family’s table * **/ TableName table_name= TableName.valueOf(tableName); LOG.info("Create table:"+tableName+" now!"); HTableDescriptor tableDesc=new HTableDescriptor(table_name); HColumnDescriptor columnDesc=new HColumnDescriptor(columnFamily); tableDesc.addFamily(columnDesc); try { this.Hadmin.createTable(tableDesc); } catch (IOException e) { e.printStackTrace(); return false; } return true;}public boolean writeOne(HashMap《String,String》 data,String keys, String tableName,String columnFamily){ /** * write one data to table at one time * here I choose the first key as the rowKey,because I think the first key usually is the primary key * **/ boolean flag=false; TableName table_name=TableName.valueOf(tableName); byte column_family=columnFamily.getBytes(); try { Table table=conn.getTable(table_name); byte).toString().getBytes(); //construct HBase table’s rowKey Put put=new Put(rowKey); for(int i=0;i《keys.length;i++){ byte.getBytes(); byte).toString().getBytes(); put.addColumn(column_family,key,value); } table.put(put); table.close(); flag=true; } catch (IOException e) { e.printStackTrace(); } return flag;}public void close(){ /** * close connection * **/ LOG.info("Close connection to HBase!"); if(Hadmin!=null){ try { Hadmin.close(); } catch (IOException e) { e.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (IOException e) { e.printStackTrace(); } }}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878812345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788到此,工具类已经基本完成,下面需要写一个主类:public class deMain { public static void main(String args){ //JDBC Init Connection conn=null; String sql="select * from Info"; String databaseName="test"; String userName="root"; String password="****"; String url="jdbc:mysql://localhost:3306/"+databaseName+"?user="+userName+"&password=" +password+"&useUnicode=true&characterEncoding=utf-8"; //HBase Client Init String tableName="test"; String columnFamily="info"; Configuration conf= HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum","127.0.0.1"); conf.set("hbase.master","localhost:9000"); } //JDBC connection and read data JDBCUtils ju=new JDBCUtils(databaseName,userName,password,url); ju.connect(); ResultSet rs=ju.readData(sql); //HBase connect HBaseUtils hbu=new HBaseUtils(conf); hbu.connect(); //依次读取rs中每条记录,并将其写入HBase相应表中即可 ......... //close all connection hbu.close(); ju.close();}123456789101112131415161718192021222324252627282930123456789101112131415161718192021222324252627282930到此,大功告成!由于是通过IDE端运行hadoop程序,所以我们需要将需要用到的依赖库导入,而这个过程如果不借助maven的话,就会特别的痛苦。下图是我配置的项目依赖包,仅供参考。 这里写图片描述注:hadoop2.7.2,hbase1.2.1,zookeeper3.4.6

c++ 程序如何操作hbase例如:创建表格,插入数据,查询数据等等

这个问题有相当的难度,同为Hadoop出身的Hypertable和Hbase分别倾向于C和Java,Hbase本身并没有开放面向C的API,但是可以通过Thrift实现,Hbase已经发布了ThriftAPI用以Hbase与C程序之间的交互,ThriftAPI可以参见wiki上一篇文章:***隐藏网址***例外Thrift的使用也可以参见下面两篇文章:***隐藏网址******隐藏网址***还有一种方法比较常用的,就是直接用JNI连接,上层使用Java与Hbase通信,但是有点绕,C++与Hbase的直接通信现在还没有,你可以考虑一下我说的Thrift和JNI 对不起,我也没有用过,可以根据上面的几篇文章自己试一下,按说Thrift作为一种中间渠道,支持Thrift应该都可以操作Hbase

hbase命令行方式插入一条数据到某个表中使用什么命令

命令:disable ’tableName’ --disable表。注:修改表结构时,必须要先disable表。命令:enable ’tableName’ --使表可用命令:drop ’tableName’ --删除表

hbase是如何做到并发写的和随机写的

阅读数:9381Hbase概述 hbase是一个构建在HDFS上的分布式列存储系统。HBase是Apache Hadoop生态系统中的重要 一员,主要用于海量结构化数据存储。从逻辑上讲,HBase将数据按照表、行和列进行存储。如图所示,Hbase构建在HDFS之上,hadoop之下。其内部管理的文件全部存储在HDFS中。与HDFS相比两者都具有良好的容错性和扩展性,都可以 扩展到成百上千个节点。但HDFS适合批处理场景,不支持数据随机查找,不适合增量数据处理且不支持数据更新。Hbase是列存储的非关系数据库。传统数据库MySQL等,数据是按行存储的。其没有索引的查询将消耗大量I/O 并且建立索引和物化视图需要花费大量时间和资源。因此,为了满足面向查询的需求,数据库必须被大量膨胀才能满 足性能要求。Hbase数据是按列存储-每一列单独存放。列存储的优点是数据即是索引。访问查询涉及的列-大量降低系统I/O 。并且每一列由一个线索来处理,可以实现查询的并发处理。基于Hbase数据类型一致性,可以实现数据库的高效压缩。HBase数据模型HBase是基于Google BigTable模型开发的, 典型的key/value系统。一个Row key对应很多Column Family,Column Family中有很多Column。其中,保存了不同时间戳的数据。如图所示,Rowkey cutting对应列簇info和roles。其中,info中有key-value对hight-9ft,state-CA。更清晰的结构如下图所:Hbase的所有操作均是基于rowkey的。支持CRUD(Create、Read、Update和Delete)和 Scan操作。 包括单行操作Put 、Get、Scan。多行操作包括Scan和MultiPut。但没有内置join操作,可使用MapReduce解决。HBase物理模型 Hbase的Table中的所有行都按照row key的字典序排列。Table 在行的方向上分割为多个Region。、Region按大小分割的,每个表开始只有一个region,随 着数据增多,region不断增大,当增大到一个阀值的时候, region就会等分会两个新的region,之后会有越来越多的 region。Region是HBase中分布式存储和负载均衡的最小单元。 不同Region分布到不同RegionServer上。Region虽然是分布式存储的最小单元,但并不是存储 的最小单元。Region由一个或者多个Store组成,每个store保存一个 columns family。每个Strore又由一个memStore和0至多个StoreFile组成。memStore存储在内存中,StoreFile存储在HDFS上。 HBase基本架构 HBase构建在HDFS之上,其组件包括 Client、zookeeper、HDFS、Hmaster以及HRegionServer。Client包含访问HBase的接口,并维护cache来加快对HBase的访问。Zookeeper用来保证任何时候,集群中只有一个master,存贮所有Region的寻址入口以及实时监控Region server的上线和下线信息。并实时通知给Master存储HBase的schema和table元数据。HMaster负责为Region server分配region和Region server的负载均衡。如果发现失效的Region server并重新分配其上的region。同时,管理用户对table的增删改查操作。Region Server 负责维护region,处理对这些region的IO请求并且切分在运行过程中变得过大的region。HBase 依赖ZooKeeper,默认情况下,HBase 管理ZooKeeper 实例。比如, 启动或者停止ZooKeeper。Master与RegionServers 启动时会向ZooKeeper注册。因此,Zookeeper的引入使得 Master不再是单点故障。Client每次写数据库之前,都会首先血Hlog日志。记录写操作。如果不做日志记录,一旦发生故障,操作将不可恢复。HMaster一旦故障,Zookeeper将重新选择一个新的Master 。无Master过程中,数据读取仍照常进行。但是,无master过程中,region切分、负载均衡等无法进行。RegionServer出现故障的处理原理是定时向Zookeeper汇报心跳,如果一旦时 间内未出现心跳HMaster将该RegionServer上的Region重新分配到其他RegionServer上。失效服务器上“预写”日志由主服务器进行分割并派送给新的 RegionServer 。Zookeeper是一个可靠地服务,一般配置3或5个Zookeeper实例。 寻找RegionServer定位的顺序是ZooKeeper --ROOT-(单Region) -.META. -用户表 。如上图所示。-ROOT- 表包含.META.表所在的region列表,该表只会有一 个Region。 Zookeeper中记录了-ROOT-表的location。 .META. 表包含所有的用户空间region列表,以及 RegionServer的服务器地址。 HBase应用举例 Hbase适合需对数据进行随机读操作或者随机写操作、大数据上高并发操作,比如每秒对PB级数据进行上千次操作以及读写访问均是非常简单的操作。 淘宝指数是Hbase在淘宝的一个典型应用。交易历史纪录查询很适合用Hbase作为底层数据库。

hbase是什么工具

将数据导入HBase中有如下几种方式:使用HBase的API中的Put方法使用HBase 的bulk load 工具使用定制的MapReduce Job方式 使用HBase的API中的Put是最直接的方法,用法也很容易学习。但针对大部分情况,它并非都是最高效的方式。当需要将海量数据在规定时间内载入HBase中时,效率问题体现得尤为明显。待处理的数据量一般都是巨大的,这也许是为何我们选择了HBase而不是其他数据库的原因。在项目开始之前,你就该思考如何将所有能够很好的将数据转移进HBase,否则之后可能面临严重的性能问题。 HBase有一个名为 bulk load的功能支持将海量数据高效地装载入HBase中。Bulk load是通过一个MapReduce Job来实现的,通过Job直接生成一个HBase的内部HFile格式文件来形成一个特殊的HBase数据表,然后直接将数据文件加载到运行的集群中。使用bulk load功能最简单的方式就是使用importtsv 工具。importtsv 是从TSV文件直接加载内容至HBase的一个内置工具。它通过运行一个MapReduce Job,将数据从TSV文件中直接写入HBase的表或者写入一个HBase的自有格式数据文件。尽管importtsv 工具在需要将文本数据导入HBase的时候十分有用,但是有一些情况,比如导入其他格式的数据,你会希望使用编程来生成数据,而MapReduce是处理海量数据最有效的方式。这可能也是HBase中加载海量数据唯一最可行的方法了。当然我们可以使用MapReduce向HBase导入数据,但海量的数据集会使得MapReduce Job也变得很繁重。若处理不当,则可能使得MapReduce的job运行时的吞吐量很小。在HBase中数据合并是一项频繁执行写操作任务,除非我们能够生成HBase的内部数据文件,并且直接加载。这样尽管HBase的写入速度一直很快,但是若合并过程没有合适的配置,也有可能造成写操作时常被阻塞。写操作很重的任务可能引起的另一个问题就是将数据写入了相同的族群服务器(region server),这种情况常出现在将海量数据导入到一个新建的HBase中。一旦数据集中在相同的服务器,整个集群就变得不平衡,并且写速度会显著的降低。我们将会在本文中致力于解决这些问题。我们将从一个简单的任务开始,使用API中的Put方法将MySQL中的数据导入HBase。接着我们会描述如何使用 importtsv 和 bulk load将TSV数据文件导入HBase。我们也会有一个MapReduce样例展示如何使用其他数据文件格式来导入数据。上述方式都包括将数据直接写入HBase中,以及在HDFS中直接写入HFile类型文件。本文中最后一节解释在向HBase导入数据之前如何构建好集群。本文代码均是以Java编写,我们假设您具有基本Java知识,所以我们将略过如何编译与打包文中的Java示例代码,但我们会在示例源码中进行注释。

hbase清理数据 用setTimeRange 方法怎么脚本实现

HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务。 1. 简介 HBase是一个分布式的、面向列的开源数据库,源于google的一篇论文《bigtable:一个结构化数据的分布式存储系统》。HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务。 2. HBase的表结构 HBase以表的形式存储数据。表有行和列组成。列划分为若干个列族/列簇(column family)。 Row Key column-family1 column-family2 column-family3 column1 column2 column1 column2 column3 column1 key1 key2 key3 如上图所示,key1,key2,key3是三条记录的唯一的row key值,column-family1,column-family2,column-family3是三个列族,每个列族下又包括几列。比如column-family1这个列族下包括两列,名字是column1和column2,t1:abc,t2:gdxdf是由row key1和column-family1-column1唯一确定的一个单元cell。这个cell中有两个数据,abc和gdxdf。两个值的时间戳不一样,分别是t1,t2, hbase会返回最新时间的值给请求者。这些名词的具体含义如下:(1) Row Key与nosql数据库们一样,row key是用来检索记录的主键。访问hbase table中的行,只有三种方式:(1.1) 通过单个row key访问(1.2) 通过row key的range(1.3) 全表扫描Row key行键 (Row key)可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在hbase内部,row key保存为字节数组。存储时,数据按照Row key的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)注意:字典序对int排序的结果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。要保持整形的自然序,行键必须用0作左填充。行的一次读写是原子操作 (不论一次读写多少列)。这个设计决策能够使用户很容易的理解程序在对同一个行进行并发更新操作时的行为。(2) 列族 column familyhbase表中的每个列,都归属与某个列族。列族是表的chema的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如courses:history , courses:math 都属于 courses 这个列族。访问控制、磁盘和内存的使用统计都是在列族层面进行的。实际应用中,列族上的控制权限能帮助我们管理不同类型的应用:我们允许一些应用可以添加新的基本数据、一些应用可以读取基本数据并创建继承的列族、一些应用则只允许浏览数据(甚至可能因为隐私的原因不能浏览所有数据)。(3) 单元 CellHBase中通过row和columns确定的为一个存贮单元称为cell。由{row key, column( =《family》 + 《label》), version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。(4) 时间戳 timestamp每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64位整型。时间戳可以由hbase(在数据写入时自动 )赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,hbase提供了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。3. HBase shell的基本用法hbase提供了一个shell的终端给用户交互。使用命令hbase shell进入命令界面。通过执行 help可以看到命令的帮助信息。以网上的一个学生成绩表的例子来演示hbase的用法。name grad course math art Tom 5 97 87 Jim 4 89 80 这里grad对于表来说是一个只有它自己的列族,course对于表来说是一个有两个列的列族,这个列族由两个列组成math和art,当然我们可以根据我们的需要在course中建立更多的列族,如computer,physics等相应的列添加入course列族。

HBase从入门到精通11:HBase数据保存过程和Region分裂

本节来介绍一下HBase的数据保存过程和Region分裂过程的相关知识。 HBase中表的数据是存储在RegionServer上的一个个Region中的,表的一个列族对应于一个Region。Region是按照数据行键Rowkey的字典序来存储数据的。假如我们有一张表Bigdata,该表有一个列族Info,该列族下有一个列Name,且为了便于说明,假设行键和Name相同,按照行键字典序保存数据的过程如下图所示: HBase保存数据的流程有以下几个步骤: HBase表的列族在创建之初只有一个Region,随着插入数据的增多Region变得越来越大。过大的Region使得查询效率降低,因此当Region的大小超过某一阈值时,HBase将执行Region的分裂操作:即将一个大Region拆分成两个相等规模的小Region。具体的Region分裂过程如下图所示: HBase的Region分裂过程需要注意以下几个问题: 虽然Region分裂后可以提高HBase的读写性能,但是Region分裂过程会对集群网络造成很大的压力,尤其是要分裂的Region尺寸过大、数目过多时,甚至可以使整个集群瘫痪。例如,当年京东的Region分裂事件,造成整个集群瘫痪9个小时以上,无法对外提供服务,经济损失可想而知。 因此,应该根据实际需求将Region分裂的阈值设置的合理一些,太小会频繁触发分裂,太大分裂时会对网络传输造成一定的压力。

hbase源代码 纯java开发的吗

这里我们用一个学生成绩表作为例子,对HBase的基本操作和基本概念进行讲解:下面是学生的成绩表:name grad course:math course:artTom 1 87 97Jerry 2 100 80 这里grad对于表来说是一个列,course对于表来说是一个列族,这个列族由两个列组成:math和art,当然我们可以根据我们的需要在course中建立更多的列族,如computer,physics等相应的列添加入course列族. 有了上面的想法和需求,我们就可以在HBase中建立相应的数据表啦!1, 建立一个表格 scores 具有两个列族grad 和couresehbase(main):002:0》 create ’scores’, ’grade’, ’course’0 row(s) in 4.1610 seconds2,查看当先HBase中具有哪些表hbase(main):003:0》 listscores1 row(s) in 0.0210 seconds3,查看表的构造hbase(main):004:0》 describe ’scores’{NAME =》 ’scores’, IS_ROOT =》 ’false’, IS_META =》 ’false’, FAMILIES =》 }1 row(s) in 0.0130 seconds4, 加入一行数据,行名称为 Tom 列族grad的列名为”” 值位1hbase(main):005:0》 put ’scores’, ’Tom’, ’grade:’, ’1’0 row(s) in 0.0070 seconds5,给Tom这一行的数据的列族添加一列 《math,87》hbase(main):006:0》 put ’scores’, ’Tom’, ’course:math’, ’87’0 row(s) in 0.0040 seconds6,给Tom这一行的数据的列族添加一列 《art,97》hbase(main):007:0》 put ’scores’, ’Tom’, ’course:art’, ’97’0 row(s) in 0.0030 seconds7, 加入一行数据,行名称为 Jerry 列族grad的列名为”” 值位2hbase(main):008:0》 put ’scores’, ’Jerry’, ’grade:’, ’2’0 row(s) in 0.0040 seconds8,给Jerry这一行的数据的列族添加一列 《math,100》hbase(main):009:0》 put ’scores’, ’Jerry’, ’course:math’, ’100’0 row(s) in 0.0030 seconds9,给Jerry这一行的数据的列族添加一列 《art,80》hbase(main):010:0》 put ’scores’, ’Jerry’, ’course:art’, ’80’0 row(s) in 0.0050 seconds10,查看scores表中Tom的相关数据hbase(main):011:0》 get ’scores’, ’Tom’COLUMN CELLcourse:art timestamp=1224726394286, value=97course:math timestamp=1224726377027, value=87grade: timestamp=1224726360727, value=13 row(s) in 0.0070 seconds11,查看scores表中所有数据

hbase scan的startRow和endRow

举一个场景,安全领域的溯源分析,查询维度包括ip,时间戳,端口,协议,可能根据前两的维度的一个或者几个进行原始日志查询,我们可以把原始日志存储到hbase中,而前面提到的几个维度可以分别作为key的一部分。 首先我们应该考虑的是rowkey的设置,第一:散列或者反转,保证数据会随机分布到不同的region当中。第二:预分区,先对数据做一个基本的统计,比如我们预分十个区,我们可以统计一下每个区的startrow和endrow,这样保证每个区的数据相当,另外这样的好处是当我们根据rowkey查询的时候,可以保证直接定位到某个分区。我们线上的数据就是采用的第二种方式。 然后我们应该考虑rowkey的组成。分两种情况,第一种情况:维度不是特别多,我们完全可以把各个维度分别作为rowkey的一部分,比如上文提到的需求,就是采用的这种方式,因为一共四个维度,相对来说比较少。第二种情况:维度过多,如果都作为rowkey的一部分的话长度太大,此时建议考虑二级索引,举个例子:比如对于上面提到的四个维度,如果现在进行扩展,ip,端口,协议需要定位到源和目的,这样的话,整个维度提升到了七个,此时就建议采用二级索引。 目前我们已经确定了hbase存储,并且采用预分区的方式并且采用rowkey进行过滤查询,那么现在考虑rowkey的设计。从技术角度考虑,预分区的方式时间戳不能作为第一部分,这样一定会出现数据倾斜的现象;从业务角度考虑,我们定位日志的时候,首先需要定位ip,然后是端口,最后才是协议,也就是说我们的用户去定位日志的时候,如果定位到端口,那必须先定位ip,如果定位协议的话,必须先定位ip和端口。 综上所述,我们的rowkey设计为ip+timestamp+port+prot 设计搞定之后,我们再考虑查询的问题。我们知道对于hbase的查询,最快的方式就是get,这样的话,可以迅速定位到一条数据。而get查询其实就是scan的特殊情况,只是startRow和endRow一样。所以此时我们可以采用scan+startRow+endRow的方式进行操作。 e.g 这样的话就可以吧该范围的数据查出来,当然我们可以再在内存中进行过滤 当着startRow和endRow需要注意一些情况。 ***隐藏网址***

hbase基本操作(如何将hbase.site.xml导入项目)

本文编辑:admin

本文相关文章:


hbase基本操作(hbase scan的startRow和endRow)

hbase基本操作(hbase scan的startRow和endRow)

本文目录hbase scan的startRow和endRowhbase清理数据 用setTimeRange 方法怎么脚本实现hbase命令行方式插入一条数据到某个表中使用什么命令hbase源代码 纯java开发的吗hbase是如何做到并发写

2024年7月23日 07:26

更多文章:


asp中session加密(ASP中的Session用法,请各位帮帮忙..)

asp中session加密(ASP中的Session用法,请各位帮帮忙..)

本文目录ASP中的Session用法,请各位帮帮忙..ASP关于 Session进行安全验证的问题 急ASP程序中Session的问题求教 怎么在asp.net页面里面写一个session之类的验证代码 需要输入密码才能进入这个页面我才学a

2024年7月24日 06:41

tkinter漂亮gui界面模板(如何使用pyQT做pythonGUI界面)

tkinter漂亮gui界面模板(如何使用pyQT做pythonGUI界面)

本文目录如何使用pyQT做pythonGUI界面python图形界面GUI——Tkinter的构造函数问题python 编写gui界面有哪些如何使用pyQT做pythonGUI界面首先,如果没有安装python和PyQt软件的请先直接搜索下

2024年7月23日 13:41

pywinauto获取控件(python pywinauto能控制任意的.exe进程吗)

pywinauto获取控件(python pywinauto能控制任意的.exe进程吗)

其实pywinauto获取控件的问题并不复杂,但是又很多的朋友都不太了解python pywinauto能控制任意的.exe进程吗,因此呢,今天小编就来为大家分享pywinauto获取控件的一些知识,希望可以帮助到大家,下面我们一起来看看这

2024年7月28日 00:55

java程序员电脑配置(java对电脑的配置要求是)

java程序员电脑配置(java对电脑的配置要求是)

本文目录java对电脑的配置要求是做java程序员需要什么的电脑配置问一下各位技术大牛,我想以后敲代码,用什么配置的笔记本电脑学java用什么电脑配置预算6000元左右,作为一名java程序员,买哪款笔记本电脑比较好华硕无畏162022可以

2024年6月27日 22:31

htmliframe属性(html里有两个iframe,怎么实现一个iframe里的HTML函数和属性能调用另一个iframe里的HTML函数和属性)

htmliframe属性(html里有两个iframe,怎么实现一个iframe里的HTML函数和属性能调用另一个iframe里的HTML函数和属性)

本文目录html里有两个iframe,怎么实现一个iframe里的HTML函数和属性能调用另一个iframe里的HTML函数和属性html中的iframe标签的用法html里有两个iframe,怎么实现一个iframe里的HTML函数和属性

2024年5月9日 04:46

java哪个版本好(谁知道JAVA有几个版本,哪个版本好些现在JAVA最高的版本是怎么样的)

java哪个版本好(谁知道JAVA有几个版本,哪个版本好些现在JAVA最高的版本是怎么样的)

本文目录谁知道JAVA有几个版本,哪个版本好些现在JAVA最高的版本是怎么样的Java现在用到的程序最常用的是哪个版本,最高级到了哪个版本具体比较一下Java目前各版本的优劣java开发工具选哪个版本较好现在Java主要流行什么版本谁知道J

2024年5月29日 14:07

易语言进度条进程(易语言进度条)

易语言进度条进程(易语言进度条)

本文目录易语言进度条易语言进度条教程易语言怎样让进度条完成后运行某个程序(又补充)易语言的进度条怎么弄!才能像安装软件那样会加载!或者像游戏进度那样!该怎么弄!求大神赐教!易语言进度条利用时钟啊 时钟的事件给你个源码吧希望你满意------

2024年5月20日 12:14

免费模板下载word(简历word模板在哪里可以下载)

免费模板下载word(简历word模板在哪里可以下载)

本文目录简历word模板在哪里可以下载简历模板免费下载word 文档简历word模板在哪里可以下载可以下载极速ofice使用,打开任意Word文档后,点击工具栏“模板”跳转到在线模板页面,找到Word模板后,输入简历进行搜索,就会看到很多模

2024年7月5日 02:32

excel一维垂直数组(excel里面怎么把横向的数据变成竖向的,最好是用函数的)

excel一维垂直数组(excel里面怎么把横向的数据变成竖向的,最好是用函数的)

本文目录excel里面怎么把横向的数据变成竖向的,最好是用函数的Excel 如何定义一维数组常量excel中{1,3,5}这是水平数组还是垂直数组Excel一维垂直数组中元素用()分开Excel 如何提取一维内存数组中的唯一元素excel里

2024年7月22日 02:04

直播软件开发app(开发一款视频直播App软件需要多少钱)

直播软件开发app(开发一款视频直播App软件需要多少钱)

本文目录开发一款视频直播App软件需要多少钱直播类视频App软件怎么开发直播软件怎么开发的(直播app怎么开发)开发直播app软件有哪些实施方法请问一下开发一款直播APP软件需要多少费用开发一款直播类APP要多少钱、功能开发一款视频直播Ap

2024年2月6日 04:00

fetch怎么读音发音(请帮帮整理英语音标!谢谢)

fetch怎么读音发音(请帮帮整理英语音标!谢谢)

本文目录请帮帮整理英语音标!谢谢拿出英文怎么读请帮帮整理英语音标!谢谢基本按你要求发了~不满意就只能表示摊手了~单元音-e- yes/jes/ yellow/ˈjeləʊ/ bed/bed/ teddy /ˈtedi/发音时舌尖抵下齿,舌前

2024年6月3日 08:44

微信域名防封技术(想请教一下微信域名防封原理是什么呢)

微信域名防封技术(想请教一下微信域名防封原理是什么呢)

本文目录想请教一下微信域名防封原理是什么呢微信域名防封技术,微信域名总是被封如何解决微信域名防封,微信网址域名防封防屏蔽的几种方法域名总被微信封 域名被微信屏蔽怎么办如何做微信域名防封网址域名被微信拦截屏蔽怎么办微信怎么防封域名2022微信

2024年4月16日 05:18

sql inserted(sql server中的触发器问题:当批量增删数据时,inserted和deleted中的数据会多于一行吗)

sql inserted(sql server中的触发器问题:当批量增删数据时,inserted和deleted中的数据会多于一行吗)

本文目录sql server中的触发器问题:当批量增删数据时,inserted和deleted中的数据会多于一行吗刚刚接触触发器,问一下后面 inserted干嘛用的,还有begin有何作用sql server 2005在使用触发器时,IN

2024年6月26日 15:31

电脑和手机的web互通吗(服服的app和web端有什么区别ipad能用吗)

电脑和手机的web互通吗(服服的app和web端有什么区别ipad能用吗)

本文目录服服的app和web端有什么区别ipad能用吗网易《我的世界》手机和电脑互通吗电脑wegame和手机wegane互通吗用java web编程技术既能编写电脑版网页又能编写手机版网页吗我就想知道手机版和电脑版数据是不是互通手机网页和电

2024年7月8日 17:38

西门子plc手机编程软件(西门子PLC编程软件是什么)

西门子plc手机编程软件(西门子PLC编程软件是什么)

各位老铁们,大家好,今天由我来为大家分享西门子plc手机编程软件,以及西门子PLC编程软件是什么的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录西门

2024年8月31日 10:55

优慕课在线教育平台app(优慕课能检测到切屏吗)

优慕课在线教育平台app(优慕课能检测到切屏吗)

这篇文章给大家聊聊关于优慕课在线教育平台app,以及优慕课能检测到切屏吗对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录优慕课能检测到切屏吗优慕课播课视频在哪看优慕课和优慕课v8的区别优慕课和课程伴侣一样吗课程伴侣和优慕课一样

2024年6月28日 15:45

u3d是做什么的(u3d和ue4有什么区别)

u3d是做什么的(u3d和ue4有什么区别)

本篇文章给大家谈谈u3d是做什么的,以及u3d和ue4有什么区别对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录u3d和ue4有什么区别u3

2024年9月6日 05:50

smilemo(smile more,worry less.怎么读)

smilemo(smile more,worry less.怎么读)

本文目录smile more,worry less.怎么读smilemo什么时候出smile more,worry less.怎么读英文原文:smile more,worry less.英式音标: . 美式音标: .smilemo什么时候出

2024年7月22日 12:35

javaswitch循环语句(java的switch语句)

javaswitch循环语句(java的switch语句)

其实javaswitch循环语句的问题并不复杂,但是又很多的朋友都不太了解java的switch语句,因此呢,今天小编就来为大家分享javaswitch循环语句的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录ja

2024年8月6日 00:20

迪奥官网官方网(dior官网香港官方网,迪奥门店)

迪奥官网官方网(dior官网香港官方网,迪奥门店)

本文目录dior官网香港官方网,迪奥门店dior中文官方网站迪奥在网上有没有官网迪奥公司简介,迪奥官网官方网站迪奥客服中心电话,dior护肤品官网dior英国官方网站,迪奥客服电话人工迪奥Dior香水品牌介绍及Dior官方网站是迪奥的英文名

2024年7月9日 07:06

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1154
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1151
标签列表

热门搜索