Java访问Hbase

1.kerberos验证

a.下载对应版本JCE(Java Cryptography Extension),解压拷贝local_policy.jar/US_export_policy.jar到$JAVA_HOME//jre/lib/security

b.在resource即classes路径下添加hbase-site.xml

<configuration>
    <!-- 访问的hbase集群的名字 -->
    <property>
        <name>hbase.cluster.name</name>
        <value>${hbase.cluster.name}</value>
    </property>

    <!-- rpc调用的超时 单位ms-->
    <property>
        <name>hbase.rpc.timeout</name>
        <value>200</value>
    </property>

    <!-- API的超时  -->
    <property>
        <name>hbase.client.operation.timeout</name>
        <value>200</value>
        <discription>in ms</discription>
    </property>

    <!-- 失败重试次数 -->
    <property>
        <name>hbase.client.retries.number</name>
        <value>2</value>
    </property>

    <!-- 客户端并发调用HBaseClient API的线程数 -->
    <property>
        <name>hbase.client.tablepool.maxsize</name>
        <value>30</value>
    </property>
</configuration>

c.加JVM启动参数设置验证参数

-Dhadoop.property.hadoop.security.authentication=kerberos
-Djava.security.krb5.conf=${conf_path}/krb5-hadoop.conf
-Dhadoop.property.hadoop.client.keytab.file=${conf_path}/${kerberos_principal}.keytab
-Dhadoop.property.hadoop.client.kerberos.principal=${kerberos_principal}@XIAOMI.HADOOP

具体的读写代码就不列了,网上例子比较多。

2.MapReduce批量写数据到Hbase

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.hbase.mapreduce.TableReducer;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

import java.io.IOException;

public class WriteToHbase {
    private static final String INPUT = "";
    //指定hbase集群地址及表名
    private static final String TABLE = "hbase://hytst-staging/namespace:tablename";

    //读源文件
    public static class SourceMapper
            extends Mapper<LongWritable, Text, Text, Text>{
        //something
    }

    //写入hbase
    public static class WriteReducer
            extends TableReducer<Text,IntWritable,ImmutableBytesWritable> {
        private byte[] family = "W".getBytes();//列簇
        private byte[] qualifier = "i".getBytes();//子列
        private int rowDone;
        private long startTime;
        @Override
        protected void setup(Context context) throws IOException, InterruptedException {
            rowDone = 0;
            startTime = System.currentTimeMillis();
            super.setup(context);
        }

        public void reduce(Text key, Iterable<Text> values, Context context)  {
            byte[] rowkey = key.getBytes();
            Put put = new Put(rowkey);
            put.add(family, qualifier, Bytes.toBytes(StringUtils.join(values.iterator(), ",")));
            context.write(new ImmutableBytesWritable(rowkey), put);
            //或者如下
            /*HTable table = new HTable(context.getConfiguration(), TABLE);
            table.put(put);
            table.close();*/
            ++rowDone;
            //限制写QPS, 800/s
            TableMapReduceUtil.limitScanRate(800, rowDone, System.currentTimeMillis() - startTime);
        }
    }

    public static void main(String[] args) throws Exception {
        Configuration conf = HBaseConfiguration.create();
        Job job = Job.getInstance(conf, "HdfsToHbase");
        job.setJarByClass(WriteToHbase.class);
        // Turn off speculative to avoid write to hbase more than once
        job.setSpeculativeExecution(false);

        job.setMapperClass(SourceMapper.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);
        FileInputFormat.addInputPath(job, new Path(INPUT));
     //初始化TableReduceJob
        TableMapReduceUtil.initTableReducerJob(TABLE, WriteReducer.class, job);
        job.setNumReduceTasks(2);

        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

  

时间: 2024-10-27 09:31:57

Java访问Hbase的相关文章

Java 访问指示符

Java 访问指示符 poublic,protected 以及 private 都置于方法或数据成员的前面.每 个访问指示符都只控制着对那个特定定义的访问 public: 用public修饰的类.类属变量及方法,包内及包外的任何类(包括子类和普通类)均可以访问: protected: 用protected修饰的类.类属变量及方法,包内的任何类及包外那些继承了该类的子类才能访问 protected 关键字为我们引入了一种名为"继承"的概念,它以现有的类为 基础,并在其中加入新的成员,同时

java操作hbase例子

hbase安装方法请参考:hbase-0.94安装方法详解 hbase常用的shell命令请参考:hbase常用的shell命令例子 java操作hbase,在eclipse中创建一个java项目,将hbase安装文件根目录的jar包和lib目录下jar包导入项目,然后就可以编写java代码操作hbase了.下面代码给出来一个简单的示例 /** * @date 2015-07-23 21:28:10 * @author sgl */ package com.songguoliang.hbase;

Java访问USB设备

最近在用Java访问RDing设备,使用的是Java HID API.使用过程中发现一个问题,由于是嵌入式小白,不知道如何向USB设备发送report.于是想到可以看看自带的软件如何访问USB的.找到了一个叫做Bus Hound的软件.非常小,但是功能很全,可以看到电脑上所有USB设备的通信信息.如下图所示.这样就可以看到控制信息和读入读出信息.

Java访问数据库

首先简介一下JDBC: JDBC:Java DataBase Connection. JDBC:Java数据库连接.它是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问. 它由一组用Java语言编写的类和接口组成. JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名. 一.Java访问数据库的原理: 举个例子来讲:Oracle.SQLServer.MySQL.DB2等数据库可以类比为“水厂”,Con

Java访问权限控制

访问权限控制   java提供了访问权限修饰词,以供类库开发人员向客户端程序员指明哪些是可用的,哪些是不可用的.访问权限控制的等级,从最大权限到最小权限依次是:public.protected.包访问权限(没有关键字).private. 包:库单元 包内有一组类,它们在单一名字空间之下被组织在了一起.如果你向导入某个标准库中的类的话,可以使用import关键字.我们之所以要导入,就是要提供一个管理名字空间的机制.所有类成员的名称都是彼此分离的.所以具有相同方法的不同类在程序运行时不会出现错误的.

JAVA访问URL

JAVA访问URL: package Test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URI; import java.net.URISyntaxException; import java.

java访问控制符

当修饰符修饰成员变量和方法时: private(当前类访问权限):自身的private只能在当前类的内部被访问. 例子说明: class Circle{ private static double pi = 3.14; private double radius; public Circle(double r){ radius = r; } //获得圆数组中半径最大值 public static double compare(Circle[] cirs){ double max = cirs[0

[JavaWeb基础] 003.JAVA访问Mysql数据库

上面两篇讲解了简单的JSP + Servlet的搭建和请求,那么后面我们肯定要用到数据交互,也就是操纵数据库的数据,包括对数字的增加,删除,修改,查询.我们就用简单的MySql来做例子 我们需要引入驱动包mysql-connector-java.jar,自行去网上下载,有很多. 下面我跟着代码看看怎么进行增删改查 1.打开数据库 // 驱动程序名 private String driver = "com.mysql.jdbc.Driver"; // URL指向要访问的数据库名scutc

Java 访问权限控制:你真的了解 protected 关键字吗?

摘要: 在一个类的内部,其成员(包括成员变量和成员方法)能否被其他类所访问,取决于该成员的修饰词:而一个类能否被其他类所访问,取决于该类的修饰词.Java的类成员访问权限修饰词有四类:private,无(默认情况下,包访问权限),protected 和 public,而其中只有包访问权限和public才能修饰一个类(内部类除外).特别地,很多的介绍Java的书籍对protected介绍的比较笼统,常常会对大家造成误解.因此,本文重点揭示了 protected 关键字的内涵和用法,并介绍了一些其他