Python操作Hbase

Hbase的连接和使用

  • Hbase的连接
    • 安装happybase和thrift
      • pip install happybase
      • pip install 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
  • 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

    • jdk下载地址

      • 选择对应的版本下载. (如果在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操作

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容