row key
进行标识
cell
。单元格中存储的数据没有数据类型,被视为字节数组byte[]
。每个值都是通过单元格进行保存的。 通过四维数据:行键+列族+列限定符+时间戳,才能限定一个数据
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
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'
需要新建一个hbase
目录,用来存放所有的jar
包
还有格jar包
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’ 进行查看