Hbase shell操作
前提:启动zookeeper,
之后要启动hbase,之后再启动hbase shell
start-hbase.sh
hbase shell
如果不启动hbase 就启动hbase shell会报错的!
ERROR: Can't get master address from ZooKeeper; znode data == null
所有命令不需要分号!
1) list_namespace:查询所有命名空间
hbase(main):020:0> list_namespace
2) list_namespace_tables: 查询指定命名空间的表
hbase(main):009:0> list_namespace_tables 'default'
TABLE
Student
student
3) create_namespace: 创建指定的命名空间
hbase(main):023:0> create_namespace 'myns'
hbase(main):024:0> list_namespace
4)describe_namespace: 查询指定命名空间的描述信息(也叫结构信息,属性信息)
hbase(main):023:0> describe_namespace 'ns4'
DESCRIPTION
{NAME => 'ns4'}
5) alter_namespace :修改命名空间的描述信息
添加描述信息
hbase(main):026:0> alter_namespace 'ns4', {METHOD=>'set','name'=>'lisi'}
0 row(s) in 0.0730 seconds
hbase(main):027:0> describe_namespace 'ns4'
DESCRIPTION
{NAME => 'ns4', name => 'lisi'}
6) drop_namespace:删除指定命名空间’name
hbase(main):032:0> drop_namespace 'ns4'
0 row(s) in 0.1150 seconds
hbase(main):033:0> list_namespace
NAMESPACE
default
hbase
mydbb
Hbase scala操作
新建maven工程,并导入依赖
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.2.1</version>
</dependency>
创建nameSpace
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.hbase.NamespaceDescriptor
import org.apache.hadoop.hbase.client.{Admin, Connection, ConnectionFactory}
object TestConn extends App{
//创建一个hadoop的配置对象
private val conf = new Configuration()
//配置zookeeper的参数
conf.set("hbase.zookeeper.quorum", "mypc01:2181,mypc02:2181,mypc03:2181")
//创建一个连接
private val connection: Connection = ConnectionFactory.createConnection(conf)
//获取一个操作Hbase的客户端对象
private val admin: Admin = connection.getAdmin
//创建一个namespace的描述器
private val descriptor: NamespaceDescriptor = NamespaceDescriptor.create("csdn").build()
//客户端进行提交创建
admin.createNamespace(descriptor)
//关闭连接
connection.close()
//关闭客户端
admin.close()
}
连接Hbase比较麻烦,可以进行封装
object HbaseUtil {
private val conf = new Configuration()
conf.set("hbase.zookeeper.quorum", "mypc01:2181,mypc02:2181,mypc03:2181")
private val connection: Connection = ConnectionFactory.createConnection(conf)
var admin: Admin = _;
def getAdmin: Admin ={
admin= connection.getAdmin
admin
}
def closeAdmin(): Unit ={
admin.close()
}
}
列出所有ns
object ListNS extends App{
//获取admin客户端
val admin=HbaseUtil.getAdmin
//获取所有ns的描述器
private val descriptors: Array[NamespaceDescriptor] = admin.listNamespaceDescriptors()
for(x<-descriptors){
println(x.getName)
}
}
NS3
SYSTEM
csdn
列出所有ns的表名
object ListTables extends App{
//获取客户端admin
val admin=HbaseUtil.getAdmin
//获取所有的ns数组并遍历取出
private val descriptors: Array[NamespaceDescriptor] = admin.listNamespaceDescriptors()
for(x<-descriptors){
println(s"ns: ${x.getName}")
//依据每一个ns获取其下的table数组并遍历取出
val descriptors1: Array[HTableDescriptor] = admin.listTableDescriptorsByNamespace(x.getName)
for(t<-descriptors1){
println(s"table: s${t.getTableName}")
}
}
}
ns: NS3
ns: SYSTEM
table: sSYSTEM:CATALOG
table: sSYSTEM:FUNCTION
table: sSYSTEM:MUTEX
table: sSYSTEM:SEQUENCE
table: sSYSTEM:STATS
这个还有简便写法
object ListTables2 extends App{
val admin=HbaseUtil.getAdmin
private val names: Array[TableName] = admin.listTableNames()
for(x<-names){
println(x.getNameAsString)
}
}
修改ns的属性
object AlterNS extends App{
private val admin: Admin = HbaseUtil.getAdmin
private val csdn: NamespaceDescriptor = admin.getNamespaceDescriptor("csdn")
csdn.setConfiguration("author","lisi")
admin.modifyNamespace(csdn)
//验证
private val configuration: util.Map[String, String] = csdn.getConfiguration
println(configuration)
}
{author=lisi}
删除namespace
object DeleteNS extends App{
HbaseUtil.getAdmin.deleteNamespace("csdn")
}
总结
只要获得一个admin对象,Hbase的scala操作还是比较简单的~