标签:gora hbase gora-hbase
概述
Gora是apache的一个开源项目。
Gora与Hibernate类似,提供了java类到数据库的映射及持久化,前者虽也支持RDMS,但更侧重于列式、KV等类型的数据库。
使用Gora写入数据的关键步骤
1、根据要处理的数据,创建用于描述数据结构的json文件,并由此生成java类。3、创建主类,用于创建对象,并写入数据库。
即前2步建立了用于描述数据的java类及数据库表,以及它们之间的映射关系。第三步首先将内容读入java程序中,然后通过gora写入数据库。
快速入门范例
更详细范例可参考
http://blog.csdn.net/jediael_lu/article/details/43272521
http://gora.apache.org/current/tutorial.html
1、创建一个java project,并准备好待分析的内容。
本项目用于读取/etc/passwd中的内容,并将其写入hbase数据库中。
##gora.datastore.default is the default detastore implementation to use ##if it is not passed to the DataStoreFactory#createDataStore() method. gora.datastore.default=org.apache.gora.hbase.store.HBaseStore ##whether to create schema automatically if not exists. gora.datastore.autocreateschema=true
3、根据/etc/passwd的内容创建avro/passwd.json
{
  "type": "record",
  "name": "Passwd", "default":null,
  "namespace": "org.ljh.gora.demo.generated",
  "fields" : [
    {"name": "loginname", "type": ["null","string"], "default":null},
    {"name": "passwd", "type":  ["null","string"], "default":null},
    {"name": "uid", "type": "int", "default":0},
    {"name": "gid", "type": "int", "default":0},
    {"name": "username", "type": ["null","string"], "default":null},
    {"name": "home", "type": ["null","string"], "default":null},
    {"name": "shell", "type": ["null","string"], "default":null}
  ]
}
4、利用avro/passwd.json生成类
$ gora goracompiler avro/passwd.json src
Compiling: /Users/liaoliuqing/99_Project/1_myCodes/GoraDemo/avro/passwd.json
Compiled into: /Users/liaoliuqing/99_Project/1_myCodes/GoraDemo/src
Compiler executed SUCCESSFULL
5、创建conf/gora-hbase-mapping.xml,用于注明描述了数据库表的结构,以及java类中的属性与数据库中字段的对应关系。
<?xml version="1.0" encoding="UTF-8"?>
<gora-otd>
  <table name="Passwd"> 
    <family name="common"/> 
    <family name="env"/>
  </table>
  <class name="org.ljh.gora.demo.generated.Passwd" keyClass="java.lang.Long" table="Passwd">
    <field name="loginname" family="common" qualifier="loginname"/>
    <field name="passwd" family="common" qualifier="passwd"/>
    <field name="uid" family="common" qualifier="uid" />
    <field name="gid" family="common" qualifier="gid"/>
    <field name="username" family="common" qualifier="username"/>
    <field name="home" family="env" qualifier="home"/>
    <field name="shell" family="env" qualifier="shell"/>
  </class>
</gora-otd>
6、编写类文件
package org.ljh.gora.demo;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import org.apache.gora.store.DataStore;
import org.apache.gora.store.DataStoreFactory;
import org.apache.hadoop.conf.Configuration;
import org.ljh.gora.demo.generated.Passwd;
public class PasswdManager {
    private DataStore<Long, Passwd> dataStore = null;
    public PasswdManager() {
        try {
            init();
        } catch (IOException ex) {
            throw new RuntimeException(ex);
        }
    }
    private void init() throws IOException {
        dataStore = DataStoreFactory.getDataStore(Long.class, Passwd.class,
                new Configuration());
    }
    private void parse(String input) throws IOException, ParseException,
            Exception {
        BufferedReader reader = new BufferedReader(new FileReader(input));
        long lineCount = 0;
        try {
            String line = reader.readLine();
            do {
                Passwd passwd = parseLine(line);
                if (passwd != null) {
                    dataStore.put(lineCount++, passwd);
                    dataStore.flush();
                }
                line = reader.readLine();
            } while (line != null);
        } finally {
            reader.close();
            dataStore.close();
        }
    }
    /** Parses a single log line in combined log format using StringTokenizers */
    private Passwd parseLine(String line) throws ParseException {
        String[] tokens = line.split(":");
        System.out.println(tokens[0] + tokens[1] + "\n\n\n");
        String loginname = tokens[0];
        String password = tokens[1];
        int uid = Integer.parseInt(tokens[2]);
        int gid = Integer.parseInt(tokens[3]);
        String username = tokens[4];
        String home = tokens[5];
        String shell = tokens[6];
        Passwd passwd = new Passwd();
        passwd.setLoginname(loginname);
        passwd.setPasswd(password);
        passwd.setUid(uid);
        passwd.setGid(gid);
        passwd.setUsername(username);
        passwd.setHome(home);
        passwd.setShell(shell);
        return passwd;
    }
    public static void main(String[] args) throws IOException, ParseException,
            Exception {
        PasswdManager manager = new PasswdManager();
        manager.parse("passwd");
    }
}
$ java -jar GoraDemo.jar 
(1)导出的程序应为runnable jar file。
(2)运行程序的服务器器中需要运行着hbase。
hbase(main):006:0> scan 'Passwd' ROW COLUMN+CELL \x00\x00\x00\x00\x00\x00\x00\x00 column=common:gid, timestamp=1422544581799, value=\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00 column=common:loginname, timestamp=1422544581799, value=root \x00\x00\x00\x00\x00\x00\x00\x00 column=common:passwd, timestamp=1422544581799, value=x \x00\x00\x00\x00\x00\x00\x00\x00 column=common:uid, timestamp=1422544581799, value=\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00 column=common:username, timestamp=1422544581799, value=root ………………………………
标签:gora hbase gora-hbase
原文地址:http://blog.csdn.net/jediael_lu/article/details/43302915