2

DistributedCache.addFileToClassPath(Path file、Configuration conf)メソッドを使用して、一連のjarを分散キャッシュに追加し、クラスター全体でマップリデュースジョブに依存関係を利用できるようにしました。ここで、これらのjarをすべてキャッシュから削除してクリーンを開始し、そこに正しいjarバージョンがあることを確認したいと思います。ファイルをキャッシュに追加するコードをコメントアウトし、hdfsでコピーした場所からファイルを削除しました。問題は、map reduceジョブがClassNotFound例外をスローしていないため、jarがまだクラスパスにあるように見えることです。サービスを再起動せずにこのキャッシュをフラッシュする方法はありますか?

編集:その後、次のフォルダーをフラッシュしました:/ var / lib / hadoop-hdfs / cache / mapred / mapred / local / taskTracker /distcache/。それはそれを解決しませんでした。ジョブはまだ参照を見つけます。

4

1 に答える 1

2

私は今、私の問題が何であったかを理解しています。以前、jarファイルを/ usr / lib / hadoop /lib/フォルダーにコピーしていました。これにより、マップリデュースジョブで永続的に利用できるようになりました。それらをそこから削除した後、ジョブは予期されたClassNotFoundExceptionをスローしました。また、addFileToClassPathを使用してjarを追加しないと、ジョブで使用できないことに気付きました。したがって、分散キャッシュをフラッシュしたり、addFileToClassPathで追加したものを削除したりする必要はありません。これは、そこに配置したものは、その指定されたジョブインスタンスにのみ表示されるためです。

于 2013-01-30T15:44:33.313 に答える