web-dev-qa-db-fra.com

quelles sont les commandes suivantes dans sqoop?

Quelqu'un peut-il me dire quelle est l'utilisation de --split-by et de la requête limite dans sqoop?

sqoop import --connect jdbc: mysql: // localhost/my --username utilisateur --password 1234 --query 'select * from table où id = 5 AND $ CONDITIONS' --split-by table.id --target- dir/dir

10
DrewRose

--split-by: Il est utilisé pour spécifier la colonne de la table utilisée pour générer des fractionnements pour les importations. Cela signifie qu'il spécifie quelle colonne sera utilisée pour créer le fractionnement lors de l'importation des données dans votre cluster. Il peut être utilisé pour améliorer les performances d'importation en réalisant un plus grand parallélisme. Sqoop crée des fractionnements basés sur les valeurs d'une colonne particulière de la table spécifiée par --split-by par l'utilisateur via la commande d'importation. S'il n'est pas disponible, la clé primaire de la table en entrée est utilisée pour créer les divisions.

Raison d'utiliser: Parfois, la clé primaire n'a pas une distribution égale des valeurs entre les valeurs min et max (utilisée pour créer les divisions si --split-by n'est pas disponible). Dans une telle situation, vous pouvez spécifier une autre colonne disposant d'une distribution appropriée des données afin de créer des fractionnements pour des importations efficaces.

--boundary-query: Par défaut, sqoop utilisera la requête select min (), max () de pour rechercher les limites de la création de scissions. Dans certains cas, cette requête n'est pas optimale. Vous pouvez donc spécifier toute requête arbitraire renvoyant deux colonnes numériques à l'aide de l'argument --boundary-query.

Raison d'utiliser: Si --split-by ne vous donne pas les performances optimales, vous pouvez l'utiliser pour améliorer davantage les performances.

33
Tariq

--split-by est utilisé pour répartir uniformément les valeurs de la table sur les mappeurs, c'est-à-dire que vous avez 100 enregistrements uniques (clé primaire) et s'il y a 4 mappeurs, --split-by (colonne de clé primaire) aider à distribuer votre ensemble de données de manière égale entre les mappeurs.

$ CONDITIONS est utilisé par le processus Sqoop, il sera remplacé par une expression de condition unique en interne pour obtenir l'ensemble de données . Si vous exécutez une importation parallèle, les tâches de mappage exécuteront votre requête avec des valeurs différentes substituées dans pour $ CONDITIONS. Par exemple, un mappeur peut exécuter "select bla from foo WHERE (id> = 0 AND id <10000)" et le mappeur suivant peut exécuter "select bla from foo WHERE (id> = 10000 AND id <20000)", etc. .

19
Mukesh S

Sqoop vous permet d'importer des données en parallèle et --split-by et --boundary-query vous permet plus de contrôle. Si vous importez simplement une table, la clé PRIMARY sera utilisée. Toutefois, si vous effectuez une requête plus avancée, vous devrez spécifier la colonne pour effectuer la division parallèle.

c'est à dire.,

  sqoop import \
    --connect 'jdbc:mysql://.../...' \
    --direct \
    --username uname --password pword \
    --Hive-import \
    --Hive-table query_import \
    --boundary-query 'SELECT 0, MAX(id) FROM a' \
    --query 'SELECT a.id, a.name, b.id, b.name FROM a, b WHERE a.id = b.id AND $CONDITIONS'\
    --num-mappers 3
    --split-by a.id \
    --target-dir /data/import \
    --verbose

Requête Boundary vous permet de spécifier une requête optimisée pour obtenir le max, min. sinon, il tentera de faire MIN (a.id), MAX (a.id) SUR votre instruction --query.

Le résultat sera (si min = 0, max = 30) 3 requêtes exécutées en parallèle:

SELECT a.id, a.name, b.id, b.name FROM a, b WHERE a.id = b.id AND a.id BETWEEN 0 AND 10;
SELECT a.id, a.name, b.id, b.name FROM a, b WHERE a.id = b.id AND a.id BETWEEN 11 AND 20;
SELECT a.id, a.name, b.id, b.name FROM a, b WHERE a.id = b.id AND a.id BETWEEN 21 AND 30;
11
KevinC

De plus, si nous spécifions la valeur --query entre guillemets doubles (""), nous devons faire précéder $CONDITIONS d'un slash(\)

--query "select * from table where id=5 AND \$CONDITIONS"

ou sinon 

--query 'select * from table where id=5 AND $CONDITIONS' 
1
jatin bhola

Divisé par :  

  1. pourquoi est-il utilisé? -> pour améliorer la vitesse lors de la récupération des données de rdbms à hadoop
  2. Comment ça marche? -> Il existe par défaut 4 mappeurs dans sqoop, de sorte que l'importation fonctionne en parallèle. L'ensemble des données est divisé en partitions égales. Sqoop considère la colonne de clé primaire pour fractionner les données, puis en déduit les plages maximale et minimale, puis utilise les 4 plages permettant à 4 mappeurs de fonctionner. Par exemple. 1000 enregistrements dans la colonne de clé primaire et la valeur maximale = 1000 et la valeur minimale -0 afin que sqoop crée 4 plages - (0-250), (250-500), (500-750), (750-1000) et selon Sur les valeurs de colonne, les données seront partitionnées et données à 4 mappeurs pour être stockées sur HDFS . si, dans ce cas, la colonne de clé primaire n'est pas distribuée de manière uniforme, vous pouvez modifier le nom de colonne pour un partitionnement uniforme. .

En bref: Utilisé pour le partitionnement des données afin de prendre en charge le parallélisme et d'améliorer les performances 

1
Tutu Kumari