Schema Registry의 필요성 다음의 경우에 Consumer에 에러가 발생가능 Producer가 bad data를 보낼 경우 field 명이 변경될 경우 data format이 변경될 경우 만약 카프카 브로커가 메시지를 검증하면 안될까? 라고 생각할 수 있다. 하지만 다음의 카프카의 장점을 없애버린다. Kafka는 CPU...
Cache,Persist
Spark DataFrame Cache, Persist Spark Cache,Persist는 잡의 퍼포먼스를 개선하기위해 반복적이고 상호작용이 많은 spark 어플리케이션에 대해서 DataFrame/Dataset을 최적화 하는 기술이다. cache() 와 persist() 함수를 사용하여, spark은 데이터 프레임 중간 결과를 저장하는 최적화 메...
Spark Memory Architecture
Spark Legacy Memory Architecture Executor worker node 에서 수행되는 Spark application의 JVM process이다. 여러 스레드로 task들을 수행하며 관련있는 데이터 파티션들을 유지한다. Executor Memory 구조 YARN에 10gb의 executor을 워커노드상에서 요청할때,...
Pipfile
Pipfile 프로젝트 의존성을 관리하기 위해 Pipenv virtual environment에 의해 사용되는 dedicated file python_version 파라미터는 pipenv 환경을 생성했을때 명시한 base interpreter 버전을 의미한다. packages는 프로젝트에 필요한 패키지 리스트를 명시할때 사용한다.
[Trouble Shooting] cannot resolve column(numeric column name) in Spark Dataframe
다음과 같은 스키마가 있다고 하자. scala> data.printSchema root |-- 1.0: string (nullable = true) |-- 2.0: string (nullable = true) |-- 3.0: string (nullable = true) 이 경우 다음 라인을 실행하면 에러가 난다. scala> d...
중첩된 schema flattening하기
def flattenSchema(schema: StructType, prefix: String = null): Array[Column] = { schema.fields.flatMap(f => { val colName = if (prefix == null) f.name else (prefix + "." + f.name) ...
Scala return
Scala에서는 return 키워드가 없다면 마지막 expression이 return value로 간주된다. def f() = { if (something) "A" else "B" } 위의 코드의 경우 리턴타입은 String이 된다. def f() = { if (something) "A" else "B...
Avro vs Parquet
Apache Avro vs Parquet Apache Avro 는 remote procedure call과 data serialization framework 이고 Apache Hadoop project중 개발되었다. type,protocol을 정의하는데 JSON을 사용하고 compact binary format으로 데이터를 직렬화한다. ro...
RDDs vs DataFrames vs Datasets
Resilient Distributed Dataset(RDD) RDD는 데이터의 immutable distributed collection, 클러스터의 노드들에 분할되어있고 병렬적으로 처리됨. 여러 분산 노드에 걸쳐서 저장되는 변경이 불가능한 데이터(객체)의 집합으로 각각의 RDD는 여러개의 파티션으로 분리가 됩니다. 즉, 스파크 내에 저장된 데이터...
HDFS Connector 2
HDFS 2 Sink Connector 다양한 포맷의 HDFS 2.x 파일로 카프카 토픽 데이터를 저장할수 있는 카프카 커넥터 HiveQL로 쿼리할수 있도록 제공 커넥터는 주기적으로 카프카로부터 데이터를 poll하고 HDFS에 쓴다. 카프카 토픽의 데이터는 제공된 partitioner의 의해 분할되고 chun...