Cours Framework JAVA

Manuel avancé sur l’utilisation du Framework JAVA apache Accumulo


Télécharger Manuel avancé sur l’utilisation du Framework JAVA apache Accumulo

★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Télécharger aussi :


Manuel avancé sur l’utilisation du Framework JAVA apache Accumulo

...

écrit en Java et fonctionne sur le système de fichiers distribués (HDFS) Hadoop, qui fait partie du projet populaire Apache Hadoop. Accumulo prend en charge le stockage et la récupération efficaces des données structurées, y compris les requêtes de plages, et prend en charge l'utilisation des tables Accumulo en entrée et en sortie pour les travaux MapReduce. Accumulo propose un équilibrage de charge et un partitionnement automatiques, la compression de données et des étiquettes de sécurité à grain fin.

Chapitre 2 Conception Accumulo

2.1 Modèle de données

Accumulo fournit un modèle de données plus riche que les simples magasins de clé-valeur, mais n'est pas une base de données entièrement relationnelle. Les données sont représentées sous forme de paires clé-valeur, où la clé et la valeur sont composées des éléments suivants:

Tous les éléments de la clé et de la valeur sont représentés sous forme de tableaux d'octets, à l'exception de Timestamp, qui est un long. Accumulo trie les clés par élément et lexicographiquement par ordre croissant. Les horodatages sont triés par ordre décroissant afin que les versions ultérieures de la même clé apparaissent en premier dans une analyse séquentielle. Les tables sont constituées d'un ensemble de paires clé-valeur triées.

2.2 Architecture

Accumulo est un système de stockage et de récupération de données distribué. Il se compose de plusieurs composants architecturaux, dont certains s'exécutent sur de nombreux serveurs individuels. Une grande partie du travail effectué par Accumulo implique la maintenance de certaines propriétés des données, telles que l'organisation, la disponibilité et l'intégrité, sur de nombreuses machines de grande classe.

2.3 Composants

Une instance d’Accumulo inclut de nombreux serveurs TabletServer, serveurs de journalisation à enregistrement anticipé, un processus de récupération de place, un serveur maître et de nombreux clients.

2.3.1 Tablet Server

Le TabletServer gère un sous-ensemble de toutes les tablettes (partitions de tables). Cela inclut la réception d'écritures de clients, la persistance d'écritures dans un journal d'écriture anticipée, le tri de nouvelles paires clé-valeur en mémoire, le vidage périodique des paires clé-valeur triées dans les nouveaux fichiers HDFS et la réponse aux lectures des clients, en formant une fusion triée. affichage de toutes les clés et valeurs de tous les fichiers créés et du magasin en mémoire trié. Les serveurs TabletServers effectuent également la récupération d'une tablette précédemment défaillante en réappliquant à la tablette les écritures trouvées dans le journal d'écriture anticipée.

2.3.2 Enregistreurs

Les enregistreurs acceptent les mises à jour des serveurs Tablet et les écrivent sur un stockage local sur disque. Chaque serveur de tablette écrit leurs mises à jour sur plusieurs enregistreurs afin de préserver les données en cas de défaillance matérielle.

2.3.3 Déchets



Les processus Collector Accumulo partageront les fichiers stockés dans HDFS. Périodiquement, le ramasse-miettes identifiera les fichiers qui ne sont plus nécessaires par un processus et les supprimera.

2.3.4 Maître

Accumulo Master est chargé de détecter et de répondre aux défaillances du TabletServer. Il essaie d'équilibrer la charge sur TabletServer en attribuant les tablettes avec soin et en demandant à TabletServers de migrer les tablettes si nécessaire. Le maître veille à ce que toutes les tablettes soient affectées à un TabletServer et gère les demandes de création, de modification et de suppression de table émanant des clients. Le maître coordonne également le démarrage, l’arrêt progressif et la récupération des modifications dans les journaux d’écriture différée en cas de défaillance des serveurs Tablet.

2.3.5 Client

Accumulo comprend une bibliothèque client liée à chaque application. La bibliothèque client contient une logique permettant de rechercher des serveurs gérant une tablette particulière et de communiquer avec les serveurs TabletServer pour écrire et récupérer des paires clé-valeur.

2.4 Gestion des données

 Accumulo stocke les données dans des tables, qui sont partitionnées en tablettes. Les tablettes sont partitionnées sur les limites des rangées de sorte que toutes les colonnes et les valeurs d'une rangée donnée se trouvent ensemble dans la même tablette. Le maître affecte des tablettes à un TabletServer à la fois. Cela permet aux transactions au niveau de la ligne d'avoir lieu sans utiliser le verrouillage distribué ou un autre mécanisme de synchronisation compliqué. Au fur et à mesure que les clients insèrent et interrogent des données et que des machines sont ajoutées et supprimées du cluster, le maître migre les tablettes pour s'assurer qu'elles restent disponibles et que la charge d'acquisition et de requête est équilibrée dans le cluster.

Apache Accumulo est un magasin structuré hautement évolutif basé sur BigTable de Google. Accumulo est

2.5 Service de tablette

Lorsqu'une écriture arrive sur un TabletServer, elle est écrite dans un journal Write-Ahead, puis insérée dans une structure de données triée en mémoire appelée MemTable. Lorsque la table MemTable atteint une certaine taille, le TabletServer écrit les paires clé-valeur triées dans un fichier HDFS appelé fichier ISAM (Indexed Sequential Access Method). Ce processus s'appelle un compactage mineur. Un nouveau MemTable est alors créé et le compactage est enregistré dans le journal Write-Ahead. Lorsqu'une demande de lecture de données parvient à un TabletServer, le TabletServer effectue une recherche binaire dans MemTable ainsi que dans les index en mémoire associés à chaque fichier ISAM pour trouver les valeurs pertinentes. Si les clients effectuent une analyse, plusieurs paires clé-valeur sont renvoyées au client dans l'ordre, à partir de la table MemTable et de l'ensemble des fichiers ISAM, en effectuant un tri par fusion lors de la lecture.

2.6 Compactions

Afin de gérer le nombre de fichiers par tablette, le TabletServer effectue régulièrement des compactions majeures dans une tablette, dans lesquelles certains ensembles de fichiers ISAM sont combinés en un seul fichier. Les fichiers précédents seront éventuellement supprimés par le ramasse-miettes. Cela permet également de supprimer définitivement les paires clé-valeur supprimées en omettant les paires clé-valeur supprimées par une entrée de suppression lors de la création du nouveau fichier.



2.7 Tolérance aux pannes

Si un TabletServer échoue, le maître le détecte et réaffecte automatiquement les tablettes attribuées du serveur défaillant à d'autres serveurs. Toutes les paires clé-valeur qui étaient en mémoire au moment où le TabletServer est automatiquement réappliqué à partir du journal Write-Ahead pour éviter toute perte de données. Le maître coordonnera la copie des journaux à écriture anticipée sur HDFS afin que les journaux soient disponibles pour tous les serveurs de tablettes. Pour que la récupération soit efficace, les mises à jour d'un journal sont regroupées par tablette. Le processus de tri peut être effectué par Hadoops MapReduce ou le serveur Logger. Les TabletServers peuvent appliquer rapidement les mutations des journaux triés destinés aux tablettes qui leur ont été attribuées.

Chapitre 3 Accumulo Shell

Accumulo fournit un shell simple qui peut être utilisé pour examiner le contenu et les paramètres de configuration des tables, insérer / mettre à jour / supprimer des valeurs et modifier les paramètres de configuration.

Le shell peut être démarré avec la commande suivante:

$ ACCUMULO_HOME / bin / accumulo shell -u [nom d'utilisateur]

Le shell demandera le mot de passe correspondant au nom d'utilisateur spécifié, puis affichera l'invite suivante:

Shell - Shell interactif Apache Accumulo

- version 1.3

- nom d'instance: myinstance

- ID d'instance: 00000000-0000-0000-0000-000000000000

- tapez 'help' pour une liste des commandes disponibles

3.1 Administration de base

Le shell Accumulo peut être utilisé pour créer et supprimer des tables, ainsi que pour configurer des options spécifiques aux tables et aux instances.

………

Chapitre 4 Écrire des clients Accumulo

4.1 Exécution du code client

Il existe plusieurs façons d’exécuter du code Java utilisant Accumulo. Vous trouverez ci-dessous une liste des différentes manières d’exécuter du code client.

  • en utilisant java exécutable
  • en utilisant le script accumulo
  • en utilisant le script d'outil

Afin d'exécuter le code client écrit pour s'exécuter sur Accumulo, vous devrez inclure les fichiers jars dont dépend Accumulo dans votre chemin d'accès aux classes. Le code client Accumulo dépend de Hadoop et de Zookeeper. Pour Hadoop, ajoutez le fichier jar Hadoop Core, tous les fichiers JAR du répertoire lib Hadoop et le répertoire conf dans le chemin de classe. Pour Zookeeper 3.3, vous devez uniquement ajouter le fichier jar Zookeeper, et non ce qui se trouve dans le répertoire lib de Zookeeper. Vous pouvez exécuter la commande suivante sur un système Accumulo configuré pour voir ce qu’il utilise pour son chemin de classe.

$ ACCUMULO_HOME / bin / accumulo classpath

Une autre option pour exécuter votre code consiste à mettre un fichier jar dans $ ACCUMULO_HOME / lib / ext. Après cela, vous pouvez utiliser le script accumulo pour exécuter votre code. Par exemple, si vous créez un fichier JAR contenant la classe com.foo.Client et que vous le placez dans lib / ext, vous pouvez utiliser la commande $ ACCUMULO_HOME / bin / accumulo com.foo.Client pour exécuter votre code. Si vous écrivez un travail de réduction de carte qui accède à Accumulo, vous pouvez utiliser le script bin / tool.sh pour exécuter ces travaux. Voir la carte réduire exemple.



4.2 Connexion

Tous les clients doivent d’abord identifier l’instance Accumulo à laquelle ils vont communiquer. Le code pour faire ceci est comme suit:

String instanceName = "myinstance";

String zooServers = "zooserver-one, zooserver-two"

Instance inst = new ZooKeeperInstance (instanceName, zooServers);

Connector conn = inst.getConnector ("utilisateur", "passwd");

4.3 Écrire des données

Les données sont écrites dans Accumulo en créant des objets Mutation qui représentent toutes les modifications apportées aux colonnes d'une seule ligne. Les modifications sont effectuées de manière atomique dans le TabletServer. Les clients ajoutent ensuite des mutations à un BatchWriter qui les soumet aux TabletServers appropriés.

Les mutations peuvent être créées ainsi:

Text rowID = new Text ("row1");

Text colFam = new Text ("myColFam");

Text colQual = new Text ("myColQual");

ColumnVisibility colVis = new ColumnVisibility ("public");

horodatage long = System.currentTimeMillis ();

Valeur valeur = nouvelle Valeur ("myValue" .getBytes ());

Mutation mutation = nouvelle mutation (rowID);

mutation.put (colFam, colQual, colVis, horodatage, valeur);

4.3.1 BatchWriter

BatchWriter est hautement optimisé pour envoyer des mutations à plusieurs serveurs TabletServers et met automatiquement en lots les mutations destinées au même TabletServer afin d’amortir la surcharge du réseau.

Il faut veiller à ne pas modifier le contenu de tout objet transmis à BatchWriter, car il garde les objets en mémoire pendant le traitement par lots.

Les mutations sont ajoutées à un BatchWriter ainsi:

long memBuf = 1000000L; // octets à stocker avant l'envoi d'un lot

long délai d'attente = 1000L; // millisecondes à attendre avant d'envoyer

int numThreads = 10;



12