Échantillon HBase POC

Cet article traite d'un exemple de preuve de concept pour HBase. Vous pouvez trouver une explication claire du concept pour mieux comprendre HBase.



Dans ce blog, nous discuterons d'un exemple de preuve de concept pour HBase.



Ici, nous avons un ensemble de données comme dans l'image ci-dessous.

Sample_Hbase_Use_case



Cet ensemble de données comprend les détails sur la durée totale des appels entrants, des appels sortants et des messages envoyés à partir d'un numéro de mobile particulier à une date spécifique.

Le premier champ représente la date, le deuxième champ représente le numéro de mobile, le troisième champ représente la durée totale des appels entrants, le quatrième champ représente la durée totale des appels sortants et le cinquième champ représente le nombre total de messages envoyés.

Maintenant, notre tâche est de récupérer les informations sur la durée des appels et messages entrants et sortants, à partir d'un numéro de téléphone à une date donnée.



Dans ce cas d'utilisation, j'essaye de filtrer les enregistrements de 15eMars 2014. Voici un programme HBase pour y parvenir.

Voici le code complet de celui-ci.

Publique classe échantillon{

privé statique Configuration conf

statique HTable table

Publique exemple (String tableName, String colFams) jette IOException {

conf = HBaseConfiguration. créer ()

createTable (nomTable, colFams)

table = Nouveau HTable ( conf , nom de la table)

}

néant createTable (String tableName, String colFams) jette IOException {

HBaseAdmin hbase = Nouveau HBaseAdmin ( conf )

HTableDescriptor desc = Nouveau HTableDescriptor (tableName)

HColumnDescriptor meta = Nouveau HColumnDescriptor (colFams.getBytes ())

desc.addFamily (méta)

hbase.createTable (desc)

}

administrateur certifié cloudera pour apache hadoop

Publique statique néant addColumnEntry (String tableName, String ligne,

String colFamilyName, String colName, valeurs de chaîne)

jette IOException {

octet [] rowKey = Octets. toBytes (rangée)

Mettez putdata = Nouveau Mettre (rowKey)

putdata.add (Octets. toBytes (colFamilyName), octets. toBytes (colName),

Octets. toBytes (valeurs))

table .put (putdata)

}

Publique statique néant getAllRecord (String tableName, String startPartialKey,

String endPartialKey) jette IOException {

essayer {

Scan s

si (startPartialKey == nul || endPartialKey == nul )

s = Nouveau Analyse()

autre

s = Nouveau Balayage (octets. toBytes (startPartialKey),

Octets. toBytes (endPartialKey))

ResultScanner ss = table .getScanner (s)

HashMapoutputRec = Nouveau HashMap()

Chaîne imsi = ''

pour (Résultat r: ss) {

HashMap keyVal = Nouveau HashMap ()

pour (KeyValue kv: r.raw ()) {

imsi = Nouveau Chaîne (kv.getRow ()). Substring (10)

keyVal.put ( Nouveau Chaîne (kv.getQualifier ()),

Nouveau Chaîne (kv.getValue ()))

outputRec.put (imsi, keyVal)

si (keyVal.size () == 3)

Système. en dehors .println (prendre + '' + 'Minutes entrantes:'

+ keyVal.get ('c1') + 'Minutes à venir:'

+ keyVal.get ('c2') + 'Messages:'

+ keyVal.get ('c3'))

}

}

} enfin {

}

}

Publique statique néant main (String [] args) jette IOException {

String tableName = 'daterecords'

Chaîne colFamilyNames = 'i'

test d'échantillon = Nouveau exemple (tableName, colFamilyNames)

String fileName = '/ home / cloudera / Desktop / data'

// Cela référencera une ligne à la fois

Ligne de chaîne = nul

essayer {

// FileReader lit les fichiers texte dans l'encodage par défaut.

FileReader fileReader = Nouveau FileReader (fileName)

// Enveloppez toujours FileReader dans BufferedReader.

BufferedReader bufferedReader = Nouveau BufferedReader (fileReader)

tandis que ((ligne = bufferedReader.readLine ())! = nul ) {

Chaîne [] valeurs = line.split ('')

addColumnEntry (tableName, valeurs [0] + '-' + valeurs [1],

colFamilyNames, 'c1', valeurs [2])

addColumnEntry (tableName, valeurs [0] + '-' + valeurs [1],

colFamilyNames, 'c2', valeurs [3])

addColumnEntry (tableName, valeurs [0] + '-' + valeurs [1],

colFamilyNames, 'c3', valeurs [4])

}

bufferedReader.close ()

} capture (FileNotFoundException ex) {

Système. en dehors .println ('Impossible d'ouvrir le fichier' '+ nom du fichier +' '')

} capture (IOException ex) {

Système. en dehors .println ('Erreur lors de la lecture du fichier' '+ nom du fichier +' '')

// Ou nous pourrions simplement faire ceci:

// ex.printStackTrace ()

}

getAllRecord (tableName, '20140315', '20140316')

}

}

Ici, nous avons créé un objet de configuration, classe HTable et la création de la table Hbase avec le nom: daterecords et la famille de colonnes: je .

Dans ce cas d'utilisation, nous prendrons la combinaison de la date et du numéro de mobile séparés par «-» comme clé de ligne pour cette table Hbase et les durées des appels entrants et sortants », le nombre de messages envoyés comme colonnes« c1 », c2 ',' c3 'pour la famille de colonnes' i '.

Nous avons les données d'entrée stockées dans le système de fichiers local de Cloudera. Nous devons donc écrire Java Logic qui lit les données du fichier.

Voici la logique Java.

Dans cette méthode, nous stockons les données dans la table pour chaque colonne de la famille de colonnes.

Nous pouvons vérifier les données stockées dans la table Hbase «daterecords» en utilisant la commande scan.

Vous recevrez les données comme dans l'image ci-dessous.

Nous avons maintenant inséré les données dans la table HBase avec succès.

Récupérons les enregistrements stockés dans le tableau d'une date particulière.

Dans ce cas d'utilisation, nous essayons de récupérer les enregistrements de la Date: 15emars 2014

Pour récupérer les enregistrements, nous avons créé une méthode

getAllRecord (String tableName, String startPartialKey, String endPartialKey)

Le premier paramètre représente le nom de la table, le second représente la date de début à partir de laquelle nous devons récupérer les données et le troisième est la prochaine date de début.

Par exemple:

getAllRecord (tableName, '20140315', '20140316')

Maintenant, comprenons le logique de cette méthode.

Nous essayons d'analyser la table Hbase à l'aide de l'API HBase à l'aide de startPartialKey et endPartialKey.

Comme StartPartialKey et endPartialkey ne sont pas nuls, il ira au bloc else et analysera les enregistrements ayant la valeur startPartialKey.

Nous avons créé un objet du scanner de résultats qui stocke les enregistrements scannés de la table Hbase et un HashMap pour stocker la sortie qui en résultera.

Nous créons un objet de résultat pour obtenir le magasin de données dans le scanner de résultats et exécutons une boucle for.

tutoriels android studio pour les débutants

imsi est la chaîne définie pour stocker le numéro de mobile et keyVal est une carte de hachage qui stocke la sortie extraite de la colonne d'un téléphone particulier.

Nous avons donné 20140315-1234567890 comme le touche de ligne à la table Hbase. Dans ce 20140315 représente la date et 1234567890 représente le numéro de mobile.

Comme nous n'avons besoin que du numéro de mobile, nous utilisons la méthode des sous-chaînes pour le récupérer.

Nous récupérons les données de r.raw () et les stockons dans HashMap en utilisant Put.

Enfin, nous essayons de les imprimer sur la console.

La sortie sera comme dans l'image ci-dessous.

Nous avons récupéré avec succès les enregistrements de la Date: 15eMars 2014.