浅谈HBASE典型函数内部原理
文章开始把我喜欢的这句话送个大家:这个世界上还有什么比自己写的代码运行在一亿人的电脑上更酷的事情吗,如果有那就是让这个数字再扩大十倍。
HBase无法轻易建立“二级索引”,难以执行求和、计数、排序等操作这一特性一直被大家诟病,也确有许多不便,于是,HBase在0.92之后引入了协处理器(coprocessors),实现一些激动人心的新特性:能够轻易建立二次索引、复杂过滤器以及访问控制等。
协处理器即相当于基于 ReginServer-Master上的MapReduce编程框架,ReginServer即相当于Mappper,Master相当于reducer,这样说是不是就清晰了很多呢。
协处理器分两种类型,系统协处理器可以全局导入region server上的所有数据表,表协处理器即是用户可以指定一张表使用协处理器。协处理器框架为了更好支持其行为的灵活性,提供了两个不同方面的插件。一个是观察者(observer),类似于关系数据库的触发器。另一个是终端(endpoint),动态的终端有点像存储过程。
下面分析创建表,连接表以及添加数据过程中的代码过程:
//创建表函数
if(admin.tableExists(tableName))...........//首先判断表是否已经存在了
else {
HTableDescriptor hTableDiscriptor=new HTableDescriptor(tableName)//HTableDiscriptor类是专门对表进行信息管理 的,几个列几个列族。。。。。
HColumDescriptor hColumDescriptor=new HColumDescriptor(str)//HColumDescriptor 是专门管理列族的类str传入列族的 信息
hTableDescriptor.addFamily(hColumDescroiptor)//通过HTableDescriptor建立列族
admin.createTable(hTableDescriptor)//列族创建完可以建表了
//连接表函数
configuration =HBase Configuration.create()//配置信息实例化对象
configuration.set("hbase.rooter'',"hdfs://localhost......"//rooter设置HBase存储数据的根路径相当于HDFS系统当中core- site.xml以及hdfs-site.xml文件的作用
admin=connection.getAdmin()//建立连接成功
//添加数据函数
Table table=connection.getTable(TableName.valueOfName(tableName))//用传入的tableName实例化table对象
Put put=new Put(Bytes.toBytes(rowKey))//Put 类负责添加数据,添加数据过程先确定行键
put.addColum(Byte.toBytes(colFamily),Byte.toBytes(col),Byte.toBytes(val));//cloFamily是列族,col是列,val是单元格的值
table.put(put)
table.close()
以上便是三个函数的关键步骤解析,希望可以帮到小白理解内部原理
另外初学者很容易分不清什么是行键什么是列族什么是列在此举个通俗的例子帮助理解
insertTable("student","zhangsan ",'score","English","100")这一例子中student就是表名,zhangsan为行键,score为列族English为列,100即为val。
加油吧,程序员!