HBaseCaractéristiques:

  • Stockage massif: Le niveau inférieur est basé surHDFSStockage de grandes quantités de données
  • Stockage en colonne:HBaseLes données du tableau sont stockées en fonction de la famille de colonnes,Une famille de colonnes contient plusieurs colonnes
  • Très extensible:Dépendance sous - jacenteHDFS,Quand il n'y a pas assez d'espace disque,Il suffit d'augmenter dynamiquementDataNodeLe noeud de service peut
  • Forte concurrence:Prise en charge des demandes de lecture et d'écriture très simultanées
  • Clairsemé:La rareté vise principalementHBaseFlexibilité des colonnes,Dans la famille des colonnes,Vous pouvez spécifier autant de colonnes que vous voulez,Lorsque les données de la colonne sont vides Conditions,Il n'y aura pas d'espace de stockage.
  • Plusieurs versions des données:HBaseLes données du tableau peuvent avoir plusieurs valeurs de version,Par défaut, le numéro de version est utilisé pour distinguer,Le numéro de version est juste Est l'horodatage des données insérées
  • Type de données unique:Toutes les données sontHBaseEst stocké dans un tableau d'octets

HBaseScénarios d'application pour:

  HBaseAdapté au stockage de grandes quantités de données détaillées,Et une bonne performance de requête est nécessaire plus tard(Plus d'un million de montres、Des centaines de millions, Et les exigences de concurrence sont élevées)

HBaseModèle de données:

HBaseStructure générale:

Zookeeper

  • C'est fait.HMasterHaute disponibilité
  • SauvegardéHBaseInformations sur les métadonnées pour,C'est tout.HBaseEntrée d'adressage du tableau
  • C'est exact.HMasterEtHRegionServerSurveillance réalisée

HMaster(Master)

  • PourHRegionServerRépartitionRegion Maintenir l'équilibrage de la charge dans l'ensemble du cluster
  • Tenir à jour les métadonnées du cluster
  • Trouvé invalideRegion,Et sera invalidéRegionAffecté à la normaleHRegionServerAllez.

HRegionServer(RegionServer)

  • Responsable de la gestionRegion Accepter les demandes de données en lecture et en écriture des clients
  • La coupe devient plus grande en cours d'exécutionRegion

Region

  • ChaqueHRegionPar plusieursStoreComposition, ChaqueStoreEnregistrer une famille de colonnes(Columns Family),Le tableau contient plusieurs familles de colonnes,Et quelquesStore,
  • ChaqueStorePar unMemStoreEt plusieursStoreFileComposition,MemStore- Oui.StoreContenu en mémoire,Écrivez dans le fichier Après ça.StoreFile.
  • StoreFileLe rez - de - chaussée estHFileEnregistrer dans le format de

HBase shell Fonctionnement de base:

Entrée:hbase shell

hbase(main):001:0> create 'lagou', 'base_info', 'extra_info'
Ou(HbaseLe tableau doit spécifier les informations de la famille de colonnes)
create 'lagou', {NAME => 'base_info', VERSIONS => '3'},{NAME =>
'extra_info',VERSIONS => '3'}
VERSIONS Indique que les données de cette cellule peuvent être conservées dans la plus proche 3 Versions

Ajouter une opération de données:

VerslagouInsérer des informations dans le tableau,row keyPour rk1,Famille de colonnesbase_infoAjouternameGlyphe de colonne,La valeur est:wang
put 'lagou', 'rk1', 'base_info:name', 'wang' VerslagouInsérer des informations dans le tableau,row keyPourrk1,Famille de colonnesbase_infoAjouterageGlyphe de colonne,La valeur est:30
put 'lagou', 'rk1', 'base_info:age', 30

VerslagouInsérer des informations dans le tableau,row keyPourrk1,Famille de colonnesextra_infoAjouteraddressGlyphe de colonne,La valeur est:shanghai
put 'lagou', 'rk1', 'extra_info:address', 'shanghai'

Requête,Mise à jour,Supprimer:

Obtenir dans le tableaurow keyPourrk1Toutes les informations sur
get 'lagou', 'rk1'
AccèslagouDans le tableaurow keyPourrk1,base_infoToutes les informations sur la famille de colonnes
get 'lagou', 'rk1', 'base_info'
Obtenir dans le tableaurow keyPourrk1,base_infoDe la famille des colonnesname、ageInformations sur les glyphes de colonne
get 'lagou', 'rk1', 'base_info:name', 'base_info:age' AccèslagouDans le tableaurow keyPourrk1,base_info、extra_infoInformations sur les familles de colonnes
hbase(main):010:0> get 'lagou', 'rk1', 'base_info', 'extra_info'
Ou
hbase(main):011:0> get 'lagou', 'rk1', {COLUMN => ['base_info', 'extra_info']}
Ou
hbase(main):012:0> get 'lagou', 'rk1', {COLUMN => ['base_info:name',
'extra_info:address']} Obtenir dans le tableaurow keyPourrk1,cellLa valeur dewangInformations sur
get 'lagou', 'rk1', {FILTER => "ValueFilter(=,
'binary:wang')"} Obtenir dans le tableaurow keyPourrk1,Les glyphes de colonne contiennentaInformations sur
get 'lagou', 'rk1', {FILTER => "
(QualifierFilter(=,'substring:a'))"} RequêtelagouToutes les informations du tableau:
scan 'lagou' La famille de colonnes du tableau de requête est base_info Informations sur:
hbase(main):001:0> scan 'lagou', {COLUMNS => 'base_info'}
hbase(main):002:0> scan 'lagou', {COLUMNS => 'base_info', RAW => true, VERSIONS
=> 3}
## ScanVous pouvez définir si onRawMode,OuvertRawLe mode renvoie les données qui incluent les étiquettes de suppression qui ont été ajoutées mais qui n'ont pas été réellement supprimées
## VERSIONSSpécifiez le nombre maximum de versions pour la requête Spécifiez plusieurs familles de colonnes et Brouillez la requête par valeur de données:
RequêtelagouLes familles de colonnes du tableau sont base_info Et extra_infoEt l'identificateur de colonne contientaInformations sur les caractères hbase(main):001:0> scan 'lagou', {COLUMNS => ['base_info', 'extra_info'], FILTER
=> "(QualifierFilter(=,'substring:a'))"} rowkeyRequête de valeur de plage pour(Très important.)
RequêtelagouLes familles de colonnes du tableau sontbase_info,rkLe champ d'application est[rk1, rk3)Données(rowkeyLe stockage sous - jacent est un ordre de Dictionnaire)
Appuyez.rowkeyStockage séquentiel.
scan 'lagou', {COLUMNS => 'base_info', STARTROW => 'rk1',
ENDROW => 'rk3'} RequêtelagouDans le tableaurow keyParrkDébut du caractère
hbase(main):001:0> scan 'lagou',{FILTER=>"PrefixFilter('rk')"} Mettre à jour les valeurs des données:
Prends ça.lagouDans le tableaurowkeyPourrk1Debase_infoColonnes sous familles de colonnesnameModifier comme suit:liang
put 'lagou', 'rk1', 'base_info:name', 'liang' Supprimer les données et les tableaux:
SupprimerlagouTableaurow keyPourrk1,Les glyphes de colonne sont base_info:name Données
> delete 'lagou', 'rk1', 'base_info:name' Désignationrowkey,Supprimer les noms de colonnes et les informations d'horodatage
SupprimerlagouTableaurow keyPourrk1,Les glyphes de colonne sontbase_info:nameDonnées
delete 'lagou', 'rk1', 'base_info:name',1600660619655 Supprimer base_info Famille de colonnes
alter 'lagou', 'delete' => 'base_info' SupprimerlagouDonnées du tableau
truncate 'lagou' SupprimerlagouTableau
#D'abord.disable Encore.drop
hbase(main):036:0> disable 'lagou'
hbase(main):037:0> drop 'lagou'
#Si ce n'est pas faitdisable,DirectdropDes erreurs seront signalées
ERROR: Table user is enabled. Disable it first.

HBase JAVA  API:

<dependencies>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
<scope>test</scope>
</dependency>
</dependencies>

Créer une connexion:

package com.lagou.hbase.client;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import java.io.IOException; public class HbaseClientDemo {
Configuration conf = null;
Connection conn = null; @Before
public void init() throws IOException {
//Obtenir un objet de profil
conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "linux121,linux122");
conf.set("hbase.zookeeper.property.clientPort", "2181");
//AdoptionconfObtenirhbaseConnexion au cluster
conn = ConnectionFactory.createConnection(conf);
} //Relâchez la connexion
@After
public void realse() {
if (conn != null) {
try {
conn.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

Créer une table:

 //Créer une pagehbaseTableau
@Test
public void createTable() throws IOException {
//AccèsHbaseAdminObjet utilisé pour créer une table
HBaseAdmin admin = (HBaseAdmin) conn.getAdmin();
//CréationHtabledescDescripteur,Descripteur de table
final HTableDescriptor worker = new HTableDescriptor(TableName.valueOf("worker"));
//Spécifier la famille de colonnes
worker.addFamily(new HColumnDescriptor("info"));
admin.createTable(worker);
System.out.println("workerTableau créé avec succès!!");
}

Insérer des données:

  //Insérer une donnée
@Test
public void putData() throws IOException {
//Besoin d'obtenir untableObjet
final Table worker = conn.getTable(TableName.valueOf("worker")); //Préparez - vous.putObjet
final Put put = new Put(Bytes.toBytes("110"));//Désignationrowkey put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("addr"), Bytes.toBytes("beijing"));
//Insérer des données,Le type de paramètre estput
worker.put(put);
//Préparez - vous.list<puts>,L'insertion par lots peut être effectuée
//FermertableObjet
worker.close();
System.out.println("Insérer les données dansworkerTableau réussi!!");
}

Recherche de données:

//Recherche de données
@Test
public void getData() throws IOException {
//Préparez - vous.tableObjet
final Table worker = conn.getTable(TableName.valueOf("worker"));
//Préparez - vous.getObjet
final Get get = new Get(Bytes.toBytes("110"));
//Spécifiez une famille de colonnes ou une colonne à interroger
get.addFamily(Bytes.toBytes("info"));
//Exécuter la requête
final Result result = worker.get(get);
//ObtenirresultTouscellObjet
final Cell[] cells = result.rawCells();
//Impression transversale
for (Cell cell : cells) {
final String rowkey = Bytes.toString(CellUtil.cloneRow(cell));
final String f = Bytes.toString(CellUtil.cloneFamily(cell));
final String column = Bytes.toString(CellUtil.cloneQualifier(cell));
final String value = Bytes.toString(CellUtil.cloneValue(cell)); System.out.println("rowkey-->" + rowkey + "--;cf-->" + f + "---;column--->" + column + "--;value-->" + value);
}
worker.close();
}

Supprimer les données:

   //Supprimer une donnée
@Test
public void deleteData() throws IOException {
//Besoin d'obtenir untableObjet
final Table worker = conn.getTable(TableName.valueOf("worker")); //Préparez - vous.deleteObjet
final Delete delete = new Delete(Bytes.toBytes("110"));
//Effectuer la suppression
worker.delete(delete);
//FermertableObjet
worker.close();
System.out.println("Suppression réussie des données!!");
}

AdoptionScanBalayage complet de la table:

/**
* Balayage complet de la table
*/
@Test
public void scanAllData() throws IOException {
HTable teacher = (HTable) conn.getTable(TableName.valueOf("teacher"));
Scan scan = new Scan();
ResultScanner resultScanner = teacher.getScanner(scan);
for (Result result : resultScanner) {
Cell[] cells = result.rawCells();//Obtenez tous lescellObjet
for (Cell cell : cells) {
//AdoptioncellAccèsrowkey,cf,column,value
String cf = Bytes.toString(CellUtil.cloneFamily(cell));
String column = Bytes.toString(CellUtil.cloneQualifier(cell));
String value = Bytes.toString(CellUtil.cloneValue(cell));
String rowkey = Bytes.toString(CellUtil.cloneRow(cell));
System.out.println(rowkey + "----" + cf + "--" + column + "---"
+ value);
}
}
teacher.close(); }

AdoptionstartRowKeyEtendRowKeyEffectuer un balayage:

//Désignationscan C'est parti.rowkeyEt la finrowkey,Cette méthode de requête est recommandée pour,Préciser le début et la finrowkeyIntervalle pour éviter un balayage complet de la table
@Test
public void scanStartEndData() throws IOException {
//Préparez - vous.tableObjet
final Table worker = conn.getTable(TableName.valueOf("worker"));
//Préparez - vous.scanObjet
final Scan scan = new Scan();
//Spécifie la requêterowkeySection,rowkeyInhbaseDans l'ordre du Dictionnaire
scan.setStartRow(Bytes.toBytes("001"));
scan.setStopRow(Bytes.toBytes("004"));
//Effectuer un scan
final ResultScanner resultScanner = worker.getScanner(scan);
for (Result result : resultScanner) {
//ObtenirresultTouscellObjet
final Cell[] cells = result.rawCells();
//Impression transversale
for (Cell cell : cells) {
final String rowkey = Bytes.toString(CellUtil.cloneRow(cell));
final String f = Bytes.toString(CellUtil.cloneFamily(cell));
final String column = Bytes.toString(CellUtil.cloneQualifier(cell));
final String value = Bytes.toString(CellUtil.cloneValue(cell));
System.out.println("rowkey-->" + rowkey + "--;cf-->" + f + ";column--->" + column + "--;value-->" + value);
}
} worker.close();
}

Base de données non relationnelle à grande échelle HBase Architecture,shellAvecAPIAutre article Afghanistan

  1. Stockage en colonnehbase Apprentissage de l'architecture du système

    Un..HbaseIntroduction HBase Est une base de données distribuée open source non relationnelle (NoSQL), Il fait référence à Google BigTableModélisation, Le langage de programmation mis en œuvre est Java.C'est...ApacheSoftware FoundationHadoopUne partie du projet,Exécution ...

  2. HBase Est - ce une base de données de stockage en colonne

    En introduction HBase Est - ce qu'avant la base de données de stockage de colonne , Commençons par comprendre ce qu'est une base de données de ligne et de colonne . Bases de données en ligne et en colonne Dans Wikipedia , Les bases de données de ligne et de colonne sont définies comme suit: : Une base de données columnaire est effectuée dans un schéma de stockage dépendant de la colonne ...

  3. 【HBase】 Différent de la base de données relationnelle 、 Ligne /Stockage en colonne

    [HBase] Différent de la base de données relationnelle 1.Différences essentielles mysql:Base de données relationnelle, Stockage en ligne ,ACID,SQL, Seules les données structurées peuvent être stockées Atomicité de la transaction(Atomicity): Une transaction ou l'exécution complète ,Ou pas.,C'est tout. ...

  4. HbaseAvecOracleComparaison( Base de données de colonne et base de données de ligne )

    HbaseAvecOracleComparaison( Base de données de colonne et base de données de ligne ) 1 Principales différences Hbase Convient à la fois à l'insertion massive et à la lecture Hbase Le goulot d'étranglement est la vitesse de transmission du disque dur ,Oracle Le goulot d'étranglement est le temps de recherche du disque dur .   Hbase Essentiellement ...

  5. HBase: Colonnes distribuées NoSQLBase de données

    TraditionnelACIDBase de données, L'extensibilité est confrontée à de grands défis .EtHBaseCe genre de système, Tout en étant extensible , La classe est également proposée SQLInterface pour. HBaseComposition de l'architecture HBaseAdoptionMaster/Slave Regroupement des architectures , Il est affilié à H ...

  6. Hadoop HBaseSérie d'apprentissage conceptuelHBase Base de données des colonnes (XVII.)

    Base de données columnaire, Différent de la base de données en ligne en termes de stockage de données , Toutes les données sont accessibles par colonne . La base de données en ligne effectue une analyse de colonne , Toutes les colonnes doivent être lues Et la base de données columnaire parce qu'elle est accessible par colonne , Il suffit donc de le faire dans une colonne spécifique I/O Pour compléter la requête et l'analyse , ...

  7. Hbase Architecture et principes

    Hbase Architecture et principes HBaseC'est une distribution.Base de données open source orientée colonne,La technologie provient de Fay ChangEcrit parGoogleDocuments"Bigtable:Un système de stockage réparti de données structurées".Juste ...

  8. Hbase Architecture et principes (Tourne.)

    Hbase Architecture et principes HBaseC'est une distribution.Base de données open source orientée colonne,La technologie provient de Fay ChangEcrit parGoogleDocuments“Bigtable:Un système de stockage réparti de données structurées”.C'est comme...BigtableLeigh. ...

  9. NoSQL Discussion sur la base de données - Pourquoi utiliser une base de données non relationnelle ?

    Avec Internetweb2.0 La montée des sites Web , Les bases de données non relationnelles sont maintenant un nouveau domaine très populaire , Les produits de bases de données non relationnelles se développent très rapidement . Et les bases de données relationnelles traditionnelles web2.0Site Web, En particulier à très grande échelle et à forte concurrence SNSTypeweb2 ...

  10. hadoopSystème de stockage en ligne de l'écosystème--kudu

    Introduction Kudu C'est pour Apache Hadoop Le gestionnaire de stockage en colonne développé par la plateforme.Kudu Partage Hadoop Caractéristiques techniques communes des applications écosystémiques: Il est là. commodity hardware(Matériel de base)Allez. ...

Recommandation aléatoire

  1. InhtmlAjouterscriptMéthodes et précautions pour les scripts

    InhtmlAjouterscriptIl y a deux façons de script,Va directementjavascriptCode ajouté àhtmlAjouter des externalitésjsDocumentation,Les deux méthodes sont plus couramment utilisées,Tout le monde est libre de choisir en fonction de ses besoins InhtmlAjouter<script& ...

  2. mysql replace Remplacer la fonction

    UPDATE ecm_goods SET description = replace(description,'Chaîne originale', 'Remplacer par:') WHERE Conditions;

  3. NSURLConnectionTélécharger

    @interface AppDelegate () <NSURLConnectionDataDelegate> {    NSMutableData *mData;} @end @impl ...

  4. keybd_event Tableau de correspondance

    Option Explicit Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bSc ...

  5. NVIDA Mentionné Bibliothèque de cadres de profondeur

    BidMachBlocksCaffeChainerCNTKcuda-convnetcuda-convnet2Deeplearning4jkaldiKerasLasagneMarvinMatConvNe ...

  6. Compris.Azure ML、Windows MLEtML.NET

    Mise à jour2018 La Conférence de Microsoft sur l'intelligence artificielle en Chine vient de se terminer ,Pour.NETDéveloppeurs, Probablement déjà ébloui par la maison de Microsoft AI Le système s'est évanoui. . J'ai fait quelques dessins. ,Pour faire la différence. Azure ML Fournit beaucoup de connaissances APIServices, Plus une machine d'apprentissage ...

  7. Nginx:413 Request Entity Too Large

    Phénomènes:In Post Rencontré dans le fichier 413 Erreur :Request Entity Too Large: Raisons:Nginx Limite la taille des fichiers téléchargés ,ÀNginxModification moyenne/ Augmenter la taille maximale admissible du fichier : Fonctionnement:Édition ...

  8. TFSDéveloppement secondaire02——ConnexionTFS

    Dans l'article précédent<TFSDéveloppement secondaire01——TeamProjectsPicher>Introduction  TeamProjectsPicher Objet, L'utilisation de cet objet permet une connexion facile TFS. Mais si nous voulons implémenter la personnalisation ...

  9. OracleServer Résumé de l'analyse du système avancé ( Achèvement avancé )

    Original personnel, Veuillez indiquer la source de la réimpression en haut de l'article. :https://www.cnblogs.com/sunshine5683/p/10080102.html Dans l'étape précédente, j'ai expliqué quelques connaissances sur l'étape ,Aujourd'hui ...

  10. DW2.0

    Un..DW2.0 Du point de vue de l'entreprise , Raisons d'attirer les entreprises : 1. Les coûts de l'infrastructure des entrepôts de données ne continuent plus d'augmenter . Dans l'entrepôt de données de première génération , Le coût de l'infrastructure technologique augmente ,Au fur et à mesure que le volume des données augmente, Le coût de l'infrastructure augmentera de façon exponentielle .Mais utiliserDW2 ...