2017-08-01 9 views
0

Hadoop Web UIのようにHDFSからディレクトリとファイルを作成および削除できるWebアプリケーションを構築しています。 HDFSにディレクトリを作成することさえできません。javaサーブレットを使用してHDFS内にディレクトリを作成します

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.FileSystem; 
import org.apache.hadoop.fs.Path; 
import java.net.URI; 

// Extend HttpServlet class 
public class Saurab extends HttpServlet { 

    public void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

     String hdfsUri = "hdfs://saurab:9000/"; 
     String dirName = "ekbana113"; 
     FileSystem hdfs = null; 
     Configuration con = new Configuration(); 

     try { 
      con.addResource(new Path("/home/saurab/hadoopec/hadoop/etc/hadoop/core-site.xml")); 
      con.addResource(new Path("/home/saurab/hadoopec/hadoop/etc/hadoop/hdfs-site.xml")); 

      hdfs = FileSystem.get(URI.create(hdfsUri), con); //hdfs is null, I don't know why ? 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     try { 
      hdfs.mkdirs(new Path(hdfsUri + "/" + dirName)); // Null pointer exception 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
} 
} 

私は自分のWebアプリケーションを起動するためにTomcatサーバーを使用していますthis question を追いました。 Hadoopが稼働しています。私は戦争ファイルを作成し、そのwarfileを/opt/tomcat/webapps/に入れました。その後、私はしたsaurab:8080/servlet-name/mapper-url これは正しい方法ですか、または私はひどく間違っていますか?

+0

あなたの問題は何ですか? Webアプリケーションページにアクセスすることはできませんか?あなたは例外を取得していますか?問題が何であるかを正確に理解することなく誰でも助けることができるのではないかと疑う。 – Serhiy

+0

まあ、hdfs変数はヌルなので、FileSystemオブジェクトが作られていないことを意味する。私はなぜこの変数nullが混乱していたのですか?このプログラムをjavaアプリケーションとして実行すると 'FileSystem.get()'がファイルシステムオブジェクトを返し、hdfs機能を使用することができますが、サーブレットやWebアプリケーションから行うとnullになります。 – Saurab

+0

構成が正しく渡されていないため、nullの可能性があります。ファイルを提供する代わりに、手動で設定を試したことがありますか?以下のようになります: 'con.set(" fs.defaultFS "、" hdfs://example.org/ ");'など? – Serhiy

答えて

0

サーブレットには@WebServletアノテーションがありません。 web.xmlを作成しましたか?いいえの場合は、サーブレットに@WebServletアノテーションを追加するか、WEB-INF/web.xmlを作成してURLマッピングを記述する必要があります。さらに、http://saurab:8080/warfile-name/mapped-urlにアクセスしてください。

warファイル名がtest1.warで、public class Saurab extends HttpServlet {の前に@WebServlet(urlPatterns = { "/test2" })を追加すると、http://saurab:8080/test1/test2にアクセスできます。

+0

申し訳ありません。私は 'web.xml'を作成したことを忘れていましたが、それはどちらも助けませんでした。私は 'webhdfs'を使い、うまく走っていましたが、http:// saurab:50070/webhdfs/vi/dir1/dir2?op = MKDIRS" 'を実行するのではなく、' hdfs.mkdirs (); '、それは可能か、webhdfsを使用する必要がありますか? – Saurab

関連する問題