Hadoop、java MapReduce:任意のWeb / EEコンテナーからの起動

JavaアプリケーションのスタンドアロンからMapReduceを起動する方法については、インターネット上に非常に多くの例があります。
しかし、インド象を扱う初心者にとっては、Javaコンテナからジョブを開始する方法を理解することは困難です。

たとえば、 ikrumpingの好意によるこのチュートリアルには 、次のコード例が含まれています。

Job job = new Job(config, "grep"); /* *     jar-    *    . */ job.setJarByClass(Grep.class); 


stendelonアプリケーションを実行すると、このようなコードが機能します。

JBOSS AS、WebSphere AS、Glassfish ASなどからコードを実行すると、このコードは機能しません。
なんで? はい、コンテナはJARファイルを異なるキャッシュに解凍し、そこからクラスを実行するためです。

コンテナの場合にsetJarByClassメソッドが機能しない理由を誰が気にしますか-ネタバレの下であなたを招待します
まず、setJarByClassメソッドの実装を確認することをお勧めします。

 public void setJarByClass(Class cls) { String jar = findContainingJar(cls); if (jar != null) setJar(jar); } private static String findContainingJar(Class my_class) { ClassLoader loader = my_class.getClassLoader(); String class_file = my_class.getName().replaceAll("\\.", "/") + ".class"; try { Enumeration itr = loader.getResources(class_file); while (itr.hasMoreElements()) { URL url = (URL)itr.nextElement(); if ("jar".equals(url.getProtocol())) { String toReturn = url.getPath(); if (toReturn.startsWith("file:")) { toReturn = toReturn.substring("file:".length()); } toReturn = toReturn.replaceAll("\\+", "%2B"); toReturn = URLDecoder.decode(toReturn, "UTF-8"); return toReturn.replaceAll("!.*$", ""); } } } catch (IOException e) { throw new RuntimeException(e); } return null; } 


ご覧のとおり、findContainingJarメソッドは、URLのプロトコルタイプが「jar」であることを想定しています。
また、各コンテナの場合、プロトコルは異なります。
その結果、setJarByClassメソッドは主に壁に取り付けられたアプリケーションでのみ機能します。



特定のアプリケーションコンテナに依存しない普遍的な方法でmapreductionの作業を開始する方法は?

これを行うには、次を実行します。
  1. ジョブから使用されるすべてのクラスを含む別個のJARを作成します
  2. MapReduceを実行するフードHDFSファイルシステムで称賛してください。
  3. 起動されたジョブのクラスパスにJARアーカイブを追加します


上記の例では、次のものを置き換える必要があります。

  job.setJarByClass(Grep.class); 


  DistributedCache.addFileToClassPath("/user/UserName/test.jar", config); 


addFileToClassPathメソッドの最初のパラメーターには、HDFS分散ファイルシステム内のJARファイルへのパスが含まれます。
2番目は、フードの構成(org.apache.hadoop.conf.Configuration)です。

以前はjadarka hadupをスリップする方法が2つありましたが、それらはすでに時代遅れです: blog.cloudera.com/blog/2011/01/how-to-include-third-party-libraries-in-your-map-reduce-job

Source: https://habr.com/ru/post/J235253/


All Articles