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><br/>
<!-- 访问的hbase集群的名字 --><br/>
<property><br/>
<name>hbase.cluster.name</name><br/>
<value>${hbase.cluster.name}</value><br/>
</property>
<!-- rpc调用的超时 单位ms--><br/>
<property><br/>
<name>hbase.rpc.timeout</name><br/>
<value>200</value><br/>
</property>
<!-- API的超时 --><br/>
<property><br/>
<name>hbase.client.operation.timeout</name><br/>
<value>200</value><br/>
<discription>in ms</discription><br/>
</property>
<!-- 失败重试次数 --><br/>
<property><br/>
<name>hbase.client.retries.number</name><br/>
<value>2</value><br/>
</property>
<!-- 客户端并发调用HBaseClient API的线程数 --><br/>
<property><br/>
<name>hbase.client.tablepool.maxsize</name><br/>
<value>30</value><br/>
</property><br/>
</configuration>
c.加JVM启动参数设置验证参数
-Dhadoop.property.hadoop.security.authentication=kerberos<br/>
-Djava.security.krb5.conf=${conf_path}/krb5-hadoop.conf<br/>
-Dhadoop.property.hadoop.client.keytab.file=${conf_path}/${kerberos_principal}.keytab<br/>
-Dhadoop.property.hadoop.client.kerberos.principal=${kerberos_principal}@XIAOMI.HADOOP
具体的读写代码就不列了,网上例子比较多。
2.MapReduce批量写数据到Hbase
import org.apache.commons.lang.StringUtils;<br/>
import org.apache.hadoop.conf.Configuration;<br/>
import org.apache.hadoop.fs.Path;<br/>
import org.apache.hadoop.hbase.HBaseConfiguration;<br/>
import org.apache.hadoop.hbase.client.Put;<br/>
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;<br/>
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;<br/>
import org.apache.hadoop.hbase.mapreduce.TableReducer;<br/>
import org.apache.hadoop.hbase.util.Bytes;<br/>
import org.apache.hadoop.io.IntWritable;<br/>
import org.apache.hadoop.io.LongWritable;<br/>
import org.apache.hadoop.io.Text;<br/>
import org.apache.hadoop.mapreduce.Job;<br/>
import org.apache.hadoop.mapreduce.Mapper;<br/>
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import java.io.IOException;
public class WriteToHbase {<br/>
private static final String INPUT = "";<br/>
//指定hbase集群地址及表名<br/>
private static final String TABLE = "hbase://hytst-staging/namespace:tablename";
//读源文件<br/>
public static class SourceMapper<br/>
extends Mapper<LongWritable, Text, Text, Text>{<br/>
//something<br/>
}
//写入hbase<br/>
public static class WriteReducer<br/>
extends TableReducer<Text,IntWritable,ImmutableBytesWritable> {<br/>
private byte[] family = "W".getBytes();//列簇<br/>
private byte[] qualifier = "i".getBytes();//子列<br/>
private int rowDone;<br/>
private long startTime;<br/>
@Override<br/>
protected void setup(Context context) throws IOException, InterruptedException {<br/>
rowDone = 0;<br/>
startTime = System.currentTimeMillis();<br/>
super.setup(context);<br/>
}
public void reduce(Text key, Iterable<Text> values, Context context) {<br/>
byte[] rowkey = key.getBytes();<br/>
Put put = new Put(rowkey);<br/>
put.add(family, qualifier, Bytes.toBytes(StringUtils.join(values.iterator(), ",")));<br/>
context.write(new ImmutableBytesWritable(rowkey), put);<br/>
//或者如下<br/>
/*HTable table = new HTable(context.getConfiguration(), TABLE);<br/>
table.put(put);<br/>
table.close();*/<br/>
++rowDone;<br/>
//限制写QPS, 800/s<br/>
TableMapReduceUtil.limitScanRate(800, rowDone, System.currentTimeMillis() - startTime);<br/>
}<br/>
}
public static void main(String[] args) throws Exception {<br/>
Configuration conf = HBaseConfiguration.create();<br/>
Job job = Job.getInstance(conf, "HdfsToHbase");<br/>
job.setJarByClass(WriteToHbase.class);<br/>
// Turn off speculative to avoid write to hbase more than once<br/>
job.setSpeculativeExecution(false);
job.setMapperClass(SourceMapper.class);<br/>
job.setMapOutputKeyClass(Text.class);<br/>
job.setMapOutputValueClass(IntWritable.class);<br/>
FileInputFormat.addInputPath(job, new Path(INPUT));<br/>
//初始化TableReduceJob<br/>
TableMapReduceUtil.initTableReducerJob(TABLE, WriteReducer.class, job);<br/>
job.setNumReduceTasks(2);
System.exit(job.waitForCompletion(true) ? 0 : 1);<br/>
}<br/>
}
转发申明:
本文转自互联网,由小站整理并发布,在于分享相关技术和知识。版权归原作者所有,如有侵权,请联系本站 top8488@163.com,将在24小时内删除。谢谢
