Hadoop HBase

From MetaCentrum
Jump to: navigation, search


HBase

Informace

Tabulky potřeba vyrábět v namespacu u každého uživatele, např.:

 create 'USER:TABLE', 'CF'

Vyrobit prázdnou tabulku lze i bez namespacu nebo v cizím namespacu, ale těmto tabulkám budou chybět potřebná práva.

Připojení

Shell

Na frontendu (viz Hadoop#Základní informace), přístup přes Kerberos (nahraďte USER za skutečné uživatelské jméno):

hbase shell

create 'USER:test', 'cf'
put 'USER:test', 'row1', 'cf:a', 'value1'
put 'USER:test', 'row2', 'cf:a', 'value2'
put 'USER:test', 'row3', 'cf:a', 'value3'
put 'USER:test', 'row4', 'cf:a', {'a'=>1, 'b'=>2}
scan 'USER:test'
get 'USER:test', 'row1'

describe 'USER:test'

disable 'USER:test'
drop 'USER:test'

RPC API

  • lze využít asynchbase
  • vyžadována verze >= 1.7snap (k datu 2015-07-20 branch next)
  • nutno nastavit property java.security.auth.login.config=jaas.conf


asynchbase.properties:

hbase.zookeeper.quorum = hador-c1.ics.muni.cz:2181,hador-c2.ics.muni.cz:2181,hador.ics.muni.cz:2181
hbase.security.auth.enable = true
hbase.security.authentication = kerberos
hbase.kerberos.regionserver.principal = hbase/_HOST@ICS.MUNI.CZ
hbase.sasl.clientconfig = Client

jaas.conf (nahraďte hawking za skutečný login name):

Client {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=false
  useTicketCache=true
  principal="hawking@META";
};

Example.java (nahraďte hawking:test a row1 za skutečné hodnoty):

import java.util.ArrayList;
  
import org.hbase.async.Config;
import org.hbase.async.HBaseClient;
import org.hbase.async.GetRequest;
import org.hbase.async.KeyValue;
        
final class Example {

        static final String configFile = "asynchbase.properties";
        static final String table = "hawking:test";
        static final String key = "row1";

        public static void main(final String[] args) throws Exception {
                Config config = new Config(configFile);
                HBaseClient client = new HBaseClient(config);

                GetRequest get = new GetRequest(table, key);

                try {
                        ArrayList<KeyValue> result = client.get(get).joinUninterruptibly();
                        System.out.println("Get result=" + result);
                } catch (Exception e) {
                        System.out.println("Get failed:");
                        e.printStackTrace();
                }

                client.shutdown();
        }

}

Makefile:

CP=$(shell ls -1 asynchbase-*.jar async-*.jar netty-*.jar slf4j-*.jar protobuf-java-*.jar zookeeper-*.jar log4j-*.jar | tr '\n' ':')

all: Example.java
        javac -cp $(CP) Example.java

run:
        java -cp $(CP):. -Djava.security.auth.login.config=$(shell pwd)/jaas.conf Example

pom.xml pro Maven (Example.java uložit do src/main/java/cz/cesnet/hadoop):

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                      http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>cz.cesnet.hadoop</groupId>
  <artifactId>hbase-example</artifactId>
  <version>0.0.1</version>
  <name>example</name>

  <properties>
    <maven.compiler.target>1.7</maven.compiler.target>
    <maven.compiler.source>1.7</maven.compiler.source>
  </properties>

  <repositories>
    <repository>
      <id>sonatype-staging</id>
      <url>https://oss.sonatype.org/content/repositories/staging/</url>
    </repository>
  </repositories>

  <dependencies>
    <dependency>
      <groupId>org.hbase</groupId>
      <artifactId>asynchbase</artifactId>
      <version>1.7.0-SNAPSHOT</version>
    </dependency>
  </dependencies>

</project>

Oprávnění

Přidání všech oprávnění uživateli 'user2' k tabulce 'my_table':

echo "grant 'user2', 'RWXCA', '$USER:my_table'" | hbase shell

Přidání oprávnění čtení uživateli 'user2' všem tabulkám:

echo "grant 'user2', 'R', '@$USER'" | hbase shell

Servisní stránky

Cluster:

Jednotlivé uzly (X=1..24):