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);
}
}
Java访问Hbase的更多相关文章
- JAVA API访问Hbase org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=32
Java使用API访问Hbase报错: 我的hbase主节点是spark1 java代码访问hbase的时候写的是ip 结果运行程序报错 不能够识别主机名 修改主机名 修改主机hosts文 ...
- Java 调用 Hbase API 访问接口实现方案
HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”.就像Bigtable利用了Google文件 ...
- HBase(一): c#访问hbase组件开发
HDP2.4安装系列介绍了通过ambari创建hbase集群的过程,但工作中一直采用.net的技术路线,如何去访问基于Java搞的Hbase呢? Hbase提供基于Java的本地API访问,同时扩展了 ...
- Hbase深入学习(六) Java操作HBase
Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...
- Java 操作 HBase 教程
Java 操作 HBase 教程 一.简介 二.hbase-client 引入 三.连接操作 四.表操作 五.运行测试 相关博文原文地址: 博客园:美码师:HBase(2) Java 操作 HBase ...
- java访问修饰符
了解面向对象思想的同学们,都知道"封装"这一基本特征,如何正确运用访问修饰符,恰恰能体现出封装的好坏. java访问修饰符有四个: 1)public:访问权限最高,其修饰的类.类变 ...
- [THINKING IN JAVA]访问权限控制
6 访问权限控制 6.1 包:库单元 package.import.import *.import static: 修改classpath环境变量可以将自己写的类库添加至环境变量并在任何java程序中 ...
- java 访问 usb
java 要访问 usb 设备,通常要自己写c/c++代码,然后再用 java 访问这些组件,以达到控制usb设备的目的.但现在有一个开源组件 libusb 帮我们做好了访问usb设备的封装(包括wi ...
- HBase(二): c#访问HBase之股票行情Demo
上一章完成了c#访问hbase的sdk封装,接下来以一个具体Demo对sdk进行测试验证.场景:每5秒抓取指定股票列表的实时价格波动行情,数据下载后,一方面实时刷新UI界面,另一方面将数据放入到在内存 ...
随机推荐
- NPM (node package manager) 入门 - 基础使用
什么是npm ? npm 是 nodejs 的包管理和分发工具.它可以让 javascript 开发者能够更加轻松的共享代码和共用代码片段,并且通过 npm 管理你分享的代码也很方便快捷和简单. 截至 ...
- 百度MIP移动页面加速——不只是CDN
MIP是用CDN做加速的么?准确答案是:是,但不只是. MIP全称Mobile Instant Pages,移动网页加速器,是百度提出的页面加速解决方案.MIP从前端渲染和页面网络传输两方面进行优化, ...
- 恢复SQL Server被误删除的数据(再扩展)
恢复SQL Server被误删除的数据(再扩展) 大家对本人之前的文章<恢复SQL Server被误删除的数据> 反应非常热烈,但是文章里的存储过程不能实现对备份出来的日志备份里所删数据的 ...
- 如何将VCSA添加到微软域控环境,并且实现微软域账号登陆vCenter
v:* { } o:* { } w:* { } .shape { } p.msonormal,li.msonormal,div.msonormal { margin: 0cm; margin-bott ...
- css text-fill-color与text-stroke讲解
顾名思义"text-fill-color"就是文字填充颜色而"text-stroke"就是文字描边.还别说,两个属性可以制作出各种炫酷的文字效果,不过IE系列都 ...
- Newtonsoft.Json设置类的属性不序列化
参考页面: http://www.yuanjiaocheng.net/webapi/parameter-binding.html http://www.yuanjiaocheng.net/webapi ...
- winform 窗体圆角设计
网上看到的很多winform窗体圆角设计代码都比较累赘,这里分享一个少量代码就可以实现的圆角.主要运用了System.Drawing.Drawing2D. 效果图 代码如下. private void ...
- ntp
一: 在一台可以连接外网的服务器A上配置ntp: 配置 /etc/ntp.conf 文件: server 202.120.2.101 # local clock (LCL) ...
- 水平可见直线 bzoj 1007
水平可见直线 (1s 128M) lines [问题描述] 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆 ...
- C#语法糖大汇总
首先需要声明的是"语法糖"这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕 ...