基于jython操作hbase

Posted ZendWind

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于jython操作hbase相关的知识,希望对你有一定的参考价值。

一、前言

    关于jython介绍,直接上官网www.jython.org,可以得到详细资料,这里只介绍一下jython操作hbase的一些方法,本质上和用java操作hbase差不多,只不过语法换成了python

二、环境

    hbase版本:0.98.6.1

    hadoop版本: 2.5.2

    jython版本:2.7 

三、jython安装配置

1 安装    

    关于hbase&hadoop的安装配置这里也不介绍,主要介绍一下jython的安装配置,其实安装很简单,就执行一条命令就OK

java -jar jython-installer-2.7.0.jar -d /data/jython27

    -d: 指定jython安装目录

 2 配置

    涉及Jython的配置,主要有三个方面:hbase classpath, 系统环境变量(方便操作)和hbase classpath(让jython可以找到hbase的lib)

1) hbase classpath设置

    需要在hbase-env.sh中配置如下等环境变量:

export JAVA_HOME=/data/jdk1.7.0_51
export HADOOP_HOME=/data/hadoop
export HBASE_HOME=/data/hbase
export HADOOP_CONF_DIR=/data/hadoop/etc/hadoop
export HBASE_CONF_DIR=/data/hbase/conf


export ZOOCFGDIR=/data/zookeeper-3.4.6/conf
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export HADOOP_CLASSPATH=.:$HBASE_HOME/*:$HBASE_CONF_DIR:$HADOOP_CLASSPATH
export HBASE_CLASSPATH=$HBASE_CONF_DIR:$ZOOCFGDIR

 

2) jython系统环境变量设置如下

 在/etc/bashrc, 或 ~/.bashrc, 或~/.bash_profile 文件中添加如下行

export JYTHON_HOME=/data/jython27
export JYTHON_BIN=$JYTHON_HOME/bin
export PATH=$JYTHON_BIN:$PATH

   

3) jython classpath设置

    如果此步不设置,启动jython脚本时,会提示找不到hbase相关模块的错误,所以需要在jython启动脚本文件中添加hbase  classpath,即 编辑jython目录bin下的jython, 在相应位置添加如下内容:    

if [ ! -z "$CLASSPATH" ];then
    CLASSPATH=$CLASSPATH:/data/hbase/lib/*
    CP=$CP:$CLASSPATH
fi

  备注:添加位置在CP=$JYTHON_HOME/jython.jar下方,如下图所示

 

四、jython操作hbase脚本

    此脚本主要是创建Hbase表,并设置相关参数

import java.lang
import java.util

from org.apache.hadoop.hbase.client import HBaseAdmin,HTable,Put,Get
from org.apache.hadoop.hbase import HRegionInfo,ServerName
from org.apache.hadoop.hbase.catalog import MetaReader,CatalogTracker
from org.apache.hadoop.hbase import HBaseConfiguration, HTableDescriptor, HColumnDescriptor, HConstants
from org.apache.hadoop.hbase.util import Bytes,Writables
from org.apache.hadoop.hbase.io.compress import Compression
from org.apache.hadoop.hbase.regionserver import BloomType
from org.apache.hadoop.hbase.io.encoding import DataBlockEncoding



#global variable
conf,admin=None,None

class CreateTable(object):
    def __init__(self,conf,admin):
        self.base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__),os.pardir))        
        self.conf = conf
        self.admin = admin
    def createTable(self,tableName):
        desc = HTableDescriptor(tableName)
        hcd = HColumnDescriptor("i")
        hcd.setCompressionType(Compression.Algorithm.GZ);
        hcd.setBlocksize(64*1024)
        hcd.setMaxVersions(1)
        hcd.setMinVersions(0)
        hcd.setInMemory(False)
        hcd.setBlockCacheEnabled(True)
        hcd.setBloomFilterType(BloomType.ROW)
        hcd.setDataBlockEncoding(DataBlockEncoding.DIFF)
        hcd.setScope(0)
        
        desc.addFamily(hcd)

        desc.setMaxFileSize(5368709120)
        desc.setValue(desc.SPLIT_POLICY,\'org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy\')
        if self.admin.tableExists(tableName):
            self.admin.disableTable(tableName)
            self.admin.deleteTable(tableName)
        self.admin.createTable(desc)
    def getTableInfo(self,tableName):
        desc = admin.getTableDescriptor(tableName)

        return desc.toString()
if __name__ == \'__main__\':
    conf = HBaseConfiguration()
    admin = HBaseAdmin(conf)

    ct = CreateTable(conf,admin)
    ct.createTable(\'test\')
    print ct.getTableInfo(\'test\')

 

以上是关于基于jython操作hbase的主要内容,如果未能解决你的问题,请参考以下文章

python 基于gazeeter在OpenRefine中检测比利时城市名称的Jython天真方法

StreamSets解析MySQL Binlog写入HBase

StreamSets解析MySQL Binlog写入HBase

StreamSets解析MySQL Binlog写入HBase

甘道夫HBase基本数据操作详解完整版,绝对精品

HBase ——Shell操作