zoukankan      html  css  js  c++  java
  • 基于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')
  • 相关阅读:
    百度地图根据经纬度计算瓦片行列号
    【完全开源】百度地图Web service API C#.NET版,带地图显示控件、导航控件、POI查找控件
    TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
    重中之重:委托与事件
    可复用代码:组件的来龙去脉
    [史上最全]C#(VB.NET)中位运算符工作过程剖析(译)
    物以类聚:对象也有生命
    导入导出Android手机文件
    Android修改system只读权限
    SSHDroid(SSH Server for Android)通过PC或命令连接android
  • 原文地址:https://www.cnblogs.com/ballwql/p/5854441.html
Copyright © 2011-2022 走看看