Java程序使用sqoop导入数据
我已经创建了一个web应用程序(JSP)来将数据从mysql数据库提取到HDFS。在我的Java代码中,我使用了sqoop import命令来实现我的需求。程序成功执行,但提取的数据将写入普通unix文件系统而不是hdfs 有人能告诉我如何在sqoop导入命令中提供hdfs文件系统路径吗Java程序使用sqoop导入数据,java,hadoop,hdfs,sqoop,Java,Hadoop,Hdfs,Sqoop,我已经创建了一个web应用程序(JSP)来将数据从mysql数据库提取到HDFS。在我的Java代码中,我使用了sqoop import命令来实现我的需求。程序成功执行,但提取的数据将写入普通unix文件系统而不是hdfs 有人能告诉我如何在sqoop导入命令中提供hdfs文件系统路径吗 package com.archival.da; import java.sql.*; public class DataImportSetup { static int statu
package com.archival.da;
import java.sql.*;
public class DataImportSetup {
static int status=0;
public static int importsetup(String policy_id){
Connection con=GetCon.getCon();
PreparedStatement ps;
try {
ps = con.prepareStatement("SELECT
CON.SERVER,CON.PORT,CON.DB,CON.USER,
CON.PWD,POLICY.SQL_TEXT FROM POLICY
JOIN CONNECTION AS CON ON POLICY.C_ID=CON.C_ID WHERE POLICY.ID=?");
ps.setString(1,policy_id);
ResultSet rs=ps.executeQuery();
rs.next();
String ServerNm =
"jdbc:mysql://"+rs.getString(1)+":
"+rs.getString(2)+"/"
+rs.getString(3);
String ConUser=rs.getString(4);
String ConPass=rs.getString(5);
String SqlText=rs.getString(6);
String[] str={"import","--connect",ServerNm,"--hadoop-mapred- home","/ms/hadoop-1.2.0", "--query", SqlText , "--target-dir", "/user/root/city","--username", ConUser, "--password", ConPass,"--split-by","id"};
status=Sqoop.runTool(str);
System.out.println(status);
} catch (SQLException e) {
e.printStackTrace();
}
return status;
}
}
它正在写入本地文件系统而不是HDFS,因为默认文件系统是本地的,除非另有配置。您可以使用SqoopOptions将其配置为HDFS-有关示例,请参阅此问题/答案:
Configuration config = new Configuration();
config.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
config.addResource(new Path("/usr/local/hadoop/conf/hdfs-site.xml"));
你好,Chris,我使用了sqoop选项,在new ImportTool()上出现错误。
run(options)
;ImportTool类型中的run(SqoopOptions)方法不适用于参数(SqoopOptions)我的配置Hadoop 1.2.0 Sqoop 1.4.3您能在这个问题上提供帮助吗?检查SqoopOptions
-ImportTool需要com.cloudera.Sqoop.SqoopOptions
谢谢Chris,我已经从com.cloudear.sqoop.SqoopOptions导入了数据,它现在正在工作。我现在可以将数据加载到hdfs文件系统。我还有一个问题。我可以给出加载数据的目标文件名(不是目录)吗?我不确定-最好再发一个问题