(A) .Hbase básica introducción
1.hbase hdfs anterior se estableció para proporcionar una alta fiabilidad, alto rendimiento, las columnas de almacenamiento, sistema de base de datos escalable en tiempo real a leer y escribir
2.hbase Características:
HBase Todo se almacena en bytes
de HBase rowKey ser ordenada orden de bytes, y se suma el índice
hbase corta automáticamente de acuerdo con el número de fila Región, manteniendo el equilibrio de carga y redundancia
almacenamiento 3.hbase estructura:
rowKey: una matriz de bytes, cada registro de la tabla es la "llave maestra", fácil de encontrar de forma rápida, diseño rowKey es muy importante;
Columna familiar: familias de columna, tiene un nombre (cadena), contiene uno o más de columna de correlación; la columna bajo el mismo grupo de columnas que tienen las mismas propiedades de
la columna: pertenecer a un columnfamily, familyName:, cada registro se puede añadir dinámicamente columnName;
la célula: en la que la marca de tiempo es una marca de tiempo, el valor es el valor de la correspondiente rowKey columna
hbase (principal): 009: 0> Barrido 'Usuario'
ROW COLUMNA + CELL
id001 columna = personInfo: nombre, marca de tiempo = 1502368030841, valor = xiaoming
id001 columna = personInfo: edad, marca de tiempo = 1502368069926, valor = 18
id001 columna = personInfo: sexo, marca de tiempo = 1502368093636, valor = hombre
(B) comandos comunes .Hbase
1. Introducir el shell: shell hbase
[Hadoop @ INDB-3-136-hzifc bin] $ echo $ HBASE_HOME
/ Datos / programa / hbase
[Hadoop bin @ INDB-3-136-hzifc] $ / datos / programa / hbase / bin / shell hbase
2. Comprobar todas las tablas: lista
hbase (principal): 003: 0> lista
T
TABLA
S
SYSTEM.CATALOG
S
SYSTEM.FUNCTION
S
SYSTEM.SEQUENCE
S
SYSTEM.STATS
T
TEST.USER
U
Usuario
6 fila (s) en 0,0340 segundos
3. Para ver una tabla de abajo para más detalles: describir
hbase (principal): 004: 0> describir 'Usuario'
T
Tabla de usuario está habilitada
U
usuario
C
FAMILIAS columna Descripción
{
{NAME => 'info', BLOOMFILTER => 'ROW', versiones => '1', in_memory => 'falso', KEEP_DELETED_CELLS => 'fALSO',
DATA_BLOCK_ENCODING => 'NONE', TTL => 'FORE
V
, compresión => 'NONE' VER', MIN_VERSIONS => '0', BLOCKCACHE => 'verdadero', BLOCKSIZE => '65536', REPLICATION_SCOPE =>
'0'}
. Fila 1 (S) en 0,1410 segundos El
4. Crear una tabla: crear
Sintaxis: crear <table>, {NOMBRE => <familia>, versiones => <VERSIONES>}
Crear una tabla de usuario, columnas puede ser uno o más aromático información
hbase (principal): 002: 0 > crear 'Usuario', ' la INFO1 '
0 Row (S) en 1.5890 segundos los
5. Retire la familia columna especificada: delete
语法: alter表名, 'delete' => '列族'
hbase (principal): 002: 0> alter 'Usuario', 'delete' => 'info'
T
Actualización de todas las regiones con el nuevo esquema de ...
1/1 regiones actualizan.
D
Listo.
Fila 0 (S) en 2.5340 segundos El
6. Los datos de inserción: put
语法: put <table>, <rowKey>, <familia: la columna>, <valor>
hbase (principal): 005: 0> put 'Usuario', 'fila1', 'información: Nombre', 'Xiaoming'
0 fila ( s) en 0,1200 segundos
hbase (principal): 006: 0> put 'Usuario', 'fila2', 'información: edad', '18'
0 fila (s) en 0,0170 segundos
hbase (principal): 007: 0> put 'Usuario', ' Row3' , 'Info: sexo', 'hombre'
0 fila (s) en 0,0030 segundos
El rowKey consulta un registro: get
语法: get <table>, <rowKey>, [<familia: la columna>, ....]
hbase (principal): 008: 0> get 'Usuario', 'fila2'
COLUMNA CELL
Info: timestamp edad = 1502368069926, valor = 18
1 fila (s) en 0,0280 segundos
hbase (principal): 028: 0> get 'Usuario', 'Row3', 'información: el sexo'
COLUMNA DE CÉLULAS
información: fecha y hora del sexo = 1502368093636, valor = hombre
hbase (principal): 036: 0> get 'Usuario', 'fila1', {COLUMNA => 'información: nombre'}
COLUMNA DE CÉLULAS
información: nombre de marca de tiempo = 1502368030841, valor = xiaoming
1 fila (s) en 0,0120 segundos
8. consulta todos los registros: Tomografía
Sintaxis: exploración <table>, {COLUMNAS => [<familia: columna>, ....], LIMIT => num}
escanea registró
hbase (principal): 009: 0 > scan 'Usuario'
FILA DE COLUMNA + CELULAR
columna fila1 = información: nombre, fecha y hora = 1502368030841, valor = Xiaoming
columna fila2 = Info: edad, fecha y hora = 1502368069926, valor = 18
columna Row3 = Info: sexo, fecha y hora = 1502368093636, valor = hombre
3 fila (s) en 0,0380 segundos
扫描前2条
hbase (principal): 037: 0> scan 'Usuario', {LIMIT => 2}
R
ROW COLUMNA + CELL
columna row1 = info: nombre, marca de tiempo = 1502368030841, valor = xiaoming
columna fila2 = info: edad, marca de tiempo = 1502368069926, valor = 18
2 fila (s) en 0,0170 segundos
范围查询
hbase (principal): 011: 0> scan 'usuario', {StartRow => 'fila2'}
R
cOLUMNA ROW + CELL
columna fila2 = info: edad, marca de tiempo = 1502368069926, valor = 18
columna Row3 = Info: sexo, marca de tiempo = 1502368093636, valor = hombre
2 fila (s) en 0,0170 segundos
hbase (principal): 012: 0> scan 'Usuario', {StartRow => 'fila2', EndRow => 'fila2'}
R
COLUMNA ROW + CELL
columna fila2 = info: edad, marca de tiempo = 1502368069926, valor = 18
1 fila (s) en 0,0110 segundos
HBase (principal): 013: 0> Scan 'del usuario, {StartRow => 'ROW2', Filafinal => 'Row3'}
R ^
el ROW el COLUMNA + el CELL
columna ROW2 = Info: Edad, marca de tiempo = 1502368069926, valor = 18 es
. 1 Fila (s) en 0,0120 segundos
, además, también puede agregar características avanzadas tales como TimeRange y fitler
StartRow, EndRow debe ser capitalizada, de lo contrario un error; los resultados de la consulta no incluyen el conjunto de resultados iguales EndRow
9. Estadísticas Número de registros: recuento
Sintaxis: COUNT <Tabla>, {la INTERVAL => intervalNum, el CACHE =>} cacheNum
los espectáculos fila INTERVALO un número determinado y la correspondiente predeterminado rowKey 1000; CACHE cada podido recuperar tamaño del área de memoria intermedia, por defecto es 10, los parámetros se puede ajustar acelerar la búsqueda
HBase (principal): 020: 0> count 'usuario'
de 3 filas (S) en 0,0360 segundos el.
10. el borrar: borrar
la columna Quitar
HBase (principal): 008: 0> Borrar 'del usuario', 'ROW1', 'información: Edad'
0 Fila (S) en 0,0290 segundos Las
filas de eliminación
hbase (principal): 014: 0 > deleteall 'Usuario', 'ROW2'
0 Fila (S) en 0,0090 segundos, el
borrar todos los datos en
HBase (principal): 016: 0> TRUNCATE 'del usuario'
T
Truncar 'el usuario' mesa (TI pueden tardar al mismo tiempo que a):
- mesa de Desactivación de ...
- truncar la tabla ...
Fila 0 (S) en 3.6610 segundos El
11. comprobar si existe tabla: existe
hbase (principal): 022: 0> existe 'Usuario'
T
tabla de usuarios qué existe
Fila 0 (S) en 0,0150 segundos El
12. La mesa Desactivar: desactivar
hbase (principal): 014: 0> desactivar 'Usuario'
0 fila (s) en 2.2660 segundos
Tabla 13. Activar: activar
hbase (principal): 017: 0> enable 'Usuario'
0 fila (s) en 1.3470 segundos
14. Eliminar la tabla: gota
Antes de borrar, primero debe desactivar
hbase (principal): 031: 0> disable 'TEST.USER'
0 fila (s) en 2.2640 segundos
hbase (principal): 033: 0> drop 'TEST.USER'
0 fila (s) en 1.2490 segundos
(C) .scala hbase funcionamiento de api
import org.apache.hadoop.hbase.{HTableDescriptor,HColumnDescriptor,HBaseConfiguration,TableName}
import org.apache.hadoop.hbase.client.{ConnectionFactory,Put,Get,Delete,Scan}
import org.apache.hadoop.hbase.util.Bytes
import scala.collection.JavaConversions._
import java.util
val conf=HBaseConfiguration.create()
//Connection 的创建是个重量级的工作,线程安全,是操作hbase的入口
val conn=ConnectionFactory.createConnection(conf)
//从Connection获得 Admin 对象(相当于以前的 HAdmin)
val admin=conn.getAdmin
//本例将操作的表名
val userTable=TableName.valueOf("user_score_table")
val cf1="scoreInfo"
val cf2="addressInfo"
val cn1="math"
val cn2="physics"
val cn3="Addr"
if(admin.tableExists(userTable)){
println("Table exists!")
//admin.disableTable(userTable)
//admin.deleteTable(userTable)
//exit()
}else{
val tableDesc=new HTableDescriptor(userTable)
tableDesc.addFamily(new HColumnDescriptor("scoreInfo".getBytes))
tableDesc.addFamily(new HColumnDescriptor("addressInfo".getBytes))
admin.createTable(tableDesc)
println("Create table success!")
}
//插入一条rowkey 为 IromMan 的数据
val p=new Put("IromMan".getBytes())
//为put操作指定 column 和 value (以前的 put.add 方法被弃用了)
p.addColumn(cf1.getBytes,cn1.getBytes,"98".getBytes) // scoreInfo:math 98
p.addColumn(cf1.getBytes,cn2.getBytes,"87".getBytes) // scoreInfo:physics 87
p.addColumn(cf2.getBytes,cn3.getBytes,"Beijing".getBytes) // addressInfo
table.put(p)
//按rowkey查询数据
val listGet=new util.ArrayList[Get]
val get=new Get(Bytes.toBytes("id002_Thor"))
val get2=new Get(Bytes.toBytes("id003_jack"))
listGet.add(get)
listGet.add(get2)
val resultArr=myTable.get(listGet).flatMap(z=>{
val cellArr=z.rawCells()
val valueArr=cellArr.map(n=>(Bytes.toString(z.getRow()),(Bytes.toString(CellUtil.cloneQualifier(n)),Bytes.toString(CellUtil.cloneValue(n)))))
valueArr
})
userTable.close()
conn.close()