1.代码

package Test05;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.Cell;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.client.Durability;

import org.apache.hadoop.hbase.client.HTable;

import org.apache.hadoop.hbase.client.Put;

import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver;

import org.apache.hadoop.hbase.coprocessor.ObserverContext;

import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;

import org.apache.hadoop.hbase.regionserver.wal.WALEdit;public classTestCoprocessor extends BaseRegionObserver {static Configuration config =HBaseConfiguration.create();static HTable table = null;static{

config.set("hbase.zookeeper.quorum","192.168.1.113.12:2181,192.168.1.113.13:2181,192.168.1.113.14:2181");try{

table= new HTable(config, "guanzhu");

}catch(Exception e) {

e.printStackTrace();

}

}

@Overridepublic void prePut(ObserverContexte,

Put put, WALEdit edit, Durability durability) throws IOException {//super.prePut(e, put, edit, durability);

byte[] row =put.getRow();

Cell cell= put.get("f1".getBytes(), "from".getBytes()).get(0);

Put putIndex= newPut(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());

putIndex.addColumn("f1".getBytes(), "from".getBytes(), row);

table.put(putIndex);

table.close();

}

}

上面这个代码有缺陷,只能索引一次结果。建议使用下面的

package Test05;

import java.io.IOException;

import org.apache.hadoop.hbase.Cell;

import org.apache.hadoop.hbase.CoprocessorEnvironment;

import org.apache.hadoop.hbase.client.Durability;

import org.apache.hadoop.hbase.client.HTableInterface;

import org.apache.hadoop.hbase.client.HTablePool;

import org.apache.hadoop.hbase.client.Put;

import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver;

import org.apache.hadoop.hbase.coprocessor.ObserverContext;

import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;

import org.apache.hadoop.hbase.regionserver.wal.WALEdit;

import org.apache.hadoop.hbase.util.Bytes;public classTestCoprocessor2 extends BaseRegionObserver {private HTablePool pool = null;

@Overridepublic voidstart(CoprocessorEnvironment env) throws IOException {

pool= new HTablePool(env.getConfiguration(), 10);

}

@Overridepublic void prePut(ObserverContexte,

Put put, WALEdit edit, Durability durability) throws IOException {

HTableInterface table1= pool.getTable(Bytes.toBytes("guanzhu"));byte[] rowkey =put.getRow();

Cell cell= put.get("f1".getBytes(), "from".getBytes()).get(0);

Put indexput= newPut(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());

indexput.add(Bytes.toBytes("f1"), Bytes.toBytes("from"), rowkey);

table1.put(indexput);

table1.close();

}

@Overridepublic voidstop(CoprocessorEnvironment env) throws IOException {

pool.close();

}

}

2.在hadoop创建文件

//普通集群

hdfs dfs -mkdir /hbasecp

//cdh

sudo -u hdfs hdfs dfs -mkdir /hbasecp

3.将文件上传hadoop-1

使用shell命令上传到hdfs

hadoop fs -put hbase-observer-elasticsearch-1.0-SNAPSHOT-zcestestrecord.jar /hbase_es

hadoop fs-chmod -R 777 /hbase_es

下面特殊

对CDH用户:假设系统有一个文件夹/user/directory,注意,这个文件夹的拥有者不是所谓的“root”。实际上,这个文件夹为“hdfs”所有(755权限,这里将hdfs理解为一个属于supergroup的用户)。

所以,只有hdfs可以对文件夹进行写操作。与Unix/Linux不同,hdfs是超级使用者(superuser),而不是root。

所以,当你想要进行创建文件夹或者上传文件等操作的时候,可以这么做:

sudo -u hdfs hdfs dfs -mkdir /user/intern/test67

///

sudo -u hdfs hdfs dfs -put myfile.txt /user/intern/test67显然,上面的方法麻烦在于:每当进行一次操作的时候,都需要切换成hdfs用户。这在spark-shell开发程序倒还好,但是对提交作业的时候,显然是很不方便的。

这里,我们可以创建一个文件夹,更改其权限为root(或你的用户名)。所以,你可以向这个文件夹随意的存、改文件了。

sudo-u hdfs hadoop fs -chown root /user/intern/test67

之后是

4.以下是解绑的命令(这个是错误时删除使用)

//hbase shell命令

disable 'test_record'alter'test_record', METHOD => 'table_att_unset',NAME => 'coprocessor$1'enable'test_record'desc'test_record'

5.测试

hbase(main):017:0> put 'fensi','c','f1:from','b'

对fensi表添加数据,查看数据是guanzhu表里也有数据

注意细节:

1.上面图片路径错误。正确的是:   alter 'fensi', METHOD => 'table_att', 'coprocessor' => 'hdfs:///hbasecp/cppp.jar|Test05.TestCoprocessor|1001|'

2.cdh坑略多自己慢慢试验最终的结果是下面这样的,有很多权限

3.cdh将jar添加到hdfs上

hbase建立索引参考:https://www.cnblogs.com/liuwei6/p/6837674.html

cdh修改权限参考:https://blog.csdn.net/g11d111/article/details/72902112

https://blog.csdn.net/m0_37739193/article/details/78544276

----------------------------------------------------------------------------------------------------------------------------------------------------------------

上面的方案角色分配:fensi是数据表,导数据(当满足jar的属性时数据会插到guanzhu表里,guanzhu表里是fensi表的rowkey索引)。guanzhu是索引表。

二级索引的缺点

hbase创建索引不当时将会导致HRegionServer都挂掉,重启hbase也会挂掉。解决办法

修改hbase所有配置文件

vi hbase-site.xml

添加如下,关闭hbase的二级索引

hbase.coprocessor.abortonerror

false

重启hbase。然后删除带有索引的表,之后把hbase-site.xml上面这个刚刚添加的删除。即可

hbase建索引java api_hbase创建索引相关推荐

  1. mysql如何创建简单索引_mysql 如何创建索引呢,这个其实很简单

    mysql 如何创建索引? mysql 如何创建索引呢,这个其实很简单 create index或者为己有字段增加索引 ALTER TABLE `table_name` ADD UNIQUE (`co ...

  2. mysql修改索引语句_mysql——创建索引、修改索引、删除索引的命令语句

    查看表中已经存在 index:show index from table_name; 创建和删除索引索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER ...

  3. lucene全文搜索之三:生成索引字段,创建索引文档(给索引字段加权)基于lucene5.5.3...

    前言:上一章中我们已经实现了索引器的创建,但是我们没有索引文档,本章将会讲解如何生成字段.创建索引文档,给字段加权以及保存文档到索引器目录 luncene5.5.3集合jar包下载地址:http:// ...

  4. MySQL索引(什么是索引、如何创建索引、什么时候用索引、索引的作用)

    1什么是索引? 简单来讲就是排好序的快速查找数据结构. 2索引的优势劣势 3索引分类和创建索引的命令 4 BTree索引检索原理 5 那些情况适合索引 6 哪些情况不适合创建索引 下图是关于第三种情况 ...

  5. mysql 添加索引 mysql 如何创建索引

    mysql 添加索引 mysql 如何创建索引 1.添加PRIMARY KEY(主键索引)  mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( ` ...

  6. Elasticsearch Java Client创建索引

    1 配置 pom.xml org.springframework.boot spring-boot-starter-test org.elasticsearch.client elasticsearc ...

  7. es java api 创建索引结构_elasticsearch - 如何使用ES的Java API来创建一个新类型的索引 - SO中文参考 - www.soinside.com...

    我已经成功创建索引的使用客户,这样的代码: public static boolean addIndex(Client client,String index) throws Exception { ...

  8. linux mysql 建索引_MySQL在创建索引之前一定要想到的事情

    MySQL在5.5.3版本引入了metadata lock 他的本意是解决之前版本事务隔离特性的几个bug,但是引入的问题也不小. 先说说MySQL的事务吧. Oracle的事务指的是需要分配回滚段的 ...

  9. Java Elasticsearch创建索引

    1,新建一个es的项目. 2,导入依赖Elasticsearch <dependencies><!--测试--><dependency><groupId> ...

最新文章

  1. java比较字符引用地址_java中的比较运算符== 与 equals()方法
  2. P3373 【模板】线段树 2(区间乘法+区间加法+区间求和)
  3. spring分布式事务学习笔记(2)
  4. mysql 创建分区索引吗_MySQL分区字段列有必要再单独建索引吗?
  5. 机器学习基础算法30-贝叶斯网络理论
  6. ReactJs移动端兼容问题汇总
  7. LDA-math-MCMC 和 Gibbs Sampling (我爱NLP)
  8. 信度检验-Krippendorff's alpha检验
  9. 爬虫 and 数据分析 | 一万条b站评论看工作细胞
  10. 花生壳配置域名以及公网ip
  11. android坐标计算器,函数科学计算器算坐标
  12. MySQL专题二——SELECT语法
  13. RxJava2 堆栈信息显示不全解决方案
  14. 【轻松学】python中文件的读和写——open、read或readline、close
  15. 无穷微积分牵手“知识共享”,如虎添翼,所向无敌
  16. 血泪总结:如何从微信小程序的坑跳进支付宝小程序的大坑
  17. MySQL查询优化系列文章
  18. 关于Android app 国际化 中英文翻译的细节处理
  19. Greenplum如何激活、同步、删除Standby恢复原始Master
  20. 【恶搞向】教你如何做一个关机程序

热门文章

  1. 基于JAVA+SpringMVC+Mybatis+MYSQL的企业审批管理系统
  2. .NET、.NET框架、ASP.NET和C#的关系(完成)
  3. Android 源码分析(三) Service 启动分析
  4. tomcat架构分析(容器类)
  5. 查看sqlserver 2008中性能低下的语句
  6. ORACLE小错误和小技巧
  7. java各种排序实现
  8. hdu 2586 (LCA)
  9. Python选择结构中多条件测试的简化写法
  10. python range函数怎么表示无限_python range函数怎么用