1.保证集群开启:
jps有如下进程
2.pom文件中的依赖
<?xml version="1.0" encoding="UTF-8"?>
<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>com.zhiyou100</groupId><artifactId>hbasedemo</artifactId><version>1.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><hbase.version>1.4.8</hbase.version></properties><dependencies><!--hbase--><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>${hbase.version}</version></dependency><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-common</artifactId><version>${hbase.version}</version></dependency><!--要使用HBase的MapReduce API--><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-server</artifactId><version>${hbase.version}</version></dependency></dependencies></project>
3.编写配置文件:hbase-site.xml
将集群上$HBASE_HOME/conf/hbase-site.xml拷贝过来就可以,也可以直接复制下面内容
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
/**** 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.rootdir</name><value>hdfs://master2:9000/hbase</value></property><property><name>hbase.cluster.distributed</name><value>true</value></property>
<!--conf.set("hbase.zookeeper.quorum", "master2");--><!--// 设置Zookeeper,直接设置IP地址--><property><name>hbase.zookeeper.quorum</name><value>master2</value></property></configuration>
---注意:如果没有再本地的C:\Windows\System32\drivers\etc路径下的hosts文件中配置IP 与之对应的主机名
请将上面的主机名(master2)填写成自己的IP
4.编写java代码--创建类:HBaseDDL
package com.hbase.DDL;import com.google.common.io.Resources;
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.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;import java.io.IOException;public class HBaseDDL {private static Configuration configuration;private static Connection connection;private static Admin admin;static {//1.获得Configuration实例并进行相关设置configuration = HBaseConfiguration.create();configuration.addResource(Resources.getResource("hbase-site.xml"));//2.获得Connection实例try {connection = ConnectionFactory.createConnection(configuration);//3.1获得Admin接口admin = connection.getAdmin();} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) throws IOException {//创建表String familyNames[]={"nature","social"};createTable("test_hbase",familyNames);//向表中插入数据insert("test_hbase","libai","nature","height","25");//删除表dropTable("test_hbase");}/*** 创建表* @param tableName 表名* @param familyNames 列族名* */public static void createTable(String tableName, String familyNames[]) throws IOException {//如果表存在退出if (admin.tableExists(TableName.valueOf(tableName))) {System.out.println("Table exists!");return;}//通过HTableDescriptor类来描述一个表,HColumnDescriptor描述一个列族HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf(tableName));for (String familyName : familyNames) {tableDescriptor.addFamily(new HColumnDescriptor(familyName));}//tableDescriptor.addFamily(new HColumnDescriptor(familyName));admin.createTable(tableDescriptor);System.out.println("createtable success!");}/*** 删除表* @param tableName 表名* */public static void dropTable(String tableName) throws IOException {//如果表不存在报异常if (!admin.tableExists(TableName.valueOf(tableName))) {System.out.println(tableName+"不存在");return;}//删除之前要将表disableif (!admin.isTableDisabled(TableName.valueOf(tableName))) {admin.disableTable(TableName.valueOf(tableName));}admin.deleteTable(TableName.valueOf(tableName));System.out.println("deletetable " + tableName + "ok.");}/*** 指定行/列中插入数据* @param tableName 表名* @param rowKey 主键rowkey* @param family 列族* @param column 列* @param value 值* TODO: 批量PUT*/public static void insert(String tableName, String rowKey, String family, String column, String value) throws IOException {//3.2获得Table接口,需要传入表名Table table =connection.getTable(TableName.valueOf(tableName));Put put = new Put(Bytes.toBytes(rowKey));put.addColumn(Bytes.toBytes(family), Bytes.toBytes(column), Bytes.toBytes(value));table.put(put);System.out.println("insertrecored " + rowKey + " totable " + tableName + "ok.");}/*** 删除表中的指定行* @param tableName 表名* @param rowKey rowkey* TODO: 批量删除*/public static void delete(String tableName, String rowKey) throws IOException {//3.2获得Table接口,需要传入表名Table table = connection.getTable(TableName.valueOf(tableName));Delete delete = new Delete(Bytes.toBytes(rowKey));table.delete(delete);}
}
测试:1.创建表-----createTable("test_hbase",familyNames);
在hbase shell中list查看表
2.向创建的表中插入数据-----insert("test_hbase","luban","nature","height","250");
在hbase shell中scan 'test_hbase'查看表内容
3.删除表------dropTable("test_hbase");
在hbase shell中list查看表,已经没有了test_hbase