2017-04-21 51 views
0

我已經產生了一個EMR集羣,其中包含一個EMR步驟,用於將文件從S3複製到HDFS,反之亦然使用s3-dist-cp。 這個羣集是一個隨需應變的羣集,所以我們沒有跟蹤ip。在運行時在EMR上推導HDFS路徑

第一個電子病歷步驟是: hadoop fs -mkdir /input - 此步驟已成功完成。

第二EMR步驟是: 以下是我使用的命令:

s3-dist-cp --s3Endpoint=s3.amazonaws.com --src=s3://<bucket-name>/<folder-name>/sample.txt --dest=hdfs:///input - 這一步失敗

我得到下面的異常錯誤:

Error: java.lang.IllegalArgumentException: java.net.UnknownHostException: sample.txt at org.apache.hadoop.security.SecurityUtil.buildTokenService(SecurityUtil.java:378) at org.apache.hadoop.hdfs.NameNodeProxies.createNonHAProxy(NameNodeProxies.java:310) at org.apache.hadoop.hdfs.NameNodeProxies.createProxy(NameNodeProxies.java:176) at org.apache.hadoop.hdfs.DFSClient.(DFSClient.java:678) at org.apache.hadoop.hdfs.DFSClient.(DFSClient.java:619) at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:149) at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2717) at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:93) at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2751) at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2733) at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:377) at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295) at com.amazon.elasticmapreduce.s3distcp.CopyFilesReducer.reduce(CopyFilesReducer.java:213) at com.amazon.elasticmapreduce.s3distcp.CopyFilesReducer.reduce(CopyFilesReducer.java:28) at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:171) at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:635) at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:390) at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698) at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) Caused by: java.net.UnknownHostException: sample.txt

但這個文件不存在於S3上,我可以通過EMR上的Spark應用程序讀取它。

+0

爲什麼不直接使用EMRFS並查看直接的HDFS S3掛載點?通常這樣的錯誤可能是由地區造成的。 – Henry

+0

您是否可以嘗試在沒有s3EndPoint參數的情況下運行該命令,如果在帳戶中指定了一個,則總是通過端點進行傳輸。如果這也不起作用,請嘗試使用hadoop distcp一次。 – Chirag

+0

@Chirag:我們試過了,它沒有奏效。 – sashmi

回答

1

解決方案是使用s3-dist-cp時,文件名不應在源和目標中提及。

如果你想在src目錄過濾文件,你可以使用--srcPattern選項

如:S3-DIST-CP --s3Endpoint = s3.amazonaws.com --src = S3:// // --dest = hdfs:/// input/--srcPattern = sample.txt。*