hbase

HBase的列式存储

女生的网名这么多〃 提交于 2020-01-07 12:08:47
为什么要选择列式存储   行式存储和列式存储主要是在物理存储的选择上面,这里主要是选择从实体的完整性角度进行存储,还是从实体特征维度进行存储,行式存储就是以实体为单位进行存储,在物理存储上,一个实体(的特征属性)紧挨着另外一个实体;列式存储就是从实体特征维度进行存储,通常是以列为物理存储单元,这种存储模式也决定了查询的模式也是基于列取查询;所以,当我们想要按照实体去查询列式存储的数据,一般都是需要并行查询,所以列式存储天生的是分布式数据库的架构。   在OLTP场景,更多的基于实体的维护和查询,但是在OLAP场景,则是更多地从实体特征角度进行数据处理(统计),所以在OLAP的场景下,如果还是使用行式存储,会导致大量的无谓的遍历,比如想要对某个列进行所有数据的统计,因为是行式存储,需要遍历所有的实体的所有的属性;如果列式存储,则只需要按照列进行查询即可,因为列式存储是以列一个物理存储单元,所以遍历只要遍历相应列的物理存储文件即可。   那么从这个角度上面来讲,HBase其实是行列存储的一个综合体,从宏观角度是按照列簇为单位进行存储,从微观角度,每一个列簇的单元是由key,value的键值对组成(可能是很多歌键值对,因为一个列簇可以包含很多列),但是values其实是行式存储,另外HBase并不建议采用度过列簇,列簇不要超过2个,所以列式存储的优势并没有完全发挥出来

Hbase常用shell操作

三世轮回 提交于 2020-01-07 12:03:23
1、进入HBase客户端命令操作界面 $ bin/hbase shell 2、查看帮助命令 hbase(main):001:0> help 3、查看当前数据库中有哪些表 hbase(main):002:0> list 4、创建一张表 创建user表,包含info、data两个列族 hbase(main):010:0> create 'user', 'info', 'data' 或者 hbase(main):010:0> create 'user', {NAME => 'info', VERSIONS => '3'},{NAME => 'data'} 5、添加数据操作 向user表中插入信息,row key为rk0001,列族info中添加name列标示符,值为zhangsan hbase(main):011:0> put ‘user’, ‘rk0001’, ‘info:name’, ‘zhangsan’ 向user表中插入信息,row key为rk0001,列族info中添加gender列标示符,值为female hbase(main):012:0> put 'user', 'rk0001', 'info:gender', 'female' 向user表中插入信息,row key为rk0001,列族info中添加age列标示符,值为20 hbase(main):013:0> put

Hbase的API(重点)

。_饼干妹妹 提交于 2020-01-07 11:17:10
开发javaAPI操作HBase表数据 1、创建表myuser public static void createTable() throws IOException { Configuration conf =new Configuration(); //连接hbase集群不需要指定hbase主节点的ip地址和端口号 conf.set("hbase.zookeeper.quorum","node01:2181,node02:2181,node03:2181"); //创建连接对象 Connection connection = ConnectionFactory.createConnection(conf); //获取连接对象,创建一张表 //获取管理员对象,来对数据库进行DDL的操作 Admin admin = connection.getAdmin(); //指定我们的表名 TableName myuser = TableName.valueOf("myuser"); HTableDescriptor hTableDescriptor = new HTableDescriptor(myuser); //指定两个列族 HColumnDescriptor f1 = new HColumnDescriptor("f1"); HColumnDescriptor f2 = new

HBase的rowkey的设计原则

…衆ロ難τιáo~ 提交于 2020-01-07 08:31:42
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> HBase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度可以对HBase中的数据进行快速定位。 HBase中rowkey可以唯一标识一行记录,在HBase查询的时候,有两种方式: 1、通过get方式,指定rowkey获取唯一一条记录 2、通过scan方式,设置startRow和stopRow参数进行范围匹配 3、全表扫描,即直接扫描整张表中所有行记录 rowkey长度原则: rowkey是一个二进制码流,可以是任意字符串,最大长度64kb,实际应用中一般为10-100bytes,以byte[]形式保存,一般设计成定长。建议越短越好,不要超过16个字节,原因如下: 数据的持久化文件HFile中是按照KeyValue存储的,如果rowkey过长,比如超过100字节,1000w行数据,光rowkey就要占用100*1000w=10亿个字节,将近1G数据,这样会极大影响HFile的存储效率; MemStore将缓存部分数据到内存,如果rowkey字段过长,内存的有效利用率就会降低,系统不能缓存更多的数据,这样会降低检索效率。 目前操作系统都是64位系统,内存8字节对齐,控制在16个字节

Spark SqlContext and Hbase: java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/util/Bytes

☆樱花仙子☆ 提交于 2020-01-07 05:01:09
问题 I am trying to access the Hive table in Spark which is created on top hBase table. sqlContext.sql("select * from dev.hive_habse_table") Eventhough I have included all the required jar, like this export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$(hbase classpath) and Initiated spark shell with Hive hbase handler in HDP 2.5 ( Spark 1.6.3) spark-shell --master yarn-client --conf spark.yarn.queue=uk --executor-cores 10 --executor-memory 20G --num-executors 15 --driver-memory 2G --jars hive-hbase-handler

Recovery in HBase

自作多情 提交于 2020-01-07 04:43:21
问题 HBase supports single row atomic transaction. For checking that practically. I had written the following code Increment inc=new Increment();//For writing it to WAL inc.getWritetoWAL(); Put p = new Put(Bytes.toBytes("name10")); p.add(Bytes.toBytes("cf"), Bytes.toBytes("name"),Bytes.toBytes("Some Value 10")); table.setAutoFlush(false); table.put(p); table.close(); To Check the recovery i had stopped the hbase immediately after executing(debugging in eclipse) the table.put(p) when i restarted

Bulk load to multiple HBase tables in single job

社会主义新天地 提交于 2020-01-07 04:09:25
问题 I want to bulk load data to mulitple tables using a single mapreduce job.Since the data volumes is high ,It would be time consuming to iterate through dataset twice and load using multiple jobs.Is there any way to do this ? Thanks in advance. 回答1: I am using Hbase. But i didnt need bulk load yet. But I came across this article which might help you. http://hbase.apache.org/book/arch.bulk.load.html The bulk load feature uses a MapReduce job to output table data in HBase's internal data format,

HBase+Kerberos: UserGroupInformation logging in from keytab expires?

谁说胖子不能爱 提交于 2020-01-07 00:58:15
问题 We are using the method UserGroupInformation.loginUserFromKeytabAndReturnUGI(user, keytab) to authenticate a Java program to write to a remote HBase cluster. When the application first starts up we are all good and it's talking to HBase happily. The krb5.conf ticket_lifetime is set to 24 hours, and what seems to happen after 24 hours is that the "TGT expires" and we start seeing exceptions like this: Exception encountered while connecting to the server : javax.security.sasl.SaslException: GSS

phoenix启动报错:org.apache.phoenix.exception.PhoenixIOException: SYSTEM.CATALOG

↘锁芯ラ 提交于 2020-01-07 00:23:07
错误: org.apache.phoenix.exception.PhoenixIOException: SYSTEM.CATALOG at org.apache.phoenix.util.ServerUtil.parseServerException(ServerUtil.java:144) at org.apache.phoenix.query.ConnectionQueryServicesImpl.metaDataCoprocessorExec(ConnectionQueryServicesImpl.java:1379) at org.apache.phoenix.query.ConnectionQueryServicesImpl.metaDataCoprocessorExec(ConnectionQueryServicesImpl.java:1343) at org.apache.phoenix.query.ConnectionQueryServicesImpl.getTable(ConnectionQueryServicesImpl.java:1560) at org.apache.phoenix.schema.MetaDataClient.updateCache(MetaDataClient.java:643) at org.apache.phoenix.schema

大数据-HBase安装

好久不见. 提交于 2020-01-06 21:58:05
HDFS基本环境(存储) 一 . 安装JDK 解压: rmp -ivh jdk-8u171-linux-x64.rpm 配置环境变量JAVA_HOME: vi .bashrc 注意: vi .bashrc 配置当前用户的环境变量 JAVA_HOME= / usr / soft / jdk1 . 8 CLASSPATH= . PATH= $PATH : $JAVA_HOME / bin export JAVA_HOME export CLASSPATH export PATH 更新配置: source .bashrc 二 . 关闭防火墙 systemclt stop firewalld 关闭防火墙 systemclt disable firewalld 关闭开机自启 三. 配置主机名和IP映射关系 vi /etc/hostname vi /etc/hosts 更改完主机名需要重启 reboot 四. 配置SSH免密码登录 生成公私钥: ssh-keygen -t rsa 将公钥配置到登录机器的信任文件中: ssh-copy-id 主机名 测试: ssh 主机名 五. 安装hadoop 并解压 注意: /soft 是我特意在 /usr 下创建放软件的目录 tar -zxvf hadoop-2.9.2.tar.gz -C /usr/soft/ 配置环境变量 HADOOP_HOME vi