Hbase的连接和使用
- Hbase的连接
- 安装happybase和thrift
- pip install happybase
- pip install thrift
- 安装happybase和thrift
import happybase
conn = happybase.Connection("xxx", 9090)
print conn.tables()
# xxx 表示表名,在连接之前要先在终端创建表
table = conn.table("xxx")
# 创建表---> zhy为表名,info为指定行列为空
conn.create_table('zhy', {"info":{}})
# 删除表--> disable默认为False,删除表的手要修改为True
conn.delete_table("testtest", True)
-
Hbase表结构
- conn.create_table('zhy', {"info":{}})--->创建表,指定列簇名
- 数据库中存入数据
- table.put(rowkey, {"info:content": value})
- 理解:info是列簇名,info:content中content可以理解为mongo表中的key;插入数据的时候,要指明rowkey,rowkey相当于mongo表中的_id
- 数据库中存入数据
- conn.create_table('zhy', {"info":{}})--->创建表,指定列簇名
-
Python操作Hbase的增删改查操作
- 增改数据put, row操作
- put(row, data, timestamp=None, wal=True)---> 插入数据,无返回值
- row---> 行,插入数据的时候需要指定;
- data---> 数据,dict类型,{key:value}构成,列与值均为str类型
- timestamp--->时间戳,默认None,即写入当前时间戳
- wal---> 是否写入wal, 默认为True
import In [8]: conn = happybase.Connection("192.168.14.1",9090) In [9]: table = conn.table("zhy") # 向表中增添数据,需要制定rowkey和一个字典形式的键值对 In [11]: table.put("test2",{"info:data":"22222"}) # 通过指定列簇来检索数据 In [12]: row = table.row("test2") In [13]: print row {'info:data': '22222'} In [14]: table.put("test3",{"info:data":"33333"}) In [15]: row = table.row("test3") In [16]: print row {'info:data': '33333'} In [20]: table.put("test2",{"info:content":"33333"}) In [21]: row = table.row("test2") In [22]: print row {'info:content': '33333', 'info:data': '22222'} # 检索多行数据 In [23]: rows = table.rows(["test2","test3"]) In [24]: print rows [('test2', {'info:content': '33333', 'info:data': '22222'}), ('test3', {'info:data': '33333'})]
-
删除操作
- table.delete("rowkey")---->删除一整行数据
- table.delete("rowkey", columns=["info:xxx",...])---->删除一个列簇中几个列的数据
In [27]: table.delete("test3") In [28]: row = table.row("test3") In [29]: print row {} In [35]: row = table.row("test2") In [36]: print row {'info:content': '333333', 'info:data': '22222'} In [37]: table.delete("test2", columns=["info:content"]) In [38]: row = table.row("test2") In [39]: print row {'info:data': '22222'}
-
全局查询操作scan()方法
- 可用于遍历查询表中的数据的数量
- 可以指定开始和结束的row key来进行局部查询
- 可以通过制定前缀来进行匹配查询
for key, value in table.scan(): print key,value # 指定row_start和row_stop参数来设置开始和结束扫描的row key for key, value in table.scan(row_start='www.test2.com', row_stop='www.test3.com'): print key, value # 通过row_prefix参数来设置需要扫描的row key for key, value in table.scan(row_prefix='www.test'): print key, value
-
hbase表查询操作特别慢,可以在插入的时候引入特定包,插入时生成一个index表,对index表进行查询操作
- pip install happybase-monkey
- 在导入包import happybase下面引入包即可
- from happybase_monkey.monkey import monkey_path;monkey_path()
-
其他详细的写法
Linux在hbase的安装
-
下载安装
-
解压文件
- tar -zxvf hbase-1.2.6-bin.tar.gz
-
启动hbase终端
- ./hbase-1.2.6/bin/hbase shell
-
配置hbase的依赖环境JAVA_HOME
-
- 选择对应的版本下载. (如果在linux上下载速度过慢,可以在windos下载之后上传到linux上)
-
首先在/usr目录下建立java安装目录
cd /usr
mkdir java
-
将下载好的jdk安装包拷贝到java目录下
cp ./jdk-8u161-linux-x64.tar.gz /usr/java
-
解压jdk到当前目录,得到文件夹jdk1.8.0_*(注意:下载不同版本的jdk,目录名不同)
tar -zcvf jdk-8u161-linux-x64.tar.gz
-
安装完毕之后为它建立一个链接以节省目录长度
- 这个步骤可以省略,但是在下面指定JAVA_HOME路径的时候要指明全路径
ln -s /usr/java/jdk1.8.0_161/ /usr/jdk
-
编译配置文件,配置环境变量
vim /etc/profile
- 在文本的末尾添加如下内容
# 这个路径要和解压缩之后的文件路径一致 JAVA_HOME=/usr/jdk CLASSPATH=$JAVA_HOME/lib/ PATH=$PATH:$JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH
-
执行命令让配置生效
- source /etc/profile
-
查看安装情况
java -version
-
出现如下命令
java version "1.8.0_161" Java(TM) SE Runtime Environment (build 1.8.0_161-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
-
-
-
启动hbase shell 终端之后Backspace不能使用的问题
- Options--->Session options--->Emulation--->Terminal 选择为Linux
- Options--->Session options--->Emulation--->Mappend Keys--->Other mappings打上对勾即可
- hbase shell 的一些命令操作
-
通用命令
序号 命令 描述 1 status 提供Hbase的状态,例如:服务器的数量 2 version 提供正在使用的HBase版本 3 table_help 表引用命令帮助 4 whoami 提供有关用户的信息 -
Hbase Shell的一些基本操作命令
名称 命令表达式 查看存在哪些表 list 创建表 create '表名', '列簇名1', '列簇名2' 添加记录 put '表名', 'row key', '列簇名:标识符', 'value' 查看记录 get '表名', 'row key' 查看表中的行数 count '表名' 删除一张表 先要屏蔽表,才能对表进行删除,第一步:disable '表名', 第二步:drop '表名' 查看表中所有数据 scan '表名称' 更新记录 就是重写一遍进行覆盖 -
增删改查操作
# 创建表,指明列簇 info, data create 'user', 'info', 'data' create 'user', {NAME=>'info', VERSIONS=>'3'} # 指定版本号 # 向user表中插入信息,rk001为row key,列簇info中添加name标识元素,值为zhy put 'user', 'rk001', 'info:name', 'zhy' # 获取元素,获取user表中row key为rk001的所有元素 get 'user', 'rk001' # 获取user表中row key为rk001, info列簇的所有信息 get 'user', 'rk001', 'info' # 查询表中所有的信息 scan 'user' # 查询表中列簇为info的信息 scan 'user', {COLUMNS=> 'info'} # 删除数据 delete 'user', 'rk001', 'info:name' # 清空表中数据 truncate 'user' # 添加列簇 alter 'user', NAME=>'f1' # 删除列簇 alter 'user', NAME=>'f1', METHOD=>'delete'或alter 'user', 'delete'=>'f1'
-
其他详细的hbase操作
-
网友评论