コマンドラインからsqoopを使用する方法を知っています。しかし、Javaプログラムを使用してsqoopコマンドを呼び出す方法がわかりません。誰かがコードビューを提供できますか?
クラスパスにsqoop jarを含め、Sqoop.runTool()
メソッドを呼び出すことにより、Javaコード内からsqoopを実行できます。次のようにプログラムでsqoopに必要なパラメーターを作成する必要があります。コマンドラインの場合(例:_--connect
_など)。
次の点に注意してください。
Sqoop.runTool()
に対するSqoop.Main()
の利点は、runTool()
が実行のエラーコードを返すことです。お役に立てば幸いです。
_final int ret = Sqoop.runTool(new String[] { ... });
if (ret != 0) {
throw new RuntimeException("Sqoop failed - return code " + Integer.toString(ret));
}
_
RL
Java MySQLからHDFS/HBaseにデータをインポートするためのプログラム)でsqoopを使用するためのサンプルコードを以下に示します。クラスパスにsqoop jarがあることを確認してください:
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);
Harelが提案したように、run()メソッドの出力をエラー処理に使用できます。これが役立つことを願っています。
私にはかなりうまくいったトリックがあります。 sshを介して、Sqoopコマンドを直接実行できます。あなたが使用しなければならないのはSSH Java Library
これはJavaから独立しています。インポートを実行するリモートシステムにインストールされているSSHライブラリとsqoopを含める必要があります。次に、sshを介してシステムに接続し、MySQLからHiveにデータをエクスポートするコマンドを実行します。
この手順に従う必要があります。
Sshxcute Java library: https://code.google.com/p/sshxcute/ をダウンロードして、Java以下を含むプロジェクトJavaコード
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, the 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();
}
}
Vikasによって提供されたコードに従ってください。コードはこれらのjarファイルをクラスパスに含め、これらのパッケージをインポートしてください。
import com.cloudera.sqoop.SqoopOptions; import com.cloudera.sqoop.tool.ImportTool;
参照ライブラリ
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. charsets、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
EclipseプロジェクトがJDK1.6を使用していて、追加したライブラリがJDK1.7の場合、Eclipseでプロジェクトを作成するときにJREを構成して、エラーが発生することがあります。
VikasインポートしたファイルをHiveに配置する場合、options.parameter( "--Hive-import")を使用する必要がありますか?
実行可能ファイルの場所とコマンドライン引数がわかっている場合は、ProcessBuilder
を使用できます。これを実行すると、別のProcess
を実行できますJavaで監視できます完了および戻りコード。