# 环境搭建
# 解压省略...
# vi hbase-env.sh
# export JAVA_HOME=/opt/install/jdk JDK
# export HBASE_MANAGES_ZK=false 启用外部zookeeper
# vi hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://kbcluster/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/bigdata/hadoop/zookeeper/zkdata</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>vwmaster:2181,vwslave01:2181,vwslave02:2181,vwslave03:2181</value>
</property>
</configuration>
# vi regionservers
vwmaster
vwslave01
vwslave02
vwslave03
# 软连接hadoop core-site.xml hdfs-site.xml 到hbase的conf
ln -s /opt/bigdata/hadoop/hadoop260/etc/hadoop/core-site.xml ./
ln -s /opt/bigdata/hadoop/hadoop260/etc/hadoop/hdfs-site.xml ./
# 环境变量
export HBASE_HOME=/opt/bigdata/hadoop/hbase120
export PATH=$HBASE_HOME/bin:$HBASE_HOME/sbin:$HIVE_HOME/bin:$ZK_HOME/sbin:$ZK_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$NODE_HOME/bin:$JAVA_HOME/bin:$TOMCAT_HOME/bin:$PATH
# 压缩hbase120为hbase120.tar.gz,并拷贝etc/profile和hbase120.tar.gz到以下机器
vwslave01
vwslave02
vwslave03
# 激活所有集群的环境变量 source /etc/profile
#启动/关闭hbase
start-hbase.sh
stop-hbase.sh
# 启动主机上 jps
HMaster
# 其他主机上 jps
HRegionServer
#NoSql : Not Only Sql
# 【对比】 NoSQL 关系型数据库
# 常用数据库 HBase、MongoDB、Redis Oracle、DB2、MySQL
# 存储格式 文档、键值对、图结构 表格式,行和列
# 存储规范 鼓励冗余 规范性,避免重复
# 存储扩展 横向扩展,分布式 纵向扩展(横向扩展有限)
# 查询方式 结构化查询语言SQL 非结构化查询
# 事务 不支持事务一致性 支持事务
# 性能 读写性能高 读写性能差
# 成本 简单易部署,开源,成本低 成本高
#【概述】
# 列式NoSql数据库
# 分布式HashMap
# HDFS存储
#【特点】
# 快:2~20毫秒
# 随机读取:20~100k ops/s operations per second 每秒操作次数
# 扩展:20000+节点
# 高并发
#【应用场景】 OpenTSDB
# 增量数据-时间序列数据 timestamped data 高容量、高速写入 Events/SystemLogs => hbase <= AppServer K线
# 信息交换-消息传递 高容量、高速读写 AppServerA => hbase => AppServerB FackBook,EMail
# 内容服务-Web后端应用程序 高容量、高速读写 hbase => AppServer ebay,groupon
#【HBase生态圈技术】
# Lily – 基于HBase的CRM
# OpenTSDB – HBase面向时间序列数据管理
# Kylin – HBase上的OLAP
# Phoenix – SQL操作HBase工具
# Splice Machine – 基于HBase的OLTP
# Apache Tephra – HBase事务支持
# TiDB – 分布式SQL DB
# Apache Omid - 优化事务管理
# Yarn application timeline server v.2 迁移到HBase
# Hive metadata存储可以迁移到HBase
# Ambari Metrics Server将使用HBase做数据存储
#【hbase物理结构:如图 hbase-frame-structor.png】 分布式架构 master->slaves
#Client => HMaster -> HRegionServers
#【Client】:HBase Shell、Java API、RestAPI
#API + Cache
#First Vist: create cache with 【regin postion】
#Other Vists: use cache
#Retry: fetch region and update client cache
#Client => Zookeeper -> HMaster -> HRegionServers
#【Zookeeper】:功能
#HMaster 高可用:
# 1、只有一个HMaster
# 2、如果HMaster异常或死亡,则通过竞争机制产生新的HMaster
#监控HRegionServer的状态
# 当HRegionServer异常时,HMaster会通过Zookeeper收到HRegionServer上下线状态
#元数据入口地址
#Client => Zookeeper(ApplicationManager) -> HMaster(ResourceScheduler) -> HRegionServers
#【HMaster】:功能
#故障转移:监控HRegionServer,当某HRegionServer异常或死亡,将HRegion转移到其他HRegionServer上执行
#新HRegion分配:HRegion分裂后
#元数据变更:增删改
#数据负载均衡:空闲时在HRegionServer之间迁移HRegion
#发送自己位置给Client:借Zookeeper实现
#【HRegionServer】:读写数据 -> HDFS
#处理分配的HRegion
#刷新Cache到HDFS
#维护HLog(容错)
#处理来之用户的读写请求
#处理HRegion变大后的拆分
#负责StoreFile的合并工作
#HDFS
#提供元数据和表数据的底层分布式存储服务
#HLog
#数据多副本,保证的高可靠和高可用性
#HRegion
#数据表的横向切分
#HBase 每个表都会根 据 RowKey 值被切分成不同的 HRegion 分散存储在 HRegionServer 中
#【物理结构:Table -> Region:如图 hbase-table-region.png】
#Store
#1个Region => 多个Store
#1个Store => 数据表中的一个列族
#MemStore
#内存数据 => 读写操作具体实现
#HFile
#这是在磁盘上保存原始数据的实际的物理文件
#StoreFile 是以 HFile 的形式存储在 HDFS
#【hbase 逻辑架构:如图 hbase-logic-structor.png】
#RowKey : 主键(最大64kb,实际使用10~100bytes)
#数据根据RowKey排序
#HRegion大小达到一定值时,裂变
#HBase Table中的行的三种方式:
#1.通过单个 RowKey 访问 get 'TAB_NAME','COL_FAMILY_NAME'
#2.通过 RowKey 的 range(正则)
#3.全表扫描 scan 'TAB_NAME'
#ColumnFamily
#列族在在物理存储上对应于 HDFS 上的一个目录。
#HBase 表中的每个列,都归属于某个列族。
#列族是表的 schema 的一部分(而列不是),必须在使用表之前定义。
#列名都以列族作为前缀。例如 courses:history,courses:math 都属于 courses 这个列族。
#每一个列族对应一个 Store,也对应 HDFS 一个目录,类似于 Hive 分区操作一样,HBase相当于按列族进行了分区
#Cell
#由{RowKey, ColumnFamily, Version} 唯一确定的单元
#类似于excel的一个单元格,数据以字节存储,没有类型
#Time Stamp
#rowkey -> ColumnFamily:Column 确定cell
#每个Cell中保存着一份数据的多个版本:以由精确到毫秒的64位整数存储,可以由HBase写入是自动生成或用户指定
#若用户指定为避免版本冲突,一定要用单Cell中不重复的时间戳
#单元格中的数据以时间戳倒序排序
#为避免Cell数据过大,HBase提供两种机制:保留最新的N条数据,或保留截止当下多长时间的数据
#HBase原理
#元数据存储
#hbase:meta => WebUI => Tables => System Tables
#zookeeper: 存储hbase:meta位置信息
#实际存储于:hdfs
#HBase操作
#HBase Shell
命令类别 命令
General version, status, whoami, help
DDL alter, create, describe, disable, drop, enable, exists, is_disabled, is_enabled, list
DML count, delete, deleteall, get, get_counter, incr, put, scan, truncate
Tools assign, balance_switch, balancer, close_region, compact, flush, major_compact, move,
split, unassign, zk_dump
Replication add_peer, disable_peer, enable_peer, remove_peer, start_replication, stop_replication
# hbase shell 进入操作窗口 + 删除内容(ctl+退格键)
#### GENERAL ####
# version
# status
# whoami
#### NAMESPACE ####
# list_namespace
# create_namespace 'NS_NAME'
# describe_namespace 'NS_NAME'
#两个特殊命名空间
# 1、hbase => 存hbase内部表
# 2、default => 没有指定命令空间的表,默认存在该default下
#### TABLE ####
# list
# list_namespace_tables 'NS'
# create
# 完整方式:create 'NS:表名',{NAME=>'列族1名',VERSION='版本号',TTL='超时时间',BLOCKCACHE='是否缓存'},{...}...
#VERSION: 版本号:默认最小版本号:0
#TTL: 超时设定:默认值FOREVER
#BLOCKCACHE: 设定列族是否缓存:默认为true
# 简易方式:create '[NS:]表名','列族1名','列族2名'...
# hp.enable
# hp.disable
# hp.drop #禁用后才可以删除
create 'kb08:handphone',{NAME=>'base',VERSION=>'0'},{NAME=>'price'}
desc 'kb08:handphone'
exists 'kb08:handphone'
is_disabled 'kb08:handphone'
#### INSERT ####
put 'kb08:handphone','huawei','base:seriesNo','nova4'
put 'kb08:handphone','huawei','base:cpu','4c8t'
put 'kb08:handphone','huawei','base:resolution','1024*768'
put 'kb08:handphone','huawei','price:costPrice','1200.00'
put 'kb08:handphone','huawei','price:retailPrice','3200.00'
put 'kb08:handphone','iphone','base:seriesNo','12'
put 'kb08:handphone','iphone','base:cpu','8c8t'
put 'kb08:handphone','iphone','base:resolution','1680*1024'
put 'kb08:handphone','iphone','price:costPrice','1200.00'
put 'kb08:handphone','iphone','price:retailPrice','4800.00'
#ruby oop
### SELECT ####
hp = get_table 'kb08:handphone'
hp.scan
hp.get 'huawei'[,'base:cpu']
### UPDATE ####
hp.put 'huawei','base:cpu','8c16t'
#### DELETE ####
hp.delete 'iphone','price:retailPrice'
hp.deleteall 'iphone'
truncate 'kb08:handphone'
Hbase-基于hadoop集群的搭建和基本语法介绍!
最新推荐文章于 2023-07-12 10:00:00 发布