2017-06-16 1 views
0

私は単純なjavaプログラムを持っています。これはdistcpをラップしてhadoopクラスタ上のファイルをコピーします。 IDEとhadoop cliの両方から正常に実行できます。jsp servletからmapreduceジョブを実行しています

自分のプログラムとやりとりするためにWebインターフェイスを使用できるように、私はjsp Webアプリケーションを使いたいと思っていました。

すべての依存関係を持つfat jarファイルを作成し、Webアプリケーションにデプロイしました。 今の問題は、プログラムがdistcpジョブを送信したい時はいつでも、それは次のエラーを与えることである。

java.io.IOException: Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name and the correspond server addresses. 
at org.apache.hadoop.mapreduce.Cluster.initialize(Cluster.java:143) 
at org.apache.hadoop.mapreduce.Cluster.<init>(Cluster.java:108) 
at org.apache.hadoop.mapreduce.Cluster.<init>(Cluster.java:101) 
at org.apache.hadoop.tools.DistCp.createMetaFolderPath(DistCp.java:419) 
at org.apache.hadoop.tools.DistCp.<init>(DistCp.java:106) 
at replication.ReplicationUtils.doCopy(ReplicationUtils.java:127) 
at replication.ReplicationUtils.copy(ReplicationUtils.java:77) 
at replication.parallel.DistCpTask.run(DistCpTask.java:28) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 

私はmapreduce.framework.nameをチェックし、それが実際にです。


UPDATE1:私はローカルで実行する場合

Iterable<ClientProtocolProvider> frameworkLoader = 
      ServiceLoader.load(ClientProtocolProvider.class); 
    for(ClientProtocolProvider cpp: frameworkLoader) { 
     System.out.println(cpp.toString()); 
    } 

私が手::

[email protected] 
[email protected] 

いくつかのデバッグした後、私は次のコードのためのことがわかりましたしかし、それがWebサーバーから実行されるとき、私は得る:

[email protected] 

これはなぜ起こるのかまだ分かりません。私はYarnClientProtocolProviderを私がwebserverにデプロイしたfat jarに入れました。


アップデート2:私は何とか作成

ユーバージャーは、依存関係のjarファイルのMETA-INF/servicesディレクトリの下にあるすべてのサービスプロバイダの宣言をマージし、したがって、そこに書かれている最後のファイルのみが含まれ'org.apache.hadoop.mapred.LocalClientProtocolProvider'

私はまだ私が

hadoop jar my.jar .... 

を使用する理由とき、それは認識して疑問に思って「org.apache.hadoop.mapred.YarnClientProtocolProvider」それは私のMETA-INF/servicesディレクトリの下のサービスプロバイダに存在しないものの、 .jar。

今は、サービスプロバイダのエントリをマージしないuber jarを作成する方法が問題だと思います。

答えて

0

問題はjspサーブレットとは無関係で、正確に何が問題だったかを示す新しい投稿hereを作成しました。

関連する問題