GVKun编程网logo

bigdata-016] python happybase 操作hbase(python查询hbase)

17

本篇文章给大家谈谈bigdata-016]pythonhappybase操作hbase,以及python查询hbase的知识点,同时本文还将给你拓展02分布式NOSQLHBASE-JAVAAPI操作H

本篇文章给大家谈谈bigdata-016] python happybase 操作hbase,以及python查询hbase的知识点,同时本文还将给你拓展02分布式NOSQL HBASE - JAVA API 操作HBase、ArcGIS Python查看geodatabase(.gdb)版本、bigdata——HBase+zookeeper+Hadoop集群构筑 之 Hbase集群构筑、CDH 6.0.1 版本 默认配置下 HUE | happybase 无法访问 Hbase 的问题等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

bigdata-016] python happybase 操作hbase(python查询hbase)

bigdata-016] python happybase 操作hbase(python查询hbase)

1. 用happybase库 操作 hbase
    http://happybase.readthedocs.io/en/latest/

2. cdh集群的hbase集群有三个节点
    hbase的版本是HBase 1.2.0

3. hbase base的log目录小于5g,导致报警,目录在/var/log/hbase,准备清空它。
   删除不需要的log之后,所有服务都从红色变成黄色,log目录太小导致了大部分问题。log目录的容量必须要足够大。

4. python+happybase
    4.1 pyenv global anacodea3-4.1.1
    4.2 pip install happybase
    4.3 测试安装  python -c ''import happybase'',不报错就是正常的
    4.4 要在bigdata-master上启动thrift server:
        hbase thrift -p 9090 start
    4.5 按照如下文档进行操作:
        http://happybase.readthedocs.io/en/latest/user.html#establishing-a-connection
    4.6 Hbase没有数据类型,所有的row keys,column name,column values都是简单视为raw byte string进行处理
    4.7 删除一条记录,也就是一个row_key对应的所有列族

         deleteall ''testtable'',''event_0''

5. 示例代码

#!/usr/bin/env python3
#! coding:utf-8 -*-


import happybase

#要先在hbase某个节点上开启thrift服务
#hbase thrift -p 9090 start
connection = happybase.Connection(''192.168.0.1'',autoconnect=False)
connection.open()

#print所有的表名
print(''All tables: '',connection.tables(),''\n'')

#操作testtable表
#这个操作是一个提前声明-我要用到这个表了-但不会提交给thrift server做操作
table = connection.table(b''testtable'')

#检索某一行
row = table.row(b''myrow-2'')
print(''a row:'',row,''\n'')

#right
print(row[b''colfam1:q1''])
print(row[b''colfam1:q2''])

#wrong
# print(row[''colfam1:q1''])
# print(row[''colfam1:q2''])

#显示所有列族
print(''所有列族'',table.families(),''\n'')

#输出两列
print(''print two rows:'')
rows = table.rows([b''myrow-1'',b''myrow-2''])
for key,data in rows:
    print(key,data)

#字典输出两列
print(''\n'',''print two dict rows'')
rows_as_dict = dict(table.rows([b''myrow-1'',b''myrow-2'']))
print(rows_as_dict)

#输入row的一个列族所有值
row = table.row(b''myrow-2'',columns=[b''colfam1''])
print(''\n'',''输出一个列族'',row)

#scan操作
print(''\n'',''do scan'')
for key,data in table.scan():
    print(key,data)
6. 测试高表插入记录: 批量插入1000条记录,0.1~0.6s 批量插入1万条记录,1.5~3s 每秒7k条记录,性能比较靠谱 7. 测试宽表插入记录: 批量插入1000条记录,0.1~0.6s 批量插入1万条记录,1.5~3s 每秒7k条记录 高表和宽表性能几乎一样!

02分布式NOSQL HBASE - JAVA API 操作HBase

02分布式NOSQL HBASE - JAVA API 操作HBase



(原文地址:http://www.jb51.cc/cata/500599,转载麻烦带上原文地址。hadoop hive hbasemahout storm spark kafka flume,等连载中,做个爱分享的人


HBase,可以使用shell界面管理数据,也提供java api 来操作Hbase上的表的数据。所有Column均以二进制格式存储,所以在api中要不断的类型转换。

//1 准备HBase上下文 HBaseAdmin 和user表对象hTable
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.rootdir","hdfs://rdc:9000/HRoot");
conf.set("hbase.zookeeper.quorum","p1");
Configuration conf= HBaseConfiguration.create();
HConnection conn= HConnectionManager.createConnection(conf);
HTableInterface userTable = conn.getTable("user");

//2查->Get,HBase只能根据ROW KEY 做随机查。默认是没有二级索引的。相当于只能 SELECT u.name FROM user u where u.id = 2; 不能对非主键的查询 SELECT u.name FROM user u where u.name = "rdc";
String id = "1"; //row key行键
String columnFamily = "info"; //列镞
String colume = "name"; //列名
Get get = new Get(id.getBytes());
final Result result = hTable.get(get);
byte[] valBytes = result.getValue(columnFamily .getBytes(),colume getBytes());
String value = new String(value); // value 相当于sql语句 SELECT u.name FROM user u where u.id = 1,的结果

//2增->Put ,使用Put 一列一列的加。sql: insert into user(name) values("mosi")
//3改->Put ,使用Put 一列一列的改。sql:update user set name "mosi"
Put put = new Put(id.getBytes());
put.add(columnFamily .getBytes(), colume getBytes(),"mosi".getBytes());
hTable.put(put);//和java的map一样。为空新增,不为空覆盖。

//4删 -》sql: delete from user where id = 1
Delete delete = new Delete(id.getBytes());
hTable.delete(delete);
//5 扫描,HBASE还提供scan方式根据rowkey范围扫描,不指定rowkey范围,则为全表扫描 。一次网络连接获取 批量数据缓存在客户端内存中。相对应GET来说。节省网络的连接次数。
// sql: SELECT * FROM user u
Scan scan = new Scan();
final ResultScanner scanner = hTable.getScanner(scan);
for (Result result : scanner) {
final byte[] value = result.getValue(columnFamily .getBytes(),colume.getBytes());
}



ArcGIS Python查看geodatabase(.gdb)版本

ArcGIS Python查看geodatabase(.gdb)版本

代码:10.0不能运行

import arcpy

desc = arcpy.Describe(r''C:\Users\dell\Documents\ArcGIS\default.gdb'')
print desc.release
地理数据库版本值 ArcGIS 版本

2.2.0

9.2

2.3.0

9.3、9.3.1

3.0.0

10.0、10.1、10.2、10.2.1、10.2.2、10.3、10.3.1、10.4、10.4.1、10.5、10.5.1

ArcGIS Pro 1.0、1.1、1.2、1.3、1.4

bigdata——HBase+zookeeper+Hadoop集群构筑 之 Hbase集群构筑

bigdata——HBase+zookeeper+Hadoop集群构筑 之 Hbase集群构筑

整体流程

  • 物件下载
  • 解压
  • conf文件配置
  • 启动&停止
  • 状态确认

物件下载

     参考hbase官网

解压

   tar -zxvf hbase-***.gz

conf文件配置

1.hbase-env.sh

export JAVA_HOME=/usr/java/jdk1.7.0_67
export HBASE_MANAGES_ZK=false

注意:JDK根据自己的环境配置

            此处没有使用hbase自带的zookeeper服务,因为之前已经搭建好了zookeeper集群环境。

2.hbase-site.xml

<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://sv004:9000/hbase</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>sv004,sv001,sv002,sv003</value>
     </property>
     <property>
        <name>dfs.replication</name>
        <value>3</value> 
     </property>
</configuration>

3.配置regionservers

追加如下信息:

sv001
sv002
sv003

以上是单个虚拟机中hbase的配置,集群的话需要将其复制到其他节点

命令如下所示:

  scp -r $HBASE_HOME root@sv001:/home/project-test
  scp -r $HBASE_HOME root@sv002:/home/project-test
  scp -r $HBASE_HOME root@sv003:/home/project-test

重要,前方高能

  1. hbase.rootdir里指定的socket号一定要跟hadoop中指定的一直。hbase.rootdir默认的端口号是8020.
  2. hbase其他设置参数要追加的话,可以参好官方文档,一般的设置都是在hbase-site.xml中追加
  3. hbase集群启动的顺序:hadoop -> zookeeper ->hbase

启动&停止

${HBASE_HOME}/start-hbase.sh

${HBASE_HOME}/stop-hbase.sh

状态确认

使用jps命令,具体信息如下所示:

①sv004:HMaster ②SV001/SV002/SV003:HRegionSever

CDH 6.0.1 版本 默认配置下 HUE | happybase 无法访问 Hbase 的问题

CDH 6.0.1 版本 默认配置下 HUE | happybase 无法访问 Hbase 的问题

第一个问题 HUE 无法直接连接到 HBase

在默认配置下 CDH 6.0.1 版本下的 HBase2.0 使用了默认配置

hbase.regionserver.thrift.compact = True

也就是是被勾选的状态,但是 HUE 我找了半天发现无法配置 thift.compact 的启用。所以要使用 hue 来使用 HBase 2.0 就需要把这个 HBase 的参数置为 False

hbase.regionserver.thrift.compact 是否使用Thrift TCompactProtocol,如果你每列数据比较大,可以试着开启,减少带宽。

这里就比较坑的一点是,CDH 官方文档让开启

启用 HBase Thrift Http 服务器
hbase.regionserver.thrift.http
HBase(服务范围)
启用 HBase Thrift 代理用户
hbase.thrift.support.proxyuser
HBase(服务范围)

这两个选项,但是经过实际测试,开启这两个选项不仅会让 hue 无法连接上去,就连 happybase 也会报错。所以关闭了,详情可以参考 reference 里面的 「Sharing how to solve HUE and HBase connect problem on CDH 6.0.1」文章。

 

另外使用 happybase 的默认配置对其进行访问,也无法直接访问,原因是来自于 happybase 默认的 protocol 和 transport 不兼容不一样。

当我们参照 「Sharing how to solve HUE and HBase connect problem on CDH 6.0.1」关闭相关参数之后。设置 protocol 为 compact 和 transport 是 framed

默认参数使用的是 protocol 为 binary 和 transport 是 buffred

connection = happybase.Connection(''xxxx'', 9090, transport=''framed'', protocol=''compact'')

调整好之后就可以正确访问了!

 

 

Reference:

https://community.cloudera.com/t5/Web-UI-Hue-Beeswax/Sharing-how-to-solve-HUE-and-HBase-connect-problem-on-CDH-6/td-p/82030  Sharing how to solve HUE and HBase connect problem on CDH 6.0.1

https://github.com/wbolster/happybase/issues/161  Getting cybin.ProtocolError: No protocol version header error

http://my.525.life/article?id=1510739742002  hadoop组件---面向列的开源数据库(三)---hbase的接口thrift(需整理和csdn)

关于bigdata-016] python happybase 操作hbasepython查询hbase的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于02分布式NOSQL HBASE - JAVA API 操作HBase、ArcGIS Python查看geodatabase(.gdb)版本、bigdata——HBase+zookeeper+Hadoop集群构筑 之 Hbase集群构筑、CDH 6.0.1 版本 默认配置下 HUE | happybase 无法访问 Hbase 的问题的相关知识,请在本站寻找。

本文标签: