개요
- Client -> Django -> S3, Spark -> S3
- 유저가 업로드한 비디오 파일 & Spark에서 이미지 압축 파일를 S3로 전달 > Hdfs로 전달
- 수정 이유
- S3 비용
- 프레임마다 자른 img 압축 파일과 비디오 파일은 사용 빈도가 적음
- 비디오 파일 및 img 압축 파일의 용량이 큼
- Spark
- Spark를 사용 중이기 때문에 Hdfs에 같이 사용이 좋음

TroubleShooting
- S3 사용 빈도와 저장할 파일들이 많아 S3 비용이 많이 나올 가능성이 큼
- .mp4 파일 & 이미지 압축 파일은 사용빈도가 적음
- S3 사용이유
- 사용이 빈번하고 중요한 데이터 저장 > IAM을 이용하여 디렉토리마다 사용 권한을 부여가 가능함
- 데이터의 Upload & Download가 빨라 플랫폼의 원할한 이용이 가능함
- Auto Scaling > Scale Up이 간편함
해결방안
- Hadoop 플랫폼을 사용하여 비디오 파일 & 이미지 압축 파일를 백업 용도로 저장
- Hadoop 채택 이유
- Spark를 사용 중이기 때문에 Hdfs에 같이 사용이 좋음
- 실시간으로 처리할 필요가 없기 때문에 배치 처리를 채택함
Install
코드
import hdfs
import environ
env = environ.Env(
DEBUG=(bool, False)
)
environ.Env.read_env(
env_file=os.path.join(BASE_DIR, '.env')
)
def sendfile():
global num
producer = KafkaProducer(
acks=0,
compression_type='gzip',
bootstrap_servers=[os.environ['kafka_Ip']],
value_serializer=lambda v: dumps(v).encode('utf-8'),
)
client_hdfs = InsecureClient(os.environ['hdfs_URL'])
client_hdfs.upload('/', './media/result/' + str(num) + '.mp4')
producer.send('sendvideo', {
'title': str(num) + '.mp4',
})
time.sleep(0.2)
producer.flush()
num += 1
결과
- Hadoop
hadoop fs -ls /
를 사용하여 mp4파일이 업로드 된 모습을 확인할 수 있음

URL
Walker
와 대단하시네요 저도 만들어보고 싶네요