Je sais comment utiliser sqoop en ligne de commande. Mais ne savez pas comment appeler la commande sqoop à l'aide de programmes Java. Quelqu'un peut-il donner une vue de code?
Vous pouvez exécuter sqoop depuis votre code Java en incluant le fichier jar sqoop dans votre chemin de classe et en appelant la méthode Sqoop.runTool()
. Vous devez créer les paramètres requis dans sqoop par programme, comme s'il s'agissait de la ligne de commande (par exemple, --connect
, etc.).
S'il vous plaît prêter attention à ce qui suit:
Sqoop.runTool()
par rapport à Sqoop.Main()
est le fait que runTool()
renvoie le code d'erreur de l'exécution.J'espère que cela pourra aider.
final int ret = Sqoop.runTool(new String[] { ... });
if (ret != 0) {
throw new RuntimeException("Sqoop failed - return code " + Integer.toString(ret));
}
RL
Trouvez ci-dessous un exemple de code d'utilisation de sqoop dans Java. Programme d'importation de données de MySQL vers HDFS/HBase. Assurez-vous d'avoir sqoop jar dans votre chemin de classe:
SqoopOptions options = new SqoopOptions();
options.setConnectString("jdbc:mysql://HOSTNAME:PORT/DATABASE_NAME");
//options.setTableName("TABLE_NAME");
//options.setWhereClause("id>10"); // this where clause works when importing whole table, ie when setTableName() is used
options.setUsername("USERNAME");
options.setPassword("PASSWORD");
//options.setDirectMode(true); // Make sure the direct mode is off when importing data to HBase
options.setNumMappers(8); // Default value is 4
options.setSqlQuery("SELECT * FROM user_logs WHERE $CONDITIONS limit 10");
options.setSplitByCol("log_id");
// HBase options
options.setHBaseTable("HBASE_TABLE_NAME");
options.setHBaseColFamily("colFamily");
options.setCreateHBaseTable(true); // Create HBase table, if it does not exist
options.setHBaseRowKeyColumn("log_id");
int ret = new ImportTool().run(options);
Comme suggéré par Harel, nous pouvons utiliser le résultat de la méthode run () pour la gestion des erreurs. En espérant que cela aide.
Il y a un truc qui a fonctionné assez facilement pour moi. Via ssh, vous pouvez exécuter la commande Sqoop directement. Vous devez juste utiliser une bibliothèque Java SSH
Vous devez suivre cette étape.
Téléchargez la bibliothèque sshxcute Java: https://code.google.com/p/sshxcute/ Et ajoutez-la au chemin de génération de votre projet Java contenant le code Java suivant
import net.neoremind.sshxcute.core.SSHExec;
import net.neoremind.sshxcute.core.ConnBean;
import net.neoremind.sshxcute.task.CustomTask;
import net.neoremind.sshxcute.task.impl.ExecCommand;
public class TestSSH {
public static void main(String args[]) throws Exception{
// Initialize a ConnBean object, parameter list is ip, username, password
ConnBean cb = new ConnBean("192.168.56.102", "root","hadoop");
// Put the ConnBean instance as parameter for SSHExec static method getInstance(ConnBean) to retrieve a singleton SSHExec instance
SSHExec ssh = SSHExec.getInstance(cb);
// Connect to server
ssh.connect();
CustomTask sampleTask1 = new ExecCommand("echo $SSH_CLIENT"); // Print Your Client IP By which you connected to ssh server on Horton Sandbox
System.out.println(ssh.exec(sampleTask1));
CustomTask sampleTask2 = new ExecCommand("sqoop import --connect jdbc:mysql://192.168.56.101:3316/mysql_db_name --username=mysql_user --password=mysql_pwd --table mysql_table_name --Hive-import -m 1 -- --schema default");
ssh.exec(sampleTask2);
ssh.disconnect();
}
}
S'il vous plaît suivez le code donné par vikas cela a fonctionné pour moi et inclure ces fichiers jar dans classpath et importer ces paquets
import com.cloudera.sqoop.SqoopOptions; import com.cloudera.sqoop.tool.ImportTool;
Bibliothèques Ref
Bibliothèque système JRE
1.resources.jar jdk/jre/lib 2.rt.jar jdk/jre/lib 3. jsse.jar jdk/jre/lib 4. jce.jar jdk/jre/lib 5. jeux de caractères, jar jdk/jre/lib 6. jfr.jar jdk/jre/lib 7. dnsns.jar jdk/jre/lib/ext 8. sunec.jar jdk/jre/lib/ext 9. zipfs.jar jdk/jre/lib/ext 10. sunpkcs11.jar jdk/jre/lib/ext 11. localedata.jar jdk/jre/lib/ext 12. sunjce_provider.jar jdk/jre/lib/ext
Parfois, vous obtenez une erreur si votre projet Eclipse utilise JDK1.6 et que les bibliothèques que vous ajoutez sont JDK1.7 pour ce cas configurez JRE lors de la création de projet dans Eclipse.
Vikas si je veux mettre les fichiers importés dans Hive, dois-je utiliser options.parameter ("--Hive-import")?
Si vous connaissez l'emplacement de l'exécutable et les arguments de la ligne de commande, vous pouvez utiliser une variable ProcessBuilder
. Cette dernière peut alors être exécutée avec une variable Process
distincte que Java peut surveiller pour obtenir un code d'achèvement et de retour.