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

[spark] AWS EMR에서 spark-sql을 이용하여 s3 테이블에 데이터를 쓸 때 발생하는 chgrp 오류

by hs_seo 2019. 3. 26.

AWS의 EMR에서 spark-sql을 이용하여 s3를 로케이션으로 가지는 테이블에 데이터를 쓰면 chgrp 오류가 발생합니다.


scala> sql("""insert into table s3_table select * from sample1""").show()
-chgrp: '' does not match expected pattern for group
Usage: hadoop fs [generic options] -chgrp [-R] GROUP PATH...
-chgrp: '' does not match expected pattern for group                           
Usage: hadoop fs [generic options] -chgrp [-R] GROUP PATH...


이 오류가 발생해도 데이터를 생성되는 데 아무리 찾아봐도 해결 방법을 찾지 못해서 기록을 위해서 남겨 둡니다.


스파크 지라AWS 포럼에도 있는 문제인 것을 보면 저에게만 발생하는 문제는 아닌 것 같습니다.


디버그 로그를 살펴보면 하이브의 임시 테이블 위치를 수정하다가 오류가 발생하는 것을 볼 수 있습니다.


19/03/25 02:19:51 DEBUG Jets3tNativeFileSystemStore: s3.deleteObject s3_bucket_name table_name/.hive-staging_hive_temp_name-1/-ext-10000//part-00000
19/03/25 02:19:51 INFO Hive: Renaming src: s3://s3_bucket_name/table_name/.hive-staging_hive_temp_name-1/-ext-10000//part-00000, dest: s3://s3_bucket_name/table_name//part-00000_copy_7, Status:true
19/03/25 02:19:51 DEBUG HadoopShimsSecure: {-chgrp,-R,,s3://s3_bucket_name/table_name//part-00000_copy_7}
-chgrp: '' does not match expected pattern for group
Usage: hadoop fs [generic options] -chgrp [-R] GROUP PATH...


우선 hive의 소스코드 HadoopShimsSecure.java, HdfsUtils.java 를 살펴 보면 위의 오류가 발생하는 위치에서 chgrp에 그룹명이 전달 되지 않아서 오류가 발생한 것을 알 수 있습니다.


{

run(fsShell, new String[]{"-chgrp", "-R", group, target.toString()});
}



HDFS의 파일 정보에는 파일정보에 그룹명이 있는데, S3의 파일에는 그룹명이 없어서 오류가 발생하는 것으로 추측됩니다. 


# HDFS 파일 정보

$ hadoop fs -ls /hdfs_location/
drwxr-xr-x   - hadoop hadoop          0 2018-11-30 06:15 /hdfs_location/files/


# S3 파일 정보
$ hadoop fs -ls s3://s3_bucket_names3_bucket_name/
-rw-rw-rw-   1      25874 2017-06-08 01:29 s3://s3_bucket_name/file


일단 사용에는 문제가 없어서 그냥 쓰는데, 시간이 되면 정확한 원인을 찾아 봐야하겠습니다. 


요약하면, AWS의 스파크 SQL에서 S3에 로케이션을 두는 테이블에 INSERT를 하면 하이브 테이블의 임시 데이터 저장을 위한 스테이징 폴더를 생성하는데서 chgrp 오류가 발생하는데, 오류가 발생하는 원인은 하이브와 스파크의 라이브러리 차이인 것 같고 동작에는 이상이 없으므로 그냥 써도 된다. 

반응형