使用java api 访问 hbase (三)

单机环境(非集群):
linux fedora14 64位
java 1.8
hbase-1.1.2   下载地址:http://archive.apache.org/dist/hbase/1.1.2/hbase-1.1.2-bin.tar.gz  如果是src的就需要编译
下载好直接解压 tar xzvf hbase-1.1.2-bin.tar.gz

一,hbase 配置 conf/hbase-site.xml
    不依赖于 hdfs ,想使用本地文件系统存储数据, 配置中必须有 hbase.unsafe.stream.capability.enforce 设置 false

<?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>file:///home/hbase/hbasedir</value>
	</property>
	<property>
		<name>hbase.zookeeper.quorum</name>
		<value>192.168.1.36</value>
	</property>
	<property>
		<name>hbase.zookeeper.property.dataDir</name>
		<value>/home/hbase/zookeeper</value>
	</property>
	<property>
		<name>hbase.unsafe.stream.capability.enforce</name>
		<value>false</value>
		<description>
			Controls whether HBase will check for stream capabilities (hflush/hsync).

			Disable this if you intend to run on LocalFileSystem, denoted by a rootdir
			with the 'file://' scheme, but be mindful of the NOTE below.

			WARNING: Setting this to false blinds you to potential data loss and
			inconsistent system state in the event of process and/or node failures. If
			HBase is complaining of an inability to use hsync or hflush it's most
			likely not a false positive.
		</description>
	</property>
</configuration>

二,修改主机名称:/etc/sysconfig/network:


三,修改主机/etc/hosts:
添加一行 你的ip master
 
重启机器才会生效,可以使用 hostname master  来修改,可以不重启机器,当前shell有效
四,启动hbase:
hbase目录 下 bin/start-hbase.sh

浏览器访问看是否成功:

java 客户端pom.xml:

<dependency>
	        <groupId>org.apache.hbase</groupId>
	        <artifactId>hbase-client</artifactId>
	        <version>1.1.2</version>
	    </dependency>
	   
	     <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.5.1</version>
        </dependency>

客户端机器host 设置 (Windows )  C:\Windows\System32\Drivers\etc\hosts 添加一行
192.168.1.36    master

客户端代码:

package com.hull.hbase.test;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
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.client.Table;
import org.apache.hadoop.hbase.util.Bytes;

public class AppStarter {
	public static void main(String[] args) throws IOException {

		System.setProperty("hadoop.home.dir", "D:\\hadoop\\hadoop-2.5.1");
		Configuration conf = HBaseConfiguration.create();
		conf.set("hbase.zookeeper.property.clientPort", "2181");
		conf.set("hbase.zookeeper.quorum", "192.168.1.36");
		conf.set("zookeeper.znode.parent", "/hbase");

		Connection connection = ConnectionFactory.createConnection(conf);
		try {

			Table table = connection.getTable(TableName.valueOf("user"));
			try {
				Put p = new Put(Bytes.toBytes("u003"));
				p.add(Bytes.toBytes("cf"), Bytes.toBytes("name"),
						Bytes.toBytes("小试牛刀"));
				table.put(p);
				Get g = new Get(Bytes.toBytes("u003"));
				Result r = table.get(g);
				byte[] value = r.getValue(Bytes.toBytes("cf"),
						Bytes.toBytes("name"));
				String valueStr = Bytes.toString(value);
				System.out.println("GET: " + valueStr);
				Scan s = new Scan();
				s.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("name"));
				ResultScanner scanner = table.getScanner(s);
				try {
					for (Result rr = scanner.next(); rr != null; rr = scanner
							.next()) {

						System.out.println("Found row: " + rr);
					}

				} finally {
					scanner.close();
				}

			} finally {
				if (table != null)
					table.close();
			}
		} finally {
			connection.close();
		}
	}
}

//本地要下载 hadoop-2.5.1 
        //若提示缺少 winutils.exe  需要去这里下载  https://github.com/srccodes/hadoop-common-2.2.0-bin
        //解压后将   winutils.exe  hadoop.dll 放入hadoop目录的bin目录中

编译运行:

问题总结:
1,hbase 0.9.x  启动后,zookeeper中 原表为  root-region-server, hbase-1.x.x 为 meat-region-server
2,zookeeper 默认为hbase自己内置,自己管理启动与停止,无需独立下载运行,也可独立部署
3,hbase-client 为开发机  hbase 单机部署在另一台 linux上, Windows 需要通过 hosts 文件配置映射  ip  master
4,配置中的所有ip配置不要使用 127.0.0.1 尽量使用机器真实对外IP,以免造成hbase-client客户端不能访问 
5,jdk.tools.jar 缺少,项目不能编译生成class  从安装目录 拷贝一个Java\jdk1.8.0_91\lib\tools.jar  放入maven 依赖jar的目录,重命名为 jdk.tools.jar
 

猜你喜欢

转载自blog.csdn.net/hulele2009/article/details/81198770