객체 스토리지와 데이터 수집
빅데이터의 대부분은 확장성이 높은 '분산 스토리지(distributed storage)'에 저장됩니다.
일반적으로는 파일을 저장하기 위한 '객체 스토리지(object storage)'가 많이 이용됩니다. 대표적으로 Hadoop의 HDFS, Amazon S3가 있습니다.
객체 스토리지의 파일을 읽고 쓰는 과정은 네트워크를 통해서 일어납니다. 데이터는 여러 디스크에 복사되기 때문에 하나의 디스크가 고장이 나도 데이터가 손실되지 않는다는 장점을 가지고 있습니다. 또한 읽고 쓰는 작업을 여러 하드웨어에 분산하기 때문에 데이터의 양이 늘어나도 성능이 떨어지지 않도록 설계되어 있습니다.
하지만 객체 스토리지는 데이터의 양이 많을 때에는 효율적이지만 소량의 데이터인 경우에는 비효율적입니다. 소량의 데이터의 경우에는 데이터를 처리하는 시간보다 통신에 걸리는 시간이 더 많이 소요될 수 있습니다.
데이터 수집
수집한 데이터를 구조화 데이터로 가공하고 집계 효율이 좋은 분산 스토리지를 만들어 데이터의 장기적인 저장을 하는 일련의 프로세스를 '데이터 수집(data ingestion)'이라고 합니다.
객체 스토리지에 데이터를 기록할 때 대량의 작은 파일을 수시로 기록하면 성능을 저하시키는 요인이 되기 때문에 작은 데이터는 모아서 하나의 큰 파일로 만들어 기록하는 것이 좋습니다.
하지만 파일이 지나치게 커도 네트워크 전송에 시간이 걸려 예상치 못한 오류 발생률이 높아집니다. 1테라바이트의 파일을 100Mbp의 회선으로 전송하면 약 24시간이 소요됩니다. 이런 거대한 데이터는 나누어서 처리하는 것이 오류발생을 줄일 수 있습니다.
벌크 형의 데이터 전송
일반적으로 데이터 웨어하우스는 데이터베이스나 파일 서버 또는 웹 서비스 등에서 SQL, API등으로 정리해 데이터를 추출합니다.
데이터가 처음부터 분산 스토리지에 저장되어 있는 것이 아니라면 데이터 전송을 위한 'ETL 서버'를 설치합니다.
'ETL 서버'는 구조화된 데이터 처리에 적합한 ETL 도구와 오픈 소스 벌크 전송 도구 또는 스크립트를 이용하여 데이터를 전송합니다.
ETL 프로세스는 하루 혹은 1시간마다 정기적인 실행을 하므로 그동안 축적된 데이터는 하나로 모이게 됩니다.
100개의 파일을 전송하는데 100번 전송을 반복하고 있다면 한번의 전송에 모든 파일을 포함도록 변경하여 모아서 전송하는 것이 좋습니다.
하지만 너무 많은 양의 데이터를 한꺼번에 전송하면 전송 도구에서 파일을 나눌 수 있고, 몇 시간 후에 디스크가 넘쳐나서 오류가 발생하는 일이 생길 수도 있습니다.
데이터양이 많을 때는 한 달 혹은 하루 단위로 전송하도록 태스크를 작게 분해하고 태스크가 커지지 않도록 설정합니다. 워크플로 관리 도구를 이용하면 이러한 태스크 작업을 쉽게 관리할 수 있습니다.
데이터 전송의 워크플로
뭔가 문제가 발생했을 때 여러 번 데이터 전송을 재실행할 수 있다는 것이 벌크 형의 장점이고 오류가 났을 때 재시도를 하여 데이터 전송을 문제없게 도와주는 것이 워크플로 도구입니다.
스트리밍 형의 경우에는 실시간으로 계속 동작하는 것을 전제로 하기때문에 워크플로로 실행하지 않습니다. 과거의 데이터를 빠짐없이 가져오거나 실패한 작업을 재실행할 것을 고려한다면 벌크 형과 워크플로의 조합을 고려해야합니다.
'데이터 엔지니어링' 카테고리의 다른 글
[Kafka] Apache kafka 소개와 배경 (1) | 2024.01.19 |
---|---|
[빅데이터를 지탱하는 기술] 빅데이터의 축적 # 2 (0) | 2023.05.27 |
[빅데이터를 지탱하는 기술] 대규모 분산 처리의 프레임워크 # 5 (0) | 2023.05.24 |
[빅데이터를 지탱하는 기술] 대규모 분산 처리의 프레임워크 # 4 (0) | 2023.05.23 |
[빅데이터를 지탱하는 기술] 대규모 분산 처리의 프레임워크 # 3 (1) | 2023.05.22 |