jerom's coding World

[Ibis] 파이썬 라이브러리를 통한 Impala 및 HDFS 접근 #1 본문

Python

[Ibis] 파이썬 라이브러리를 통한 Impala 및 HDFS 접근 #1

jerom 2022. 2. 3. 23:48

Ibis란? https://ibis-project.org/about/ 에 따르면, 로컬 파이썬 환경(판다스, 사이킷런과 같은)과 원격 저장소 및 원격 실행 환경 (예를 들면, 하둡 요소들에 속하는 HDFS, Impala, 하이브, 스파크 및 SQL 데이터 베이스)를 연결해주는 다리 역할을 제공하는 툴이라고 설명이 되어있습니다. 쉽게 이야기하면, 위에서 말한 요소들에 명령어를 쉽게 날리고, 접근할 수 있게 해주는 툴 박스입니다.

 

Impala 및 HDFS 연결

https://ibis-project.org/backends/impala/ 에 따르면, Ibis에서는 Impala 및 HDFS 연결제공 및 명령어를 제공하고 있습니다.

대부분의 케이스는 Impala 명령어를 통해 해결이 가능하지만, 몇몇 케이스에서, HDFS 명령어를 통해 파일을 전송 및 관리에 필요성이 존재합니다.

import ibis

hdfs = ibis.impala.hdfs_connect(host='impala', port=50070)
con = ibis.impala.connect(
    host='impala', database='ibis_testing', hdfs_client=hdfs
)

hdfs 및 impala와의 연결은 위와 같이 이루어지고, 다양한 연결 옵션이 존재합니다. 자세한 사항은 각 메소드를 검색후, 파라미터의 용도를 탐구해보시면 되겠습니다.

 

Impala 관련 메소드로는 크게 두가지 메소드가 제공이 됩니다.

Database methods

create_database(self, name, path=None, force=False)
drop_database(self, name, force=False)
list_database(self, like=None)

위와 같은 메소드가 제공이되며, 실질적으로 데이터베이스를 코드로 생성 하거나 삭제하는것은 추천되지않으며, list_database 정도만, 데이터베이스 존재여부를 확인하기위해 사용할 것 같습니다.

Table methods

cache_table()
create_table()
drop_table()
get_options()
get_schema()
insert()
invalidate_metadata()
list_tables()
truncate_table()

저는 테이블을 코드에서 생성하기 위해, create_table() 메소드를 사용해보았고, 생성전 테이블 존재를 체크하기 위한 용도로 list_tables()를 사용하였습니다. 그외에도 임팔라에서 제공되는 다양한 기능들을 위와같이 메소드로 제공하고 있으니 공부한 후 사용해보시는것을 추천드립니다. 
이때, insert() 메소드의 경우 Dataframe 형태의 데이터를 해당 메소드로 직접적으로 임팔라 및 HDFS에 넣을수 있지만, 만약 임팔라 권한이 막혀있다면, 실행이 안되는 경우가 있고 실제로도 HDFS에 파일(parquet과 같은) 형태로 넣은 후 임팔라 명령어를 통해 refresh 시켜주는 방식이 훨씬 나은 방법인것 같습니다.

 

다음 포스트에서는, 임팔라 테이블에 설정을 바꿔주는 명령어 및 HDFS 명령어를 알아보도록 하겠습니다.

Comments