본문 바로가기
빅데이터/hadoop

[hadoop] EMR에서 S3에 폴더 생성시 Failed to parse XML document 오류 처리

by hs_seo 2019. 7. 8.

AWS EMR에서 EMR FS 를 이용해서 버켓에 디렉토리를 생성할 때 XML 파싱 오류가 발생하는 경우가 있습니다. 이는 경로 중간에 특수문자나 깨진 문자가 있어서 파싱오류가 발생하기 때문입니다.

 

s3://[]/a/b/c 디렉토리를 생성할 때, s3://[]/a&c/ 와 같은 형식으로 중간에 특수 문자가 들어가면 XML 파싱을 하지 못해서 오류가 발생합니다. 해당 폴더를 삭제하거나, 수정해야 합니다.

$ hadoop fs -mkdir s3://[]/a/b/c
mkdir: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.AmazonClientException: Failed to parse XML document with handler class com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.transform.XmlResponsesSaxParser$ListObjectsV2Handler

깨진문자가 있으면 하이브(hive)의 ADD Partition에서 오류가 발생합니다.

2019-07-08T07:44:32,209 ERROR [main([])]: metadata.Hive (:()) - MetaException(message:Got exception: java.io.IOException com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.AmazonClientException: Failed to parse XML document with handler class com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.transform.XmlResponsesSaxParser$ListObjectsV2Handler)
	at org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$add_partitions_req_result$add_partitions_req_resultStandardScheme.read(ThriftHiveMetastore.java:64103)
	at org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$add_partitions_req_result$add_partitions_req_resultStandardScheme.read(ThriftHiveMetastore.java:64062)
	at org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$add_partitions_req_result.read(ThriftHiveMetastore.java:63985)
	at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:86)
	at org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$Client.recv_add_partitions_req(ThriftHiveMetastore.java:1811)
	at org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$Client.add_partitions_req(ThriftHiveMetastore.java:1798)
	at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.add_partitions(HiveMetaStoreClient.java:611)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
반응형