Hbase-基于hadoop集群的搭建和基本语法介绍!

# 环境搭建
	# 解压省略...
	# 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'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值