java程序使用sqoop导入数据

ma8fv8wu  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(352)

我创建了一个web应用程序(jsp)来将mysql数据库中的数据提取到hdfs中。程序执行成功,但提取的数据被写入普通unix文件系统而不是hdfs。
有人能告诉我如何在sqoop import命令中提供hdfs文件系统路径吗?

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;

}

   }
z9zf31ra

z9zf31ra1#

它正在写入本地文件系统而不是hdfs,因为除非另有配置,否则默认文件系统是本地的。您可以使用sqoopoptions将其配置为hdfs—有关示例,请参阅以下问题/答案:
如何在java中执行sqoop?
具体来说,您需要定位并传递集群核心站点和hdfs站点xml文件的位置:

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"));

相关问题