분류 전체보기 477

MLOps란 무엇인가? 영상 해설

https://www.youtube.com/watch?v=xZKtofBe18I MLOps란 무엇인가 2021년 AI업계에서 많이 나온 단어, 머신러닝을 실제로 다룰때 서비스에 적용하는 과정에서 필요한 분야. 초창기라 공식적이 정의 없음. 다만, 머신러닝 -> 서비스 전달 과정에 필요한 operation 데이터 브릭스에 따르면 - ModelOps : 모델 개발에 필요한 운영 - DataOps : 데이터 관련 운영 - DevOps : 소프트웨어 관련 운영 머신러닝 모델을 서비스에 올리려는 시도가 많이 진행되고 있음. 그러나 이런 시도에 따라 몇가지 이슈가 발생됨 1) 로컬에서 개발한 모델(주피터에서 개발한 어떤 모델)을 어떻게 서비스에 사용할 수 있을까? 2) 모델의 버전관리는 어떻게하지? 3) 데이터셋 버..

빅데이터 2022.03.17
카산드라 특정 테이블에 TTL 데이터를 넣을 때 적합한 컴팩션 전략은?

질문 카산드라에서 특정 테이블에 일부 데이터는 TTL 2일로 설정되어 있고, 일부 데이터는 60일 TTL로 되어 있다면 가장 적합한 컴팩션 전략은 무엇인가요? 1. LeveledCompactionStrategy (LCS) 2. SizeTieredCompactionStrategy (STCS) 3. TimeWindowCompactionStrategy (TWCS) 답변 가장 적합한 전략은 TimeWindowCompactionStrategy입니다. 만에하나 동일 테이블에 여러 종류의 ttl 시간이 설정되어 있다고 하더라도 TWCS가 적합합니다. unchecked tombstone compaction을 설정함으로서 2일 이상 지난 TTL 데이터는 삭제되도록 하는 것이 좋습니다. ALTER TABLE my_tabl..

카산드라 TimeWindowCompactionStrategy 설명

TimeWindowCompactionStrategy TimeWindowCompactionStrategy(TWCS)는 데이터가 디스크에서 timestamp 단위로 묶일 때 유용합니다. 주로 TTL로 쓰여진 데이터를 다룰 경우 사용됩니다. 데이터가 만료되거나 TTL이 도달한 SSTable의 데이터는 대략적으로 비슷한 시간대에 삭제됩니다. 이 전략을 사용하면 이런 데이터를 완전히 삭제시킵니다. SizeTieredCompactionStrategy(STCS) 또는 LeveledCompactionStrategy(LSC)를 사용할 때 보다 디스크 사용량이 줄어들게 됩니다. TWCS의 기본 컨샙은 윈도우(window) 기준으로 sstable 파일을 생성하는 것입니다. 윈도우는 아래 2가지 주요 옵션에 의해 설정됩니다...

카산드라와 TTL, 툼스톤 그리고 관련 동작(컴팩션)

카산드라에서는 데이터의 TTL 또는 삭제에 의해 데이터가 바로 삭제되는 것이 아니라 툼스톤을 사용하여 데이터를 삭제합니다. 카산드라와 같은 분산 데이터베이스에서 데이터를 바로 삭제하는 것은 매우 어려운 일입니다. 그렇기 때문에 데이터를 삭제하기 전에 툼스톤이라고 불리는 플래그를 사용하여 해당 데이터가 삭제 대기로 옮긴 이후 추후에 데이터를 삭제시킵니다. 관련 동작을 알기 위해서는 우선 컴팩션이 무엇인지 알아보아야 합니다. 컴팩션(Compaction) 카산드라에서 컴팩션은 최고의 성능을 내기 위해 적재된 데이터(SSTable)를 결합하는 행위를 뜻합니다. 반면, 압축은 컴프레션이므로 컴팩션과 햇갈려서는 안됩니다. 카산드라에서 컴팩션은 다음과 같은 전략을 제공합니다. 사용방법에 따라 적합한 전략의 컴팩션을 ..

아파치 카산드라 설정 파일 및 상용 환경 셋팅

카산드라는 설치 방법에 따라 다른 디렉토리에 설정 파일이 있습니다. - 도커 : /etc/cassandra 디렉토리 - tarball : conf 디렉토리 - package : /etc/cassandra 디렉토리 카산드라의 기본 설정파일은 cassandra.yaml입니다. 1개의 노드로 구성할 수 있는 클러스터에 적합하게 설정되어 있습니다. 하지만 2개 이상 노드로 운영할 경우에는 다양한 추가 셋팅을 해야만 합니다. 클러스터로 구성하기 위해서는 일부 설정값을 입력해야만 합니다. - cassandra.yaml : 카산드라의 기본 셋팅 파일 - cassandra-env.sh : 카산드라에서 사용하는 환경 변수 셋팅 - cassandra-rackdc.properties or cassandra-topology...

아파치 카산드라 다이나모, 일관된 해싱, 복제 개념 살펴보기

다이나모 아파치 카산드라는 아마존의 다이나모 분산 키값 저장소의 기술들을 기반으로 만들어졌습니다. 다이나모 시스템은 3개의 주요 기술로 만들어집니다. 1) 파티셔닝된 데이터셋에 coordination 요청 2) Ring기반 맴버쉽 및 failure 감지 3) 로컬 퍼시스턴스 저장소 엔진 카산드라는 처음 2개의 클러스터링 구조를 기반으로 설계되었습니다. 그리고 LSM(Log Structured Merge Tree)를 기반으로 저장소 엔진을 사용합니다. - 일관된 해싱을 통한 데이터셋 파티셔닝 수행 - 버저닝된 데이터와 조정 가능한 consistency를 통한 멀티 마스터 데이터 복제 - 가십 프로토콜(gossip protocol)을 사용한 분산 클러스터 멤버쉽 추가 및 장애 감지 - 범용 하드웨어를 사용한..

아파치 카산드라 살펴보기, 설명, 기본 개념

아파치 카산드라는 오픈소스이며 분산 NoSQL 데이터베이스입니다. 파티션 기반의 wide column 저장소 모델을 활용하며 consistent semantics를 지원합니다. 아파치 카산드라는 페이스북에서 SEDA(Staged event-driven architecture)를 기반으로 설계되었고 아마존의 다이나모 분산 저장소와 구글의 빅테이블 저장소 엔진 모델을 기반으로 디자인되었습니다. 다이나모와 빅테이블 두개 다 스케일러블하고 안전하며 고 가용성의 데이터 저장소 특징을 가지도록 개발되었지만 일부는 완전히 지원되지 않습니다. - 다이나모 : https://www.allthingsdistributed.com/2007/10/amazons_dynamo.html - 빅테이블 : https://static.g..

카산드라 TTL에 따른 데이터 삭제 정리

https://docs.datastax.com/en/cql-oss/3.3/cql/cql_using/useExpire.html Expiring data with time-to-live Use time-to-live (TTL) to expire data in a column or table. Columns and tables support an optional expiration period called TTL (time-to-live); TTL is not supported on counter columns. Define the TTL value in seconds. Data expires once it exceeds the TTL p docs.datastax.com 카산드라에서는 컬럼단위 또는 테이블 단..

kafka consumer와 seekToBeginning를 활용하여 offset reset하기

카프카 컨슈머 클라이언트는 seekToBeginning 함수가 있습니다. 이 함수를 사용하면 특정 파티션의 오프셋을 최소 레코드로 지정할 수 있습니다. /** * Seek to the first offset for each of the given partitions. This function evaluates lazily, seeking to the * first offset in all partitions only when {@link #poll(Duration)} or {@link #position(TopicPartition)} are called. * If no partitions are provided, seek to the first offset for all of the currently as..

빅데이터/Kafka 2022.01.17
스키마 레지스트리 자바 클라이언트(프로듀서,컨슈머) 테스트

1. 스키마 레지스트리 설정, 실행 confluent-7.0.0/etc/schema-registry/schema-registry.properties 설정파일 listeners=http://0.0.0.0:8081 kafkastore.bootstrap.servers=PLAINTEXT://localhost:9092 kafkastore.topic=_schemas debug=false 스키마 레지스트리 실행 $ bin/schema-registry-start etc/schema-registry/schema-registry.properties [2021-12-16 21:36:27,121] INFO SchemaRegistryConfig values: access.control.allow.headers = access...

빅데이터/Kafka 2021.12.16
confluent developer certification 예시 문제 해설

confluent developer certification sample : driver토픽의 1번 파티션에서 모든 input을 다루는 데이터. 즉, 프로듀서가 레코드를 보내면 리더 파티션이 존재하는 브로커와 통신을 한다. 그러므로 정답은 1번 파티션의 리더가 위치한 102번 브로커가 정답. 카프카 컨슈머가 range partition assignment 전략일 경우 어떻게 파티션과 컨슈머가 연결될 것인지에 대한 정답을 찾는 것이다. range partition assignment의 경우 consumer의 member id를 사전식(알파벳순)으로 정렬하여 각 토픽의 파티션을 숫자를 기준으로 컨슈머에 할당한다. 그러므로 이 경우 다음과 같이 연동된다. 그러므로 정답은 c. 토픽a의 파티션0과 토픽b의 파티..

빅데이터/Kafka 2021.12.15
confluent HdfsSinkConnector 파티셔너 설명

confluent에서는 hdfs2를 위한 sink connector를 컨플루언트 커뮤니티 라이센스로 제공합니다. 해당 기능 중 파티셔너 기능에 대해 정리합니다. https://docs.confluent.io/kafka-connect-hdfs/current/overview.html#partitioners-and-storage HDFS 2 Sink Connector for Confluent Platform | Confluent Documentation Home Kafka Connectors HDFS 2 Sink Connector for Confluent Platform The Kafka Connect HDFS 2 Sink connector allows you to export data from Kafka t..

빅데이터/Kafka 2021.11.25
macos에서 podman으로 rest-proxy 실행하기

rest proxy는 카프카와 연동시 프로듀서, 컨슈머의 역할을 http로 수행할 수 있는 기능을 가진 애플리케이션입니다. https://blog.voidmainvoid.net/345 카프카의 토픽 데이터를 REST api로 주고받자 - Kafka rest proxy 사용 confluent에서는 rest proxy라고 불리는 카프카 클러스터를 위한 RESTful interface application을 오픈소스로 제공하고 있습니다. 기존에 Kafka connect, Kafka client로 데이터를 전달하는 것과는 사뭇 다르게.. blog.voidmainvoid.net macos에서 rest proxy를 사용하여 카프카와 연동 테스트 수행하는 방법을 정리합니다. $ podman machine start ..

빅데이터/Kafka 2021.11.16
카산드라 모델링 분석하기 좋은 테이블 구성하기

기본적으로 생각해야할 부분은 컬럼 기반 데이터베이스라는 점입니다. 이를 기억하고 수행해야 합니다. 1개 필드를 프라이머리 키(파티션 키)로 생성한 테이블 cqlsh:cory> create table log1(uid int, machine varchar, log_time timestamp, log varchar, primary key(uid)); - uid : int - machine : varchar - log_time : timestmp - log : varchar primary key이자 partition key는 uid로 설정 1) 데이터 insert cqlsh:cory> insert into log1(uid, log, log_time, machine) values(1,'gg',toTimestamp..

couchbase 카프카 싱크 커넥트 사용 방법

카프카 커넥트는 카프카 클러스터와 기타 데이터베이스간 파이프라인을 반복적으로 만드는데 특화되어 있습니다. 카프카 커넥터는 파이프라인의 구현체 인데요. 싱크 커넥터와 소스 커넥터로 이루어져 있습니다. 여기서는 카우치 베이스싱크 커넥터를 살펴봅니다. 카우치베이스 싱크 커넥터는 카프카의 토픽을 카우치베이스로 저장 로직이 담긴 커넥터입니다. 카우치베이스 싱크 커넥터는 at least once 전달을 지원하며 중복이 발생했을 경우에는 재입수가 필요할 수도 있습니다. 카프카 싱크 커넥터를 사용하려면 깃허브 레포지토리에 있는 배포판을 다운받아서 커넥터에 포함시켜 사용할 수 있습니다. - 카우치베이스 커넥터 깃헙 : https://github.com/couchbase/kafka-connect-couchbase - 카우..

빅데이터/Kafka 2021.10.29
couchbase 따라하기(in mac)

카우치베이스는 도커 이미지를 활용하여 실행할 수 있습니다. 맥에서 도커 이미지를 사용하기 위해 podman을 설치하고 상용합니다. podman : https://podman.io/ Podman 16 Oct 2021 » Why can't I use sudo with rootless Podman? So why can’t I use sudo with rootless Podman? Matt Heon explains why and how you can safely work around the “need” if you have it in a recent blog post on the Red Hat Enable Sysadmin site, Why podman.io 1) podman 설치 $ brew install po..

빅데이터/nosql 2021.10.29
[번역]NVIDIA에서 정의하는 MLOps

원문 : https://blogs.nvidia.com/blog/2020/09/03/what-is-mlops/ What is MLOps? Machine learning operations are best practices for businesses to run AI successfully. blogs.nvidia.com MLOps란 무엇인가? MLOps(Machine learning operations)는 AI를 통해 비즈니스 발전을 도와주는 소프트웨어 제품들과 클라우드 서비스입니다. MLOps는 익숙하지 않지 않은 단어이지만, 기업의 AI를 성공시키기 위한 두 단어로 이루어진 용어이다. Machine learning operation을 줄인 용어인 MLOps는 비즈니스에서 AI를 성공적으로 적용시키기 위..

빅데이터 2021.09.29
[번역]넷플릭스에서 데이터를 찾는 방법, Data Explorer 소개

원문 : https://netflixtechblog.com/exploring-data-netflix-9d87e20072e3 Exploring Data @ Netflix By Gim Mahasintunan on behalf of Data Platform Engineering. netflixtechblog.com 어느 조직이든 빠르게 성장하는 가운데 다양한 데이터를 어떻게 저장하고 사용할지 결정하는 것은 매우 어려운 일이다. 넷플릭스에서는 스트림 데이터를 쉽게 사용할 수 있는 툴을 개발하고 활용하고 있다. 이번 포스트를 통해 Netflix Data Explorer 툴을 소개하게 되어 매우 기쁘다. Data Explorer는 엔지니어들에게 카산드라, 다이너마이트, 레디스 저장소에 있는 데이터를 빠르고 안전하게..

빅데이터 2021.09.22
카프카 스트림즈에서 stateful window 처리를 다루는 방법 그리고 커밋타이밍

카프카 스트림즈는 비상태기반(stateless), 상태기반(stateful) 처리를 지원하는 다양한 메서드를 제공합니다. 스트림즈DSL을 통해 구현할 수도 있고 또는 프로세서API를 사용해서 직접 구현하는 방식도 있습니다. 이 포스팅에서는 스트림즈DSL을 활용하여 상태기반 데이터 처리할 때 어떻게 input, output이 동작하는지 설명합니다. 카프카 스트림즈의 스트림즈DSL에서 window function은 4가지가 있습니다. - 텀블링 윈도우 - 세션 윈도우 - 슬라이딩 윈도우 - 호핑 윈도우 이 중 가장 텀블링 윈도우에 대해 살펴볼건데요. 텀블링 윈도우는 특정 사이즈의 윈도우가 서로 다른 윈도우와 겹치지 않게 지속되는 시간 단위 윈도우를 뜻합니다. 다음은 텀블링 윈도우 예시 사진입니다. 레코드의 ..

빅데이터/Kafka 2021.09.08
[번역]마틴파울러의 테스트 피라미드

원문 : https://martinfowler.com/bliki/TestPyramid.html bliki: TestPyramid Write most of your tests at a low level (unit tests) with a few broad-stack tests, eg via UI. UI tests tend to be fragile and slow. martinfowler.com 테스트 피라미드는 자동화된 테스트를 어떻게 효율적으로 만들지 고민하기 위해 만들어진 형태입니다. 여기서 중요한 점은 고수준 테스트를 만들기 보다는 최대한 저수준의 유닛테스트를 많이 만들어야 한다는 점입니다. 자동화된 테스트는 대부분 유저 인터페이스를 통한 테스트를 뜻해 왔습니다. 만들어진 애플리케이션이 있다면 특정한..

카프카 스트림즈로 schedule operation 수행하기(번역)

원문 : https://kafka-tutorials.confluent.io/kafka-streams-schedule-operations/kstreams.html 카프카 스트림즈는 토픽의 데이터를 읽어 상태기반, 비상태기반 처리를 하는 스트리밍 라이브러리입니다. 오늘은 컨플루언트에서 카프카 스트림즈가 스케쥴링 동작을 어떻게 수행하는지에 대한 코드 예시를 번역하였습니다. 1. 프로젝트 초기화 신규 디렉토리를 생성합니다. $ mkdir kafka-streams-schedule-operations && cd kafka-streams-schedule-operations 2. 컨플루언트 플랫폼 가져오기 Dockerfile을 통해 데이터 생성기를 먼저 가져옵니다. 하기 Dockerfile은 Dockerfile-con..

빅데이터/Kafka 2021.07.23
프로메테우스 지표 rate와 increase의 차이점

프로메테우스로 다음과 같은 지표들을 쌓을 때가 있습니다. http_request_count_total{method="POST",router="/"} 10 http_request_count_total{method="POST",router="/"} 15 http_request_count_total{method="POST",router="/"} 20 http_request_count_total{method="POST",router="/"} 40 http_request_count_total{method="POST",router="/"} 45 http_request_count_total{method="POST",router="/"} 60 상기와 같은 지표는 http request때 마다 counter를 1씩 in..

빅데이터 2021.07.02
프로메테우스 promQL에서 without 또는 by 사용시 주의사항

프로메테우스 promQL을 사용할 경우 Aggregation Operators와 함께 사용하는 경우가 빈번하다. - sum (calculate sum over dimensions) - min (select minimum over dimensions) - max (select maximum over dimensions) - avg (calculate the average over dimensions) - stddev (calculate population standard deviation over dimensions) - stdvar (calculate population standard variance over dimensions) - count (count number of elements in the..

빅데이터 2021.07.01
prometheus 자바 클라이언트로 지표 수집하기

프로메테우스는 지표를 모니터링하기에 적합합니다. 지표를 모니터링하면 애플리케이션 동작에 대한 상태변화를 즉각적으로 알고 대처할 수 있습니다. 자바애플리케이션에서 프로메테우스로 지표를 보내는 방법은 크게 3가지 방법이 있습니다. - JMX 익스포터 - PUSH 게이트웨이 - 자바 클라이언트 여기서는 자바 클라이언트를 사용하는 방법을 설명합니다. https://github.com/prometheus/client_java prometheus/client_java Prometheus instrumentation library for JVM applications - prometheus/client_java github.com 우선 build.gradle에 관련 라이브러리를 추가합니다. dependencies {..

빅데이터 2021.06.29
카프카 스트림즈에서 SlidingWindow에 대한 고찰

카프카 스트림즈는 상태기반/비상태기반 데이터 처리에 효과적인 라이브러리입니다. 특히 상태 기반 처리에 큰 도움이 되는데 여러 상태 기반 처리 중 SlidingWindow에 대해 살펴보고자 합니다. SlidingWindow는 window종류 중 하나로서 일정 시간동안의 데이터들의 집합에 대해 연산을 하는 것을 뜻합니다. 마치 베란다의 슬라이딩 윈도우가 옆으로 지나가는 듯한 모습과 비슷합니다. 카프카 스트림즈에서는 aggregation연산 또는 join연산을 할 때 window를 적용할 수 있는데 총 4개의 윈도우를 지원합니다. 각 윈도우 이름과 특징은 다음과 같습니다. - 호핑 윈도우 : 고정적인 사이즈의 윈도우, 윈도우끼리 겹치는 부분이 있음 - 텀블링 윈도우 : 고정적인 사이즈의 윈도우, 윈도우끼리 겹..

빅데이터/Kafka 2021.06.25
아파치 드루이드 tranquility로 데이터 추가시 MessageDroppedException 이슈

옛날버전(0.9이하)에서 외부 실시간 데이터를 드루이드에 넣기 위해서는 tranquility를 사용해야 했습니다. tranquility-core를 사용하여 데이터를 넣을 때 아래와 같은 오류를 경험할 때가 있습니다. com.metamx.tranquility.tranquilizer.MessageDroppedException: Message dropped MessageDroppedException는 줄여서 MDE라고도 부르는데요. 이 오류가 발생하게 되는 원인은 크게 두가지라고합니다. 원인1 : 이벤트의 timestamp가 window period 외부에 있을 경우 원인2 : 태스크 또는 오버로드와 통신에 이슈가 있는 경우(within your firehoseRetryPeriod or indexRetryPe..

빅데이터 2021.06.24
카프카 스트림즈 join 사용시 메시지 키 접근하기

카프카 스트림즈에서 KStream 또는 KTable을 사용하여 join을 사용할 때가 있습니다. KStream completedEventsStream = leftStream. join( rightStream, (leftValue, rightValue) -> leftValue + rightValue, JoinWindows.of(windowDuration) ); 상기와 같이 leftStream과 rightStream 2개의 스트림데이터를 조인하는 것은 아주 일반적인 조인 사용 예시인데요. 여기서 lambda 식을 보면 알 수 있다 싶이 leftValue와 rightValue에만 접근이 가능합니다. 즉, 2개의 토픽에서 조인이 되는 조인 key에 대해서는 접근이 불가능하다는 것을 알 수 있습니다. 2개의 토픽..

빅데이터/Kafka 2021.06.21
Cannot get state store TOPIC because the stream thread is STARTING, not RUNNING 에러 해결

KTable을 Materialized View로 사용할 경우 아래와 같은 에러가 발생할 때가 있습니다. Exception in thread "Timer-0" org.apache.kafka.streams.errors.InvalidStateStoreException: Cannot get state store address because the stream thread is STARTING, not RUNNING at org.apache.kafka.streams.state.internals.StreamThreadStateStoreProvider.stores(StreamThreadStateStoreProvider.java:81) at org.apache.kafka.streams.state.internals.Wr..

빅데이터/Kafka 2021.06.16