분류 전체보기
-
[몽고디비] Query PlansSoftware Development/Database 2023. 5. 9. 14:58
https://www.mongodb.com/docs/manual/core/query-plans/ Query Plans — MongoDB Manual Docs Home → MongoDB Manual For a query, the MongoDB query optimizer chooses and caches the most efficient query plan given the available indexes. The evaluation of the most efficient query plan is based on the number of "work units" (works) performed by www.mongodb.com 위의 사이트에서 참고하였습니다. 쿼리 성능이 제대로 안나오는 원인은 인덱스랑 관련..
-
[Spark] Spark JDBC와 하이브 연동 이슈들.Software Development/Data Engineering 2023. 5. 5. 11:53
Spark JDBC로 RDB의 데이터를 가져올 수 있음. 이때 성능 이슈가 있을 수 있음. fetchsize 옵션 추가해서 사이즈를 키워볼 것. partition 옵션을 사용하여 병렬로 가져올 수 있도록 쿼리 짤 것. Spark JDBC로 데이터 가져올 때, Action 한 번만 호출하도록 신경쓸 것. Cache가 좋은 대안. Spark JDBC로 가져온 데이터를 Hive metastore와 연동하는 경우가 많음. 이때 스키마 이슈가 발생할 수 있음. saveAsTable로 Overwrite하면, table drop 후 create 함. 이때 기존 스키마 전부 날라감. 스키마 날라가도, 데이터는 잘 저장될 수 있음. spark.sql로 읽는다면 큰 문제없음. 그러나 여기에 하이브가 붙는다면, 하이브가 읽..
-
[Hive] 하이브 테이블에 Spark으로 적재 시, HQL로 읽을 때, 값이 Null로 조회되는 이슈.Software Development/Data Engineering 2023. 5. 2. 16:58
Spark 데이터프레임을 하이브 테이블에 저장할 때, 미리 생성한 테이블이 없을 경우(CREATE TABLE로 미리 테이블을 만들지 않았을 경우), 메타데이터를 spark에서 제공하는 값으로 업데이트를 한다. SHOW TABLE TBLPROPERTIES tbl_name; 로 테이블 속성을 확인해보면, 하이브에서 테이블을 만들때와 다른 속성이 조회될 것이다. 업로드된 값을 SparkSQL로는 조회가 잘됐는데, HiveQL로 조회하면, 대부분의 값이 null로 반환되었다. 값이 존재하는 것은 맞는데, Spark으로는 잘 읽어오고 Hive로는 잘 읽어오지 못하는 상황이다. 나의 문제와 비슷한 오류를 겪는 글을 발견했다. 발생한 원인은 다음과 같다고 한다. Hive queries output NULL value..
-
[MongoDB] createIndex commitQuorumSoftware Development/Database 2023. 3. 31. 23:00
몽고디비 인덱스 생성시에 commitQuorum 옵션이 있다. 기본값은 'votingMembers'인데, 데이터 보유 노드 전체에 인덱스를 생성해야 결과를 출력한다. 만약 데이터 보유 노드 중 한대가 RECOVERING 상태이고 commitQuorum: votingMembers 옵션으로 createIndex를 생성하면 결과를 반환하지 않는다. 결과를 반환하지 않는다고 해서 인덱스가 생성되지 않은 것은 아니다. 프라이머리노드 및 살아있는 세컨더리 노드는 인덱스가 생성됐을 수 있다. 그렇기 때문에 createIndex시에 응답이 필요한 경우는, commitQuorum옵션을 majority로 설정하는 것이 좋다. 만약 노드중 한대가 RECOVERING일 때, commitQuorum옵션을 votingMember..
-
-
[MongoDB] 재해복구 시스템을 위한 몽고디비 노드 설정.Software Development/Database 2023. 3. 10. 20:30
재해복구 시스템을 위해서는 다른 Zone 또는 Region에 클러스터를 배포해야 한다. 예를 들어, 데이터센터 A와 데이터센터 B가 있을 경우, A, B에 각각 2~3대의 노드를 배포하는 방식으로 동작한다. 몽고디비는 프라이머리 노드 선출을 위해 노드의 개수를 홀수로 설정하는 것을 권장한다. 만약 A, B에 2대 2대가 있다면, 4대의 노드로 짝수의 노드이기 때문에 해당 권장사항을 따르지 않는다. 이를 해결하기 위해서, A에 3대 B에 2대를 설정하여 홀수개의 노드로 해당 권장사항을 충족할 수 있다. 그런데 위의 방식은 문제점이 존재한다. 만약 A 데이터센터가 정전, 네트워크 이슈 같은 이유로 3대가 사용이 불가능하게 된다면 어떻게 될까? 5대의 노드 중에 총 B 데이터 센터의 2대의 노드만 살아있게 된..
-
[만들면서 배우는 클린 아키텍처] 정리.Software Development/Backend 2023. 2. 25. 14:52
이 글은 만들면서 배우는 클린 아키텍처 책을 읽고 간단히 정리했습니다. 자세한 내용은 책을 통해서 확인하실 수 있습니다. http://www.yes24.com/Product/Goods/105138479 만들면서 배우는 클린 아키텍처 - YES24 우리 모두는 낮은 개발 비용으로 유연하고 적응이 쉬운 소프트웨어 아키텍처를 구축하고자 한다. 그러나 불합리한 기한과 쉬워보이는 지름길은 이러한 아키텍처를 구축하는 것을 매우 어렵게 www.yes24.com 1. 계층형 아키텍처의 문제는 무엇일까? 계층형 아키텍처는 데이터베이스 주도 설계를 유도한다 웹 계층은 도메인 계층에 의존하고, 도메인 계층은 영속성 계층에 의존하기 때문에 자연스레 데이터베이스에 의존하게 된다 데이터베이스 중심적인 아키텍처가 만들어지는 가장 ..
-
[Jenkins] jenkins.plugins.publish_over.BapPublisherException: Failed to connect and initialize SSH connection Message [Auth fail]Software Development/Ops 2023. 1. 16. 15:34
우분투 22.04에 젠킨스를 통해서 배포(Publish over SSH)하려 했는데, 제목과 같은 에러가 발생했다. 원인은 22.04에서 부터 openssh가 8.8 이상이 설치된다. openssh 8.8 버전부터 SHA-1 해시 알고리즘 사용하는 RSA 미지원으로 ssh 연결이 실패한 것이다[1]. ECDSA 사용하면 해결 가능하단다. 보안적이 이슈라 ECDSA 사용이 권장되지만, 임시방편으로 두줄을 추가해서 RSA로 접근하는 방식을 허용할 수 있다[2]. # /etc/ssh/sshd_config 수정. PubkeyAuthentication yes PubkeyAcceptedKeyTypes +ssh-rsa 수정 후 재시작하면 된다. sudo service sshd restart [1] https://os..