一,Hbase概述
HBase是建 立在 HDFS 之上,被设计用来提供高可靠性、高性能、列存储、可伸缩、多版本的 NoSQL 的分布式数据存储系统,实现对大型数据的实时、随机的读写访问。
HBase 依赖于 HDFS 做底层的数据存储, 依赖于 MapReduce 做数据计算, 依赖于 ZooKeeper 做服务协调。
它介于 NoSQL 和 RDBMS 之间,仅能通过主键(rowkey)和主键的 range 来检索数据。HBase 查询数据功能很简单,不支持 join 等复杂操作。 不支持复杂的事务,只支持行级事务(可通过 hive 支持来实现多表 join 等复杂操作)。HBase 中支持的数据类型:byte[](底层所有数据的存储都是字节数组)主要用来存储结构化和半结构化的松散数据。
HBase 中的表特点
大:一个表可以有上十亿行,上百万列。
面向列:面向列(族)的存储和权限控制,列(簇)独立检索。
稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一 张表中不同的行可以有截然不同的列。
二,Hbase的结构
Rowkey的概念和mysql中的主键是完全一样的,Hbase使用Rowkey来唯一的区分某一行的数据。
Column的概念,列,可理解成MySQL列。
mkdir /root/hbase mkdir /root/hbase/tmp mkdir /root/hbase/pids
5,修改/conf/hbase-env.sh
export JAVA_HOME=/home/java/jdk1.8 export HADOOP_HOME=/home/hadoop/hadoop2.8 export HBASE_HOME=/home/hbase/hbase-1.2.6 export HBASE_CLASSPATH=/home/hadoop/hadoop2.8/etc/hadoop export HBASE_PID_DIR=/root/hbase/pids export HBASE_MANAGES_ZK=false
6,修改hbase-site.xml
<!-- 存储目录 --> <property> <name>hbase.rootdir</name> <value>hdfs://server1:9000/hbase</value> <description>The directory shared byregion servers.</description> </property> <!-- hbase的端口 --> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> <description>Property from ZooKeeper'sconfig zoo.cfg. The port at which the clients will connect. </description> </property> <!-- 超时时间 --> <property> <name>zookeeper.session.timeout</name> <value>120000</value> </property> <!-- zookeeper 集群配置。如果是集群,则添加其它的主机地址 --><property> <name>hbase.zookeeper.quorum</name> <value>server1</value> </property> <property> <name>hbase.tmp.dir</name> <value>/root/hbase/tmp</value> </property> <!-- false是单机模式,true是分布式模式 如果是单机模式则调用自身的zookeeper--><property> <name>hbase.cluster.distributed</name> <value>true</value>
</property>
7,在成功启动Hadoop之后
切换到HBase目录下
cd /home/hbase/hbase-1.2.6/bin
输入:./start-hbase.sh
在浏览器输入:http://server1:16010/
进入shell客户端:hbase shell 推出shell客户端:exit HBase表的操作: 创建表:create '表名',{NAME => '列簇名',VERSIONS => 版本号} 查看表:list 查看表的详细信息:desc '表名' 修改表的定义alter: 添加一个列簇:alter '表名',NAME => '列簇名' 删除一个列簇:alter '表名',NAME => '列簇名', METHOD => 'delete' 或者:alter '表名','delete' => 'myCard' 添加列簇的同时修改列簇:alter '表名',{NAME => '列簇'},{NAME => '列簇',METHOD => 'delete'} 清空表:truncate '表名' 删除表:先停用表:disable '表名' 再删除表:drop '表名' HBase表中数据的操作: 增put: put '表名' ,'rowkey','列簇名:字段名','字段值' 查get + scan:get '表名','rowkey','列簇名' 查询表中的所有信息:scan '表名' scan '表名',{COLUMNS => '列簇名'} 删delete:delete '表名','rowkey','列簇名:字段名'