2009-07-13 15 views
3

Dans le "exemple d'utilisation de l'API" sur "Getting Started" page dans la documentation HBase il est un exemple d'utilisation du scanner:HBase distribué scanner

scanner Scanner = table.getScanner (nouveau String [] { » myColumnFamily: columnQualifier1 "});

RowResult rowResult = scanner.next(); 
while (rowResult != null) { 
    //... 
    rowResult = scanner.next(); 

}

Si je comprends bien, ce code sera exécuté sur une machine (nœud de nom) et tous les travaux de balayage et le filtrage ne sera pas distribué. Seul le stockage des données et le chargement des données seront distribués. Comment puis-je utiliser un scanner distribué, qui fonctionnera séparément sur chaque nœud.

Quelle est la meilleure pratique de filtrage de données rapide? Merci.

Répondre

1

C'est vieux, de toute façon: le scanner est juste une API semblable à un curseur pour la récupération des résultats calculés. Pour le calcul, vous utilisez les travaux MapReduce (hbase.mapred).

1

Le fonctionnement du scanner est en commençant par la première région, en balayant les lignes et en sautillant d'une région à l'autre. Une astuce que vous pouvez faire est de créer plusieurs scanners, chacun commence et se termine sur les clés de début et de fin d'une région, puis crée plusieurs threads qui lisent tous en parallèle et écrivent dans une file d'attente de sortie. Votre processus doit maintenant être assez rapide pour lire, traiter et supprimer des éléments de cette file d'attente, sinon vous risquez de perdre du temps avec le client au cas où vous auriez trop de lignes arrivant trop vite. Vous devrez également utiliser des structures simultanées pour éviter les retards de synchronisation.

Vous pouvez récupérer les informations de la région en utilisant getRegionLocations sur un htable: http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/HTable.html#getRegionLocations()

Gardez à l'esprit que les scanners peuvent délai d'attente si vous le faites, le blocage afin de ne pas les lire assez vite vos fils de consommation jusqu'à ce que la file d'attente est vide pourrait ne pas être une option quelques fois.

Questions connexes