我正在将我的外部jar复制到 /home/hadoop/lib directoy
在 EMR
作为一个 bootstrap
过程。但它在引导过程中显示了以下错误
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager: method <init>()V not found
at com.amazonaws.http.ConnectionManagerFactory.createThreadSafeClientConnManager(ConnectionManagerFactory.java:26)
at com.amazonaws.http.HttpClientFactory.createHttpClient(HttpClientFactory.java:95)
at com.amazonaws.http.AmazonHttpClient.<init>(AmazonHttpClient.java:117)
at com.amazonaws.AmazonWebServiceClient.<init>(AmazonWebServiceClient.java:60)
at com.amazonaws.services.s3.AmazonS3Client.<init>(AmazonS3Client.java:295)
at org.apache.hadoop.fs.s3native.NativeS3FileSystem.initialize(NativeS3FileSystem.java:500)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1413)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:68)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1431)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:256)
at com.amazon.elasticmapreduce.scriptrunner.ScriptRunner.fetchFile(ScriptRunner.java:39)
at com.amazon.elasticmapreduce.scriptrunner.ScriptRunner.main(ScriptRunner.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.main(RunJar.java:187)
2条答案
按热度按时间6ioyuze21#
你需要这样做作为一个引导动作。这很简单,只需放置一个脚本将复制到s3中,然后如果要从命令行启动emr,请添加如下参数:
或者,如果您是通过web界面执行此操作,只需在“引导操作”中输入文件的位置作为“自定义操作”。
epggiuax2#
我假设您使用java进程将外部jar下载到/home/hadoop/lib/中,并使用amazons3java客户机下载相同的jar。
amazonjavasdkfors3需要在运行代码时提供其他依赖jar。
您需要按正确的顺序和版本号添加它们。或者可以使用shell脚本将外部jar下载到/home/hadoo/lib