본문 바로가기

전체 글

(217)
파티셔닝 [데이터 중심 애플리케이션 설계 6장] 파티셔닝 확장성 (복제와 비슷) 키-값 데이터 파티셔닝 키 범위 기준 파티셔닝: 특정 알파벳끼리 한 파티션에 넣는 형식 범위 스캔에 유리 특정 기준으로 검색 시, 핫스팟 유발 키의 해시값 기준 파티셔닝: 키를 해시 함수로 변환하여 분산시키는 파티셔닝 파티션끼리 균일하게 분산시키는 데 좋다. 범위 질의를 효과적으로 수행할 수 없다. 카산드라에서는 키의 첫부분만 해싱하고 나머지 컬럼은 SS테이블로 색인을 사용하여 첫번째 컬럼만 고정하면 나머지 컬럼에는 범위 스캔을 효율적으로 하게 한다. 핫스팟 완화: 보통 하나의 키에 데이터가 많은 경우 애플리케이션에서 해결: 키에 임의의 숫자등을 붙여서 분산 시킨다. → 읽기에 오버헤드가 생겨 일부 키에만 적용하는 게 좋다. 파티셔닝과 보조 색인 문서 기반 보조 색인 파티..
복제 [데이터 중심 애플리케이션 설계 5장] 동기식과 비동기식 동기식: 안정성이 높으니 느림 비동기식: 내구성이 약하기 때문에 나빠보이지만 분산을 위해선 어쩔 수 없는 선택 장애 복구 리더가 장애인 지 판단 → 새로운 리더 선출 → 새로운 리더 사용 리더가 변경되면서 그 동안의 쓰기를 수신 하지 못 하는 문제 발생 스플릿 브레인: 리더가 서로 자신이 리더인 줄 아는 상황 복제 로그 구문 기반 복제: 실제 사용된 insert, update, delete 등 그대로 사용 간편하지만 비결정적인 함수 문제나 성능 등에 영향이 있음 쓰기 전 로그(WAL) 저수준의 데이터를 기술함으로 엔진이 밀접하게 엮여 버전 등에 의존성이 높음 논리적 (로우 기반) 로그 엔진과의 분리를 위해 다른 로그 형식 사용 (RDB) 삽입된 로우는 전체, 삭제된 로우는 식별값, 갱신..
부호화와 발전 [데이터 중심 애플리케이션 설계 4장] 데이터 부호화 형식 부호화(직렬화, 마샬링): 인메모리 표현을 바이트열로 변환하는 작업 복호화(역직렬화, 파싱, 언마샬링): 바이트열을 표현으로 변환하는 작업 언어별 형식: 언어에서 제공하는 만큼 편리하지만, 특정 언어에 적합한 형식으로 다른 언어나 상위/하위 호환 등에 문제가 발생한다. JSON, XML: 수를 표현할 때 애매한 문제가 있다, 유니코드는 잘 지원하나 바이너리는 잘 지원하지 않아서 base64를 사용하게 된다. 이진부호화: json의 경우 여러가지 이진 부호화가 있었지만 널리 채택되진 못 했고, 대부분 성능상의 큰 이점은 없음 스리프트(Thrift)와 프로토콜 버퍼(Protocol Buffers) 같은 원리를 기반으로 함. 이름 대신 필드 태그를 사용함 required의 경우 이진 데이터..
저장소와 검색 [데이터 중심 애플리케이션 설계 3장] 로그 구조 저장소: 쓰기에 좋은 구조 LSM 트리: SS 테이블을 여러개로 구성된 인덱스 구조 SS 테이블: merge sort 방식으로 순차적으로 쌓인 키를 컴팩션 시 정렬하여 저장 순차적으로 write하기 때문에 속도가 빠르다. 페이지를 사용하지 않아 오버헤드가 적어 압축률이 좋다. 컴팩션 과정이 있기 때문에 성능에 영향을 줄 수가 있다. 페이지 지향 저장소: 읽기에 좋은 구조 B 트리: 고정 크기의 블록이나 페이지로 나누고 한 페이지에서 다음 페이지를 참조한다. B 트리의 쓰기는 디스크 상의 페이지를 덮어쓴다. 이것은 문제 발생 시 위험한 동작으로 WAL(Write-ahead log)를 추가해서 문제 발생 이후에도 복구가 가능하도록 한다. (copy-on-write scheme 방식도 있음) WAL..
[Go] http request header에서 Host 값 변경하기 request, err := http.NewRequest(http.MethodPost, url, input) request.Header.Set("Content-Type", "application/json") request.Header.Set("Host", host)보통 http request를 보낼 때 header를 조정해야 하는 경우가 있다. go 에서 전송을 하는데, 자꾸 응답이 정상적으로 오지 않았다. Host를 변경해야 해서 위처럼 변경한 상태이다. 실제로 코드 상에서 response와 request에서 header의 Host값이 변경된 값으로 보인다. 하지만 전송 시점에 변경되는 것으로 보인다. request.Host = host그래서 위처럼 직접 변경을 해줘야 된다.
[Mac] shift - space 한영 변환 (xcode 설치 안 하고) ~/Library/Preferences/com.apple.symbolichotkeys.plist 파일에서 60 > value > parameters > 3번째 값을 131072로 변경하면 된다. 근데 plist파일을 일반적으로 수정할 수가 없어서 xcode나 plistedit을 설치하라고 한다. 근데 xcode는 너무 무겁고.. PlistEdit은 trial 버전이라 굳이 이렇게까지 해야하나 싶다. 찾아보니 기본적으로 제공되는 유틸이 있다. plutil -convert json ~/Library/Preferences/com.apple.symbolichotkeys.plist plutil -convert xml ~/Library/Preferences/com.apple.symbolichotkeys.plist ..
[Spark/hdfs] 데이터노드 디스크 확보 에러 발생 An error occurred while calling None.org.apache.spark.api.java.JavaSparkContext. : org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /user/.sparkStaging/application_1681262849232_2058/hive-site.xml could only be written to 0 of the 1 minReplication nodes. There are 1 datanode(s) running and 1 node(s) are excluded in this operation. hdfs 용량 확인 hdfs dfs -df -h hdfs 로그 삭제 hdfs ..
[Spark/Yarn] 특정 실행중인 job(애플리케이션) 죽이기 1. 실행 중인 job 확인 yarn application -list yarn application -appState RUNNING -list | grep "applicationName" 2. 실행 중인 job 죽이기 yarn application -kill application_1681262849232_2072