Hbase
术语
- 表:HBase采用表来组织数据,表由行和列组成。列被划分成多个列族
- 列族:HBase的基本访问控制单元
- 行:HBase由若干个行组成,每个行由行键
row key
进行标识 - 列限定符:列族的数据通过列限定符来进行定位
- 时间戳:每个单元格保存着同一份数据的多个版本,这些版本通过时间戳来进行索引
- 单元格:在表中,通过行、列族和列限定符确定一个单元格
cell
。单元格中存储的数据没有数据类型,被视为字节数组byte[]
。每个值都是通过单元格进行保存的。
通过四维数据:行键 列族 列限定符 时间戳,才能限定一个数据
文件读写
启动Hbase数据
Hbase
是谷歌开源的big table
;一个表中包很多的行和列。HBase的底层是保存在HDFS之上的。
# 启动Hadoop
cd /usr/local/hadoop
./sbin/start-all.sh
# 启动HBase
cd /usr/local/hbase
./bin/start-hbase.sh
./bin/hbase shell # 启动hbase shell
创建表student
代码语言:javascript复制hbase> disable 'student'
hbase> drop 'student' # 删除表
habse> create 'student', 'info' # 创建表和列限定符
插入数据
关键字是put
,每次插入一个单元格的数据
# 插入数据,每个单元格中插入一个数据
hbase> put 'student', '1','info:name','xueqian'
hbase> put 'student', '1','info:gender','F'
hbase> put 'student', '1','info:age','22'
配置spark
需要新建一个hbase
目录,用来存放所有的jar
包
还有格jar包
代码语言:javascript复制cd /usr/local/spark/conf
vim spark-env.sh
# 最后一行添加内容
export
SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop
classpath):$(/usr/local/hbase/bin/hbase
classpath):/usr/local/spark/jars/hbase/*
读取数据
将HBase
内部数据的格式转成string
类型
from pyspark import SparkConf, SparkContext
conf = SparkConf().setMaster("local").setAppName("readHBase")
sc = SparkContext(conf=conf)
host = "localhost"
table = "student"
conf = {"hbase.zookeeper.quorum": host,
"hbase.mapreduce.inputtable":table}
写入数据
将string
类型转成HBase
内部的可读取形式
rom pyspark import SparkConf, SparkContext
conf = SparkConf().setMaster("local").setAppName("readHBase")
sc = SparkContext(conf=conf)
host = "localhost"
table = "student"
keyConv = ...
valueConv = ...
conf = ...
rawData = ['3,info,name,xiaoming', # 待插入的每个单元格的数据
'3,info,age,26',
'3,info,gender,M',
'4,info,name,zhangsan',
'4,info,age,20',
'4,info,gender,M']
sc.parallelize(rawData).map(lambda x:(x[0],x.split(","))).saveAsNewAPIHadoopDataset(conf=conf, keyConverter=keyxConv, valueConverter=valueConv)
查看数据
切换到HBase shell
的交互式环境中,通过 scan ‘student’ 进行查看