标签:
<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>org.crazycake</groupId>
<artifactId>playhbase</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>playhbase</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<resources>
<resource>
<directory>${basedir}/conf</directory>
<filtering>false</filtering>
<includes>
<include>hbase-site.xml</include>
</includes>
</resource>
</resources>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>0.98.4-hadoop2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
<optimise>true</optimise>
<compilerArgument>-nowarn</compilerArgument>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer">
</transformer>
</transformers>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
/**
* Copyright 2010 The Apache Software Foundation
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<configuration>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>host1,host2</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
</configuration>package org.crazycake.playhbase;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
public class CreateTable {
public static void main(String[] args) throws MasterNotRunningException, ZooKeeperConnectionException, IOException {
Configuration config = HBaseConfiguration.create();
// 这边注释起来的是动态设定zookeeper参数的方法,如果你没有hbase-site.xml 或者想动态改变
// 可以采用动态方式设定
//
// config.set("hbase.zookeeper.quorum",
// "zookeepernode0,zookeepernode1,zookeepernode2");
//config.set("hbase.zookeeper.property.clientPort", "2181");
//config.set("hbase.cluster.distributed", "true");
// 使用配置文件创建一个 admin 对象
HBaseAdmin admin = new HBaseAdmin(config);
// 创建表
HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("people"));
// 创建2个列簇
tableDescriptor.addFamily(new HColumnDescriptor("name"));
tableDescriptor.addFamily(new HColumnDescriptor("contactinfo"));
admin.createTable(tableDescriptor);
// 接下来搞点数据进去呗
String[][] people = {
{ "1", "Marcel", "Haddad", "marcel@fabrikam.com"},
{ "2", "Franklin", "Holtz", "franklin@contoso.com" },
{ "3", "Dwayne", "McKee", "dwayne@fabrikam.com" },
{ "4", "Rae", "Schroeder", "rae@contoso.com" },
{ "5", "Rosalie", "burton", "rosalie@fabrikam.com"},
{ "6", "Gabriela", "Ingram", "gabriela@contoso.com"} };
HTable table = new HTable(config, "people");
// 把这些数据插入到表里面
for (int i = 0; i< people.length; i++) {
//第一列做rowkey
Put person = new Put(Bytes.toBytes(people[i][0]));
//把 Marcel 放到 name 这个列簇的 first 这个字段去
person.add(Bytes.toBytes("name"), Bytes.toBytes("first"), Bytes.toBytes(people[i][1]));
person.add(Bytes.toBytes("name"), Bytes.toBytes("last"), Bytes.toBytes(people[i][2]));
person.add(Bytes.toBytes("contactinfo"), Bytes.toBytes("email"), Bytes.toBytes(people[i][3]));
table.put(person);
}
// 最后要记得提交和关闭表
table.flushCommits();
table.close();
}
}
tail -200f /var/log/hbase/hbase-hbase-master-host1.localdomain.log
hbase(main):003:0> scan 'people' ROW COLUMN+CELL 1 column=contactinfo:email, timestamp=1421338694666, value=marcel@fabrikam.com 1 column=name:first, timestamp=1421338694666, value=Marcel 1 column=name:last, timestamp=1421338694666, value=Haddad 2 column=contactinfo:email, timestamp=1421338694932, value=franklin@contoso.com 2 column=name:first, timestamp=1421338694932, value=Franklin 2 column=name:last, timestamp=1421338694932, value=Holtz 3 column=contactinfo:email, timestamp=1421338694977, value=dwayne@fabrikam.com 3 column=name:first, timestamp=1421338694977, value=Dwayne 3 column=name:last, timestamp=1421338694977, value=McKee 4 column=contactinfo:email, timestamp=1421338695034, value=rae@contoso.com 4 column=name:first, timestamp=1421338695034, value=Rae 4 column=name:last, timestamp=1421338695034, value=Schroeder 5 column=contactinfo:email, timestamp=1421338695054, value=rosalie@fabrikam.com 5 column=name:first, timestamp=1421338695054, value=Rosalie 5 column=name:last, timestamp=1421338695054, value=burton 6 column=contactinfo:email, timestamp=1421338695076, value=gabriela@contoso.com 6 column=name:first, timestamp=1421338695076, value=Gabriela 6 column=name:last, timestamp=1421338695076, value=Ingram 6 row(s) in 0.3910 seconds
package org.crazycake.playhbase;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.RegexStringComparator;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.util.Bytes;
/**
* 根据email 来搜索用户
* @author alexxiyang (https://github.com/alexxiyang)
*
*/
public class SearchByEmail {
public static void main(String[] args) throws IOException {
//创建配置
Configuration config = HBaseConfiguration.create();
// 打开表
HTable table = new HTable(config, "people");
//定义一系列要用到的列簇和列
// 定义列簇
byte[] contactFamily = Bytes.toBytes("contactinfo");
// 列
byte[] emailQualifier = Bytes.toBytes("email");
//列簇
byte[] nameFamily = Bytes.toBytes("name");
//列
byte[] firstNameQualifier = Bytes.toBytes("first");
byte[] lastNameQualifier = Bytes.toBytes("last");
// 创建一个正则表达式的比较器
RegexStringComparator emailFilter = new RegexStringComparator("rosalie@fabrikam.com");
// 创建一个filter,把这个正则比较器传进去
SingleColumnValueFilter filter = new SingleColumnValueFilter(contactFamily, emailQualifier, CompareOp.EQUAL, emailFilter);
// 创建一个 scan对象
Scan scan = new Scan();
//把filter 传进去
scan.setFilter(filter);
// 开始查询,并获取结果
ResultScanner results = table.getScanner(scan);
// 遍历结果打印数据
for (Result result : results) {
String id = new String(result.getRow());
byte[] firstNameObj = result.getValue(nameFamily, firstNameQualifier);
String firstName = new String(firstNameObj);
byte[] lastNameObj = result.getValue(nameFamily, lastNameQualifier);
String lastName = new String(lastNameObj);
System.out.println(firstName + " " + lastName + " - ID: " + id);
byte[] emailObj = result.getValue(contactFamily, emailQualifier);
String email = new String(emailObj);
System.out.println(firstName + " " + lastName + " - " + email + " - ID: " + id);
}
//关闭结果
results.close();
//关闭表
table.close();
}
}
运行结果Rosalie burton - ID: 5 Rosalie burton - rosalie@fabrikam.com - ID: 5
package org.crazycake.playhbase;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HBaseAdmin;
/**
* 删除表
* @author alexxiyang (https://github.com/alexxiyang)
*
*/
public class DeleteTable {
public static void main(String[] args) throws IOException {
//创建配置
Configuration config = HBaseConfiguration.create();
// 建立 admin
HBaseAdmin admin = new HBaseAdmin(config);
// 先 disable 表,再delete
admin.disableTable("people");
admin.deleteTable("people");
}
}hbase(main):004:0> list TABLE employee employee2 student users 4 row(s) in 4.8460 seconds => ["employee", "employee2", "student", "users"]
hbase(main):002:0> create 'users','info' 0 row(s) in 36.5110 seconds => Hbase::Table - users hbase(main):003:0> list TABLE employee employee2 student users 4 row(s) in 0.4520 seconds => ["employee", "employee2", "student", "users"] hbase(main):004:0> put 'users',1,'info:name','ted' 0 row(s) in 0.8350 seconds hbase(main):005:0> scan 'users' ROW COLUMN+CELL 1 column=info:name, timestamp=1421252020520, value=ted 1 row(s) in 0.3140 seconds
tail -200f /var/log/zookeeper/zookeeper.log
Alex 的 Hadoop 菜鸟教程: 第8课 Hbase 的 java调用方法
标签:
原文地址:http://blog.csdn.net/nsrainbow/article/details/42649249