HDFS 파일이 생성된다. 이 때 파일명은 sequene 하게 만들어지는 듯 한데. 이를 원하는 파일명 하나로 생성할 수 있을까?
일단 Job을 하나 생성해서 돌려보면 아래와 같이 파일이 생성된다.
(아래 예제는 uMON WKLOG_USER 테이블의 하루치 데이터를 옮긴 것이다.)
sqoop-connector-hdfs 컴포넌트에서 관련 코드를 확인이 가능하다.
HdfsConnector 관련 클래스는 위와 같다.
실제로 HdfsWriter 클래스들이 HDFS 파일을 쓰게되며, 그 filename은 HdfsLoader에서 결정한다.
코드를 상세히 살펴보자.
HdfsTestWriter@Override |
HdfsSequenceWriter@SuppressWarnings("deprecation") |
Writer 클래스는 initialize 때 전달받은 filepath 값을 가공하지 않고 그대로 사용하고 있다.
HdfsLoader 클래스를 살펴보자.
HdfsLoader@Override |
filename 생성시 UUID.randomUUID() 값을 붙여서 생성하는 것을 확인할 수 있다.
이는 HDFS 내에서 파일명 충돌을 막기 위함으로 생각된다.
결론은 Sqoop을 이용하여 HDFS 파일을 생성할 때는 사용자가 임의로 지정할 수 없다.
(단, 확장자는 변경 가능. Codec 설정을 사용할 때만)
만약 파일명을 조절하고자 한다면, HdfsLoader와 GenericHdfsWriter를 별도로 구현해야할 것으로 보인다.