2023. 7. 3. 17:22ㆍ기타
유지보수를 진행하면서 서버가 다운되버리면서 외부에서 받아오는 데이터를 제한된 환경에서 내가 수동으로 하이브에 적재해야되는 일이 생겼다.
RDB와 똑같이 거기서 사용하고 있는 Dbeaver라는 툴을 활용해 데이터 가져오기를 하려고 했으나 작은 데이터인데도 시간이 너무 오래걸리거나 에러가 발생해기 때문에 실패!
KNIME이라는 툴을 활용해서 HIVE와 직접 연결해서 데이터를 적재하려고 했으나 HIVE 뿐만 아니라 HDFS와도 연결이 필요했으며 제한된 환경이라고 했는데 HIVE와는 포트가 연결되어있으나 HDFS와는 연결이 되어있지 않아 실패!
다른 방법을 찾다가 HIVE는 결국 HDFS의 자바로 된 쿼리를 SQL형식의 쿼리로 변환하게 해주는 툴이자 하둡에 파일로 저장된 데이터를 RDB와 같이 보여주게 하는 기능을 가진 어플리케이션이라는 것을 깨달았고 찾다보니 CSV 파일의 경우 HDFS 명령어를 사용해 저장해주면 자동으로 하이브에서 조회 가능하다는 점을 찾았다. (Hive의 쿼리 엔진은 Tez, Spark, Map-Reduce를 주로 사용함 추후 다뤄보자)
1. 데이터를 준비한다. (인코딩 정보를 꼭 확인하며 UTF-8로 저장해주는 것이 좋다. HDFS에서 기본으로 지원하는 것이 UTF-8이기 때문)
2. HIVE 쿼리를 이용하여 CREATE TABLE 명령어를 통해 적재할 데이터 임시 테이블의 껍데기를 만들어준다(기존에 테이블이 있다면 DDL 복사해서 사용하되 밀어넣을 데이터의 컬럼 순서와 생성한 테이블의 컬럼순서가 맞아야함) - > 테이블을 생성하고 DBeaver 등 editor를 통해 DDL을 확인하면 HDFS의 어떤 디렉토리에 이 테이블(폴더)가 생성되어있는지 나와있음 (이때 파일의 컬럼들은 지워주는게 좋다!)
3. SFTP를 이용해 데이터를 네임노드 서버에 저장하고 HDFS dfs -put <파일 위치정보> <hdfs 테이블 위치정보> 명령어를 통해 HDFS에 파일로 저장한다.
4. 하이브에 가서 새로 생성한 테이블을 다시 조회하면 데이터가 들어가 있는 것을 확인할 수 있다!
5. 그대로 임시테이블을 기존 테이블에 인서트하면 끝난다!
- INPUT 데이터 형식을 (CSV,ORC,PARQUET) 등을 주의해서 보며 생성한 테이블과 밀어넣을 테이블의 확장자를 맞추고 인코딩 형식도 조심하자 한글이 깨지는 경우가 생긴다.
- HDFS dfs -ls(파일조회), HDFS dfs -rm(삭제), HDFS dfs -mkdir(디렉토리생성) 등 LINUX명령어와 비슷하니 익숙해져보자
'기타' 카테고리의 다른 글
SQL Query - (1) with문, window 함수 (0) | 2025.05.13 |
---|---|
PlanetScale 연동 방법 (0) | 2024.02.14 |
Postgresql CSV파일 업로드 (0) | 2024.02.12 |
Streamlit에서 데이터베이스 연결 (0) | 2023.10.31 |