api接口

  1. public class HBaseConn {
  2. private String rootDir;
  3. private String zkServer;
  4. private String port;
  5. private Configuration conf;
  6. private HConnection hConn = null;
  7. ...
  8. }

建立连接:

  1. public HBaseConn(String rootDir, String zkServer, String port) throws IOException{
  2. this.rootDir = rootDir;
  3. this.zkServer = zkServer;
  4. this.port = port;
  5. conf = HBaseConfiguration.create();
  6. conf.set("hbase.rootdir", rootDir);
  7. conf.set("hbase.zookeeper.quorum", zkServer);
  8. conf.set("hbase.zookeeper.property.clientPort", port);
  9. hConn = HConnectionManager.createConnection(conf);
  10. }
  1. String rootDir = "hdfs://itcast04:9000/hbase";
  2. String zkServer = "itcast04";
  3. String port = "2181";
  4. HBaseConn conn = new HBaseConn(rootDir, zkServer, port);

建表:

  1. public void createTable(String tableName, List<String> cols) throws MasterNotRunningException, ZooKeeperConnectionException, IOException{
  2. HBaseAdmin admin = new HBaseAdmin(conf);
  3. if(admin.tableExists(tableName)){
  4. throw new IOException("table exists");
  5. }else{
  6. HTableDescriptor tableDesc = new HTableDescriptor(tableName);
  7. for(String col : cols){
  8. HColumnDescriptor colDesc = new HColumnDescriptor(col);
  9. //采用压缩;
  10. colDesc.setCompressionType(Algorithm.GZ);
  11. colDesc.setDataBlockEncoding(DataBlockEncoding.DIFF);
  12. tableDesc.addFamily(colDesc);
  13. }
  14. admin.createTable(tableDesc);
  15. }
  16. }
  1. /*List<String> cols = new LinkedList<String>();
  2. cols.add("basicInfo");
  3. cols.add("moreInfo");
  4. conn.createTable("student", cols);*/

增加记录(put)(RowKey+列族+列标识+Cell):

  1. public void saveData(String tableName, List<Put> puts) throws IOException{
  2. HTableInterface table = hConn.getTable(tableName);
  3. table.put(puts);
  4. table.setAutoFlush(false);
  5. //提高IO吞吐率
  6. table.flushCommits();
  7. }
  1. /*List<Put> puts = new LinkedList<Put>();
  2. //RowKey
  3. Put put1 = new Put(Bytes.toBytes("Tom"));
  4. put1.add(Bytes.toBytes("basicInfo"), Bytes.toBytes("age"), Bytes.toBytes("27"));
  5. put1.add(Bytes.toBytes("moreInfo"), Bytes.toBytes("tel"), Bytes.toBytes("13846677467"));
  6. puts.add(put1);
  7. conn.saveData("student", puts);*/

查表(返回Get):

  1. public Result getData(String tableName, String rowKey) throws IOException{
  2. HTableInterface table = hConn.getTable(tableName);
  3. Get get = new Get(Bytes.toBytes(rowKey));
  4. return table.get(get);
  5. }

将查询到的Get中的KV输出:

  1. public void format(Result result){
  2. String rowKey = Bytes.toString(result.getRow());
  3. KeyValue[] kvs = result.raw();
  4. for(KeyValue kv : kvs){
  5. System.out.println("Column Family: " + Bytes.toString(kv.getFamily()));
  6. System.out.println("Column Name: " + Bytes.toString(kv.getQualifier()));
  7. System.out.println("Cell Value: " + Bytes.toString(kv.getValue()));
  8. }
  9. }
  1. // conn.format(conn.getData("student", "Tom"));

Scan表,利用format输出:

  1. public void hbaseScan(String tableName) throws Exception{
  2. Scan scan = new Scan();
  3. scan.setCaching(1000);
  4. HTableInterface table = hConn.getTable(tableName);
  5. ResultScanner scanner = table.getScanner(scan);
  6. for(Result res : scanner){
  7. format(res);
  8. }
  9. }

简单过滤器:

  1. public void filterTest(String tableName) throws Exception{
  2. Scan scan = new Scan();
  3. scan.setCaching(1000);
  4. // RowFilter filter = new RowFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("Tom")));
  5. RowFilter filter = new RowFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("T\\w+"));
  6. scan.setFilter(filter);
  7. HTableInterface table = hConn.getTable(tableName);
  8. ResultScanner scanner = table.getScanner(scan);
  9. for(Result res : scanner){
  10. format(res);
  11. }
  12. }

分页过滤器:

  1. public void pageFilterTest(String tableName) throws IOException{
  2. PageFilter filter = new PageFilter(4);
  3. byte[] lastRow = null;
  4. int pageCount = 0;
  5. HTableInterface table = hConn.getTable(tableName);
  6. while(++pageCount > 0){
  7. System.out.println("Page Count:" + pageCount);
  8. Scan scan = new Scan();
  9. scan.setFilter(filter);
  10. if(lastRow != null){
  11. scan.setStartRow(lastRow);
  12. }
  13. ResultScanner scanner = table.getScanner(scan);
  14. int count = 0;
  15. for(Result res : scanner){
  16. lastRow = res.getRow();
  17. if(++count > 3)
  18. break;
  19. format(res);
  20. }
  21. if(count < 3){
  22. break;
  23. }
  24. }
  25. }

附件列表

时间: 2024-12-20 15:42:29

api接口的相关文章

微信小程序的Web API接口设计及常见接口实现

微信小程序给我们提供了一个很好的开发平台,可以用于展现各种数据和实现丰富的功能,通过小程序的请求Web API 平台获取JSON数据后,可以在小程序界面上进行数据的动态展示.在数据的关键 一环中,我们设计和编写Web API平台是非常重要的,通过这个我们可以实现数据的集中控制和管理,本篇随笔介绍基于Asp.NET MVC的Web API接口层的设计和常见接口代码的展示,以便展示我们常规Web API接口层的接口代码设计.参数的处理等内容. 1.Web API整体性的架构设计 我们整体性的架构设计

微信小程序API接口

微信小程序API接口 wx.request(OBJECT)   wx.request发起的是 HTTPS 请求. OBJECT参数说明: url->开发者服务器接口地址->String; data->请求的参数->Object.String; header->设置请求的 header , header 中不能设置 Referer->Object; method->默认为 GET,有效值:OPTIONS, GET, HEAD, POST, PUT, DELETE,

百度翻译APi接口实现

案例使用百度翻译API接口,实现文本翻译 为保证翻译质量,请将单次请求长度控制在 6000 bytes以内.(汉字约为2000个) 签名生成方法如下: 1.将请求参数中的 APPID(appid), 翻译query(q, 注意为UTF-8编码), 随机数(salt), 以及平台分配的密钥(可在管理控制台查看) 按照 appid+q+salt+密钥 的顺序拼接得到字符串1. 2.对字符串1做md5,得到32位小写的sign. 注意: 1.请先将需要翻译的文本转换为UTF-8编码 2.在发送HTTP

php后台对接ios,安卓,API接口设计和实践完全攻略,涨薪必备技能

2016年12月29日13:45:27 关于接口设计要说的东西很多,可能写一个系列都可以,vsd图都得画很多张,但是由于个人时间和精力有限,所有有些东西后面再补充 说道接口设计第一反应就是restful api 请明白一点,这个只是设计指导思想,也就是设计风格 ,比如你需要遵循这些原则 原则条件REST 指的是一组架构约束条件和原则.满足这些约束条件和原则的应用程序或设计就是 RESTful.Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的.从客户端到服务

总结的一些微信API接口

本文给大家介绍的是个人总结的一些微信API接口,包括微信支付.微信红包.微信卡券.微信小店等,十分的全面,有需要的小伙伴可以参考下. 1. [代码]index.php <?php include_once 'lib.inc.php';   $wcObj = new WeChat("YOUKUIYUAN"); $wcObj->wcValid(); 2. [代码]微信入口类 <?php /**  * Description of wechat  *  * @author

Thinkphp5使用api接口demo

阿里云有免费的手机归属地api接口,作为新手的博主决定使用该接口写一个手机归属地查询网站,学习api的使用. 主要思路: 获取前台传入的手机号->写出请求url,请求头,请求方式->初始化cURL变量->设置cURL变量参数->执行查询,保存返回的json数据->关闭查询连接->将json数据解析为php数组->将该php数组赋值到模板->前台调用该数组值. public function index() { $num=input('m'); //获取前台提

Restful风格API接口开发springMVC篇

Restful风格的API是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. 在Restful风格中,用户请求的url使用同一个url而用请求方式:get,post,delete,put...等方式对请求的处理方法进行区分,这样可以在前后台分离式的开发中使得前端开发人员不会对请求的资源地址产生混淆和大量的检查方法名的麻烦,形成一个统一的接口. 在Restful风格中,现

C++传智笔记(6):socket客户端发送报文接受报文的api接口

#define _CRT_SECURE_NO_WARNINGS #include "stdio.h" #include "stdlib.h" #include "string.h" #include "itcast_comm.h" #include "memwatch.h" #include "itcastlog.h" /* 下面定义了一套socket客户端发送报文接受报文的api接口

etcd api 接口

etcd api接口 采用标准的restful 接口,支持http 和 https 两种协议. 1. PUT 为etcd存储的键赋值, 即创建 message 键值,赋值为"Hello world" 1 [[email protected] ~]# curl http://127.0.0.1:2379/v2/keys/message -X PUT -d value="Hello world" | python -m json.tool 2 % Total % Rec

调用API接口下载腾讯CDN访问日志

公司使用腾讯cdn为网站静态内容加速,由于业务需求,需要每天下载昨天的日志(因为腾讯方面给出回复,访问日志会有2个小时或以上时间的延迟,所以不建议下载当天日志,所以每天统计前一天的日志以做分析).因为cdn是由运维来管理,但是这个需求是业务的,如果每天都由运维进行下载,再通过邮件或其他工具发送,可能就显得麻烦.所幸腾讯CDN提供了API接口,因此采用shell脚本调用API进行下载的方式,定期下载日志,这样只要业务人员运行这个脚本就能自行下载日志,解放了运维的工作. #!/bin/bash ##