hadoop - logo - wikipedia apache cassandra




Contrôle des splits Pig & Cassandra & DataStax (2)

J'utilise Pig avec mes données Cassandra pour faire toutes sortes d'exploits incroyables de groupes qui seraient presque impossibles à écrire impérativement. J'utilise l'intégration de Hadoop & Cassandra de DataStax, et je dois dire que c'est assez impressionnant. Chapeau à ces gars !!

J'ai un assez petit groupe de bac à sable (2 nœuds) où je mets ce système à travers quelques tests. J'ai une table CQL qui a ~ 53M lignes (environ 350 octets ea.), Et je remarque que le Mapper tarde beaucoup à parcourir ces 53M lignes. J'ai commencé à fouiller dans les bûches et je peux voir que la carte se répète à plusieurs reprises (j'ai vu 177 déversements provenant du cartographe), et je pense que cela fait partie du problème.

La combinaison de CassandraInputFormat et JobConfig ne crée qu'un seul mappeur, ce mappeur doit donc lire 100% des lignes de la table. J'appelle cela anti-parallèle :)

Maintenant, il y a beaucoup d'engrenages au travail dans cette image, y compris:

  • 2 nœuds physiques
  • Le nœud hadoop est dans un DC "Analytics" (configuration par défaut), mais physiquement dans le même rack.
  • Je peux voir le travail en utilisant LOCAL_QUORUM

Quelqu'un peut-il me diriger dans la direction de comment obtenir le cochon pour créer plus de divisions d' entrée afin que je puisse exécuter plus de mappeurs? J'ai 23 emplacements; Il semble dommage d'en utiliser un tout le temps.

Ou suis-je complètement fou et ne comprends pas le problème? J'accueille les deux types de réponses!


Vous pouvez définir cassandra.input.split.size à quelque chose de moins que 64k qui est la taille de partage par défaut, de sorte que vous pouvez obtenir plus de divisions. Combien de lignes par nœud pour la table Cql? Pouvez-vous poster votre schéma de table?

ajouter split_size aux paramètres de l'URL

Pour CassandraStorage utilisez les paramètres suivants cassandra: // [nom d'utilisateur: mot de passe @] / [? Slice_start = & slice_end = [& reverse = true] [& limit = 1] [& allow_deletes = true] [& widows = true] [& use_secondary = true] [& comparateur =] [& split_size =] [& partitioner =] [& init_address =] [& rpc_port =]]

Pour CqlStorage, utilisez les paramètres suivants cql: // [nom_utilisateur: mot de passe @] / [? [Taille_page =] [& columns =] [& output_query =] [& where_clause =] [& split_size =] [& partitioner =] [& use_secondary = true | false] [& init_address =] [& rpc_port =]]


Vous devez définir pig.noSplitCombination = true . Vous pouvez le faire dans l'un des trois endroits.

Lors de l'appel du script:

dse pig -Dpig.noSplitCombination=true /path/to/script.pig

Dans le script Pig lui-même:

SET pig.noSplitCombination true
table = LOAD 'cfs://ks/cf' USING CqlStorage();

Ou de façon permanente dans /etc/dse/pig/pig.properties . Décommenter:

pig.noSplitCombination=true

Sinon, Pig peut définir vos chemins d'entrée totaux (combinés) à traiter: 1.





datastax