0

mysql データベースから HDFS にデータを抽出するための Web アプリケーション (JSP) を作成しました。私の Java コードでは、要件を達成するために sqoop import コマンドを使用しました。プログラムは正常に実行されましたが、抽出されたデータは hdfs ではなく通常の UNIX ファイル システムに書き込まれました。

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;

}

   }
4

1 に答える 1

2

特に構成されていない限り、デフォルトのファイルシステムはローカルであるため、HDFS ではなくローカルファイルシステムに書き込みます。SqoopOptions を使用して、これを HDFS に設定できます。例については、この質問/回答を参照してください。

具体的には、クラスターの core-site および hdfs-site 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"));
于 2013-06-08T08:09:01.413 に答える