마인드 맵 갤러리 빅데이터 지식 포인트 23개 및 인터뷰 요약(1)
Java 기본 사항을 포함한 간단한 템플릿, 하둡, 하이브, 데이터웨어 하우스 이론, 임팔라, 데이터 레이크 이론 및 기타 콘텐츠.
2024-01-18 15:05:07에 편집됨이것은 (III) 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제에 대한 마인드 맵이며, 주요 함량은 다음을 포함한다 : 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제 (HIF-PHI)는 신장 빈혈의 치료를위한 새로운 소형 분자 경구 약물이다. 1. HIF-PHI 복용량 선택 및 조정. Rosalasstat의 초기 용량, 2. HIF-PHI 사용 중 모니터링, 3. 부작용 및 예방 조치.
이것은 Kuka Industrial Robots의 개발 및 Kuka Industrial Robot의 모션 제어 지침에 대한 마인드 맵입니다. 주요 내용에는 쿠카 산업 로봇의 역사, 쿠카 산업 로봇의 특성, 쿠카 산업 로봇의 응용 분야, 2. 포장 프로세스에서 쿠카 로봇은 빠르고 일관된 포장 작업을 달성하고 포장 효율성을 높이며 인건비를 줄입니다. 2. 인건비 감소 : 자동화는 운영자에 대한 의존성을 줄입니다. 3. 조립 품질 향상 : 정확한 제어는 인간 오류를 줄입니다.
408 컴퓨터 네트워크가 너무 어렵습니까? 두려워하지 마세요! 나는 피를 구토하고 지식 맥락을 명확히하는 데 도움이되는 매우 실용적인 마인드 맵을 분류했습니다. 컨텐츠는 매우 완전합니다. 네트워크 아키텍처에서 응용 프로그램 계층, TCP/IP 프로토콜, 서브넷 디비전 및 기타 핵심 포인트에 이르기까지 원칙을 철저히 이해하는 데 도움이 될 수 있습니다. 📈 명확한 논리 : Mindmas 보물, 당신은 드문 기회가 있습니다. 서둘러! 이 마인드 맵을 사용하여 408 컴퓨터 네트워크의 학습 경로에서 바람과 파도를 타고 성공적으로 해변을 얻으십시오! 도움이 필요한 친구들과 공유해야합니다!
이것은 (III) 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제에 대한 마인드 맵이며, 주요 함량은 다음을 포함한다 : 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제 (HIF-PHI)는 신장 빈혈의 치료를위한 새로운 소형 분자 경구 약물이다. 1. HIF-PHI 복용량 선택 및 조정. Rosalasstat의 초기 용량, 2. HIF-PHI 사용 중 모니터링, 3. 부작용 및 예방 조치.
이것은 Kuka Industrial Robots의 개발 및 Kuka Industrial Robot의 모션 제어 지침에 대한 마인드 맵입니다. 주요 내용에는 쿠카 산업 로봇의 역사, 쿠카 산업 로봇의 특성, 쿠카 산업 로봇의 응용 분야, 2. 포장 프로세스에서 쿠카 로봇은 빠르고 일관된 포장 작업을 달성하고 포장 효율성을 높이며 인건비를 줄입니다. 2. 인건비 감소 : 자동화는 운영자에 대한 의존성을 줄입니다. 3. 조립 품질 향상 : 정확한 제어는 인간 오류를 줄입니다.
408 컴퓨터 네트워크가 너무 어렵습니까? 두려워하지 마세요! 나는 피를 구토하고 지식 맥락을 명확히하는 데 도움이되는 매우 실용적인 마인드 맵을 분류했습니다. 컨텐츠는 매우 완전합니다. 네트워크 아키텍처에서 응용 프로그램 계층, TCP/IP 프로토콜, 서브넷 디비전 및 기타 핵심 포인트에 이르기까지 원칙을 철저히 이해하는 데 도움이 될 수 있습니다. 📈 명확한 논리 : Mindmas 보물, 당신은 드문 기회가 있습니다. 서둘러! 이 마인드 맵을 사용하여 408 컴퓨터 네트워크의 학습 경로에서 바람과 파도를 타고 성공적으로 해변을 얻으십시오! 도움이 필요한 친구들과 공유해야합니다!
빅데이터 지식 포인트 및 면접 요약
자바 기초
기본 데이터 유형
바이트, 부울 1바이트, char, 짧은 2바이트, int, float 4바이트, 긴, 두 배 8바이트
이상
던질 수 있는
오류
스택 오버플로와 같은 치명적인 오류, 제어할 수 없는 프로그램
예외
런타임 예외
널 포인터 예외, 배열 첨자가 범위를 벗어났습니다.
컴파일 시간 예외(런타임이 아닌 예외)
IOException, ClassNotFoundException
다형성
데이터 구조
공통자료구조(8종)
정렬
쿼리와 수정은 빠르고, 추가와 삭제는 느리다
저장 간격이 연속적이고, 메모리 사용량이 심각하며, 공간 복잡도가 크다.
장점: 배열이 연속적이므로 무작위 읽기 및 수정이 빠르다(강력한 무작위 접근과 빠른 검색 속도)
단점: 데이터를 삽입한 후 이 위치 뒤의 데이터를 메모리에서 이동해야 하고 크기가 고정되지 않아 동적으로 쉽게 확장할 수 없기 때문에 삽입 및 삭제가 비효율적입니다.
연결리스트
빠른 추가 및 삭제, 느린 검색
저장 공간이 분리되어 있고, 점유된 메모리가 느슨하며, 공간 복잡도가 작습니다.
장점: 빠른 삽입 및 삭제, 높은 메모리 활용도, 고정된 크기 없음, 유연한 확장
단점: 무작위로 검색할 수 없고 매번 처음부터 시작하며 쿼리 효율성이 낮음
해시 테이블
추가, 삭제, 검색은 빠르고, 데이터 해싱은 저장공간 낭비
대기줄
선입선출, 테일 삽입 및 상단 제거는 빠르지만 다른 액세스는 느립니다.
스택
선입, 후출, 상단 제거 및 삽입은 빠르지만 상단 요소를 제외한 다른 요소에 대한 액세스는 느립니다.
레드 블랙 트리
추가, 삭제, 검색 모두 빠르고, 알고리즘 구조가 복잡함(자세한 내용은 이진트리 참조)
이진 트리
추가, 삭제, 검색은 빠르지만 삭제 알고리즘의 구조가 복잡합니다.
시간 복잡도는 기껏해야 O(logn), 최악의 경우 O(n)입니다.
특수 이진 트리
완전 이진 트리
이진 트리의 수준 수가 K이고 노드 수가 (2^K-1)이면 완전 이진 트리입니다(다음 그림 참조).
하위 주제 1
완전 이진 트리
이진 트리의 레이어 수는 h 레이어이고, (1~h-1) 노드 수는 최대에 도달했으며, h 레이어의 모든 노드는 왼쪽에 집중되어 있습니다(다음 그림 참조).
이진 검색 트리
왼쪽 하위 트리의 값은 모두 루트 노드보다 작고, 오른쪽 하위 트리의 값은 모두 루트 노드보다 작습니다. (그림과 같이 작은 것부터 큰 것 순으로 정렬해야 합니다.) )
레드 블랙 트리
균형 이진 트리는 빈 트리이거나 왼쪽과 오른쪽 하위 트리 사이의 높이 차이가 1을 초과하지 않으며 왼쪽과 오른쪽 하위 트리 모두 균형 이진 트리입니다(그림 1 참조). 수치)
특징:
시간 복잡도
삽입, 삭제, 삽입의 최악의 시간 복잡도는 O(log N)입니다.
높이로그N
노드는 검은색 또는 빨간색입니다.
루트 노드는 검정색이어야 합니다.
노드가 빨간색이면 해당 하위 노드는 검정색이어야 합니다.
모든 노드에 대해 리프 노드로 가는 경로의 검정색 노드 수는 동일해야 합니다.
각 리프 노드(리프 노드는 NULL 포인터 또는 트리 끝에 있는 NULL 노드임)는 검정색입니다.
최적 이진 트리(허프만 트리)
트리의 가중치 경로 길이가 최소값에 도달함
B-트리
균형 잡힌 다중 경로 탐색 트리(탐색 경로가 2개 이상)는 이진 트리와 달리 다중 방향 트리 O(log n)입니다.
B-트리
데이터 순서를 유지하는 자체 균형 트리 데이터 구조이며 검색, 순차적 액세스, 삽입 및 삭제의 복잡성은 O(log n)이며 B-트리는 리프 노드에만 데이터를 저장하므로 일부 B-트리가 제거됩니다. 결함. 리프가 아닌 노드에는 실제 데이터가 아닌 인덱스만 저장됩니다. 데이터는 모두 리프 노드에 저장됩니다. O(로그인)
트리의 높이는 범위 검색을 지원합니다.
MySQL은 왜 B 번호를 사용합니까?
디스크 IO 감소 및 범위 조회 지원
B-트리와 B-트리의 차이점
1) B-트리의 모든 데이터는 리프 노드에 존재합니다. 2) B 트리의 리프 노드에는 범위 검색을 용이하게 하기 위해 양방향 포인터가 있으며 리프 노드의 데이터는 작은 것부터 큰 것까지 순차적으로 연결됩니다.
비트맵
저장 공간을 절약하고 복잡한 데이터 관계를 설명하는 것을 불편하게 만듭니다.
모으다
순회 컬렉션 문제
반복자를 사용하여 컬렉션을 순회하고 컬렉션의 개체를 변경(추가, 삭제, 수정)하는 경우 예외가 발생합니다.
수집
목록
배열목록
특징: 저장요소가 정돈되어 있고, 쿼리는 빠르고, 추가와 삭제는 느립니다.
기본 어레이가 구현되며 용량은 자동으로 증가할 수 있습니다. 기본 확장은 원래 용량의 1.5배입니다.
스레드로부터 안전하지 않습니다. 다중 스레딩은 권장되지 않습니다. 스레드로부터 안전한 ArrayList를 반환하려면 Collections.syncnizedArrayList(List l)를 사용하세요.
맨 아래 레이어에서는 Arrays.copyof()를 대량으로 호출하고 System.arraycopy()는 용량을 확장합니다.
벡터
기본 배열 구현은 동기화된 키워드, 스레드 안전 및 낮은 효율성으로 수정됩니다. 기본 초기 용량은 10이고 기본 확장 용량은 1배 증가합니다.
링크드리스트
이중 연결 리스트 구조 구현
쿼리가 느리고 추가 및 삭제가 빠릅니다.
LinkedList, ArrayList 및 Vector 간의 유사점과 차이점은 다음과 같습니다.
세트
SortedSet
트리세트
기본 레드-블랙 트리 구현, 정렬되지 않은 컬렉션, 스레드 안전성
해시세트
서브클래스: LinkedHashSet
HashSet은 HashMap으로 구현되므로 데이터 구조가 배열 연결 리스트 레드-블랙 트리이므로 null, 중복 없음, 무질서 및 안전하지 않은 멀티스레딩을 허용하며 해시 알고리즘에 따라 요소를 저장하고 검색, 삭제 및 높은 성능을 갖습니다. 성능에 액세스하려면 Collections.synchronizedHashSet()을 사용하여 스레드로부터 안전한 HashSet을 반환하세요.
요소는 반복자를 통해서만 액세스할 수 있습니다.
대기줄
지도
해시맵
해시맵
HashMap의 하위 계층은 배열, 연결 목록 및 레드-블랙 트리를 사용하여 구현됩니다.
배열의 체인에 있는 개체 수가 8개에 도달하면 체인은 레드-블랙 트리로 변환됩니다. 레드-블랙 트리의 노드가 6개 미만이면 연결 목록으로 변환됩니다.
Hash의 초기 기본 용량은 16입니다. HashMap의 저장 요소가 로드 팩터 * 현재 용량을 초과하면 용량이 원래 크기의 2배로 확장된 후 배열의 각 요소의 위치가 다시 계산됩니다.
스레드로부터 안전하지 않으므로 ConcurrentHashMap을 사용할 수 있습니다.
동시해시맵
jdk1.8
연결리스트, 레드-블랙 트리 노드 배열, CAS(낙관적 잠금) 동기화를 사용하여 구현됨
아강
linkedHashMap
해시테이블
아강
속성
스레드 안전성
전체 해시 테이블을 잠가서 스레드 안전성을 보장합니다. 이 방법은 스레드 안전성을 보장하지만 동시 실행은 비효율적입니다.
정렬된 지도
트리맵
디자인 패턴
싱글톤 모드, 3가지 공통 유형
지연 모드, 첫 번째 호출에서 인스턴스화됨
악당 모드, 클래스는 초기화될 때 자체적으로 인스턴스화되었으며 스레드로부터 안전합니다.
등록 모드
프록시 모드
정적 프록시
하위 주제 1
동적 프록시
jdk 동적 프록시
CGlib
팩토리 패턴
빌더 패턴
어댑터 모드
반복자 패턴
공통 카테고리
끈
문자열을 나타냅니다.
final로 수정된 문자열 클래스는 상속될 수 없으며 변경할 수 없는 문자 시퀀스를 나타냅니다.
String 객체의 문자 내용은 문자 배열 값[]에 저장됩니다.
문자열 상수가 상수와 결합되면 메서드 영역 상수 풀에 있게 되고, 상수 풀에 동일한 내용을 가진 상수가 없게 됩니다. 힙에 저장됩니다.
JVM
javac
자바 언어를 jvm이 인식할 수 있는 바이너리 파일로 컴파일하는 컴파일러
구성요소
JVM 메모리 파티션
프로그램 카운터
이는 작은 메모리 공간이며 현재 스레드에서 실행되는 코드를 나타냅니다. 카운터 값을 변경하면 실행해야 할 다음 바이트코드 명령이 선택되며 각 스레드에는 고유한 프로그램 카운터가 있습니다. 스레드 사이에 프로그램 카운터가 없습니다. 영향; 스레드가 Java 메소드를 실행하는 경우 OOM이 발생하지 않는 유일한 영역은 실행 중인 가상 머신 바이트코드 명령의 주소를 기록합니다. 비었다.
자바 가상 머신 스택
스레드 전용은 주로 지역 변수, 스택 프레임, 피연산자 스택, 동적 링크, 메소드 종료 및 기타 정보를 저장합니다.
네이티브 메소드 스택
운영 체제 클래스 라이브러리 호출
더미
스레드 공유, 기본적으로 모든 개체는 가비지 수집의 주요 영역인 Java 힙에 있습니다.
방법 영역
스레드 공유는 주로 클래스 정보, 상수, 정적 변수 및 컴파일된 코드 데이터를 저장합니다.
런타임 상수 풀
메소드 영역의 일부입니다. 리터럴 및 기호 참조 저장
멀티스레딩
프로그램
특정 작업을 완료하기 위해 특정 언어로 작성된 명령 집합, 즉 정적 코드 조각, 정적 객체
프로세스
프로그램을 한 번 실행하는 과정이나 실행 중인 프로그램은 그 자체의 생성, 존재, 소멸(생명주기) 과정을 갖는 역동적인 과정이다.
특징:
프로그램은 정적이지만 프로세스는 동적입니다.
프로세스는 시스템이 실행 중일 때 각 프로세스에 서로 다른 메모리 영역이 할당되는 가장 작은 자원 할당 단위입니다.
실
프로세스는 다시 프로그램의 실행 경로인 스레드로 세분화됩니다.
특징:
프로세스가 동시에 여러 스레드를 실행하는 경우 멀티스레딩을 지원합니다.
스레드는 예약 및 실행 단위 역할을 하며 각 스레드에는 독립적인 스택과 프로그램 카운터(pc)가 있으며 스레드 전환의 오버헤드가 작습니다.
프로세스의 여러 스레드는 동일한 메모리 단위/메모리 주소 공간을 공유합니다. -> 동일한 힙에서 개체를 할당하고 동일한 개체 및 변수에 액세스할 수 있습니다. 이는 스레드 간의 통신을 더욱 간단하고 효율적으로 만듭니다. 하지만 여러 스레드 간에 공유하면 보안 문제가 발생합니다.
병렬성과 동시성
평행한:
두 개 이상의 이벤트가 동시에 발생함
경쟁 상대:
두 개 이상의 사건이 동일한 시간 간격으로 발생합니다.
스레드 생성
실
Thread 클래스를 상속하고 run 메서드 구현을 재정의합니다. run 메서드의 코드는 Thread를 상속하는 하위 클래스를 인스턴스화하여 스레드가 Runnable 인터페이스를 호출할 수 있도록 합니다.
스레드 공통 방법
(1) void start(): 스레드를 시작하고 객체의 run() 메서드를 실행합니다. (2) run(): 스케줄링 시 스레드에 의해 수행되는 작업 (3) String getName(): 스레드의 이름을 반환합니다. (4) void setName(String name): 스레드 이름을 설정합니다. (5) static Thread currentThread(): 현재 스레드를 반환합니다. 이는 일반적으로 메인 스레드 및 Runnable 구현 클래스에 사용되는 Thread 하위 클래스에 있습니다. (6) static void Yield(): 스레드는 현재 실행 중인 스레드를 양보하고 일시 중지하여 우선순위가 같거나 높은 스레드에 실행 기회를 제공합니다. 대기열에 우선순위가 같은 스레드가 없으면 이 메서드를 무시합니다. (7) Join(): 특정 프로그램 실행 흐름에서 다른 스레드의 Join() 메서드가 호출되면 Join() 메서드에 의해 추가된 조인 스레드가 실행될 수 있을 때까지 호출 스레드가 차단됩니다. 처형도 당한다 (8) 정적 무효 수면(긴 밀리초): (지정 시간: 밀리초) 현재 활성 스레드가 지정된 시간 내에 CPU 제어를 포기하고 다른 스레드가 실행될 기회를 제공하며 해당 시간이 지나면 다시 대기열에 넣습니다. 위로. InterruptedException 발생 (9) stop(): 스레드 수명 주기를 강제로 종료합니다. 권장되지 않습니다. (10) boolean isAlive(): 스레드가 아직 살아 있는지 확인하기 위해 부울을 반환합니다.
스레드 우선순위:
스레드가 생성되면 상위 스레드의 우선순위를 상속받습니다.
낮은 우선순위는 예약될 가능성이 낮으며 우선순위가 높은 스레드 이후에 반드시 호출할 필요는 없습니다.
1. 스레드 우선순위 수준 MAX_PRIORITY: 10 MIN_PRIORITY: 1 NORM_PRIORITY:5 2. 관련 방법 getPriority(): 스레드 우선순위 값을 반환합니다. setPriority(int newPriority): 스레드의 우선순위를 변경합니다.
스레드 상태 Thread.State
새로운
준비가 된
달리다
차단하다
주사위
실행 가능
1) 하위 클래스를 정의하고 Runnable 인터페이스를 구현합니다. 2) 서브클래스의 Runnable 인터페이스에서 run 메소드를 다시 작성하십시오. 3) Thread 클래스의 매개변수 포함 생성자를 통해 스레드 객체를 생성합니다. 4) Runnable 인터페이스의 하위 클래스 객체를 Thread 클래스의 생성자에 실제 매개변수로 전달합니다. 5) Thread 클래스의 시작 메소드를 호출합니다. 스레드를 시작하고 Runnable 하위 클래스 인터페이스의 run 메소드를 호출합니다.
호출 가능
호출 가능은 ExecutorService를 사용하거나 FeatureTask의 매개변수로 실행될 수 있습니다.
공개 클래스 MyCallable은 Callable<T> {를 구현합니다. @우세하다 공개 T 호출()이 예외를 발생시킵니다. { // 여기서 호출할 수 있는 코드를 정의합니다. } } MyCallable myCallable = new MyCallable(); ExecutorService 실행자 = Executors.newSingleThreadExecutor(); Future<T> future = executor.submit(myCallable); T 결과 = future.get();
호출 가능<Process> 작업 = () -> { //비동기 작업 실행 런타임 런타임 = Runtime.getRuntime(); 프로세스 프로세스 = Runtime.exec("/Users/mac/Desktop/qc-java-runtime/src/main/java/com/qc/runtime/shell.sh"); 반품 과정; }; //호출 가능 항목을 FutureTask로 래핑 FutureTask<Process> future = new FutureTask<>(작업); //비동기 작업을 수행하기 위해 새 스레드를 시작합니다. 새로운 Thread(미래).start(); // 비동기 작업의 결과를 가져옵니다. 처리 결과 = future.get(); System.out.println(결과);
잠그다
동시 작업의 경우 두 작업이 동일한 리소스에 액세스하는 것을 방지하는 방법이 필요합니다(공유 리소스를 놓고 효과적으로 경쟁함). 이러한 충돌을 방지하는 방법은 작업에서 리소스를 사용할 때 리소스를 잠그는 것입니다. 리소스에 액세스하는 첫 번째 작업은 잠금이 해제될 때까지 다른 작업이 리소스에 액세스할 수 없도록 리소스를 잠가야 합니다. 잠금이 해제되면 다른 작업이 해당 리소스를 잠그고 사용할 수 있습니다.
동기화됨
― 어떤 객체든 동기화 잠금으로 사용될 수 있습니다. 모든 객체에는 자동으로 단일 잠금(모니터)이 포함됩니다. ― 동기식 메소드 잠금 : 정적 메소드(클래스명.class), 비정적 메소드(this) ― 동기화된 코드 블록: 직접 지정하며, 종종 this 또는 클래스 이름으로 지정되기도 합니다.class
이중 자물쇠
서로 다른 스레드는 서로에게 필요한 동기화 리소스를 점유하고 있으며 모두 상대방이 필요한 리소스를 포기하기를 기다리고 있어 교착 상태가 발생합니다.
교착 상태가 발생한 후에는 예외나 프롬프트가 발생하지 않지만 모든 스레드가 차단되어 계속할 수 없습니다.
잠금 해제
현재 스레드의 동기화 메소드 및 동기화 코드 블록의 실행이 종료됩니다.
현재 스레드가 동기화된 코드 블록 또는 동기화된 메서드에서 중단 및 반환을 만나 코드 블록 및 메서드의 지속적인 실행이 종료됩니다.
동기화된 코드 블록 또는 동기화된 메서드의 현재 스레드에서 처리되지 않은 오류 또는 예외가 발생하여 비정상 종료됩니다.
현재 스레드는 동기화 코드 블록과 동기화 메서드에서 스레드 객체의 wait() 메서드를 실행합니다. 현재 스레드는 일시 중지하고 잠금을 해제합니다.
네트워크 통신 프로토콜
OSI 모델(프로토콜)
모델이 너무 이상적이라 인터넷에 홍보가 안됐는데
OSI 계층화
애플리케이션 레이어
프리젠테이션 레이어
세션 레이어
전송 계층
네트워크 계층
데이터링크 계층
물리층
TCP/IP 모델(프로토콜)
사실상의 국제표준
TCP/IP 계층화
애플리케이션 레이어
전송 계층
네트워크 계층
물리적 데이터링크 계층
두 모델의 비교
데이터 캡슐화
데이터 해체
IP 및 포트
중요한 네트워크 전송 계층 프로토콜 UDP 및 TCP
UDP(사용자 데이터그램 프로토콜)
1. 연결을 설정하지 않고 데이터, 소스 및 대상을 데이터 패킷으로 캡슐화합니다. 2. 각 데이터그램의 크기는 64K로 제한됩니다. 3. 보내는 사람은 상대방의 준비 여부를 신경 쓰지 않고, 받는 사람은 수신 확인을 하지 않아 신뢰할 수 없습니다. 4. 방송 및 전송 가능 5. 데이터 전송 시 리소스를 해제할 필요가 없으며 오버헤드가 낮고 속도가 빠릅니다.
TCP(전송 제어 프로토콜)
1. TCP 프로토콜을 사용하기 전에 먼저 TCP 연결을 설정하여 데이터 전송 채널을 형성해야 합니다. 2. 전송하기 전에 "3방향 핸드셰이크" 방법이 사용되며 지점 간 통신이 안정적입니다. 3. 두 개의 애플리케이션 프로세스는 TCP 프로토콜(클라이언트와 서버)을 사용하여 통신합니다. 4. 연결 중에 많은 양의 데이터가 전송될 수 있습니다. 5. 전송이 완료된 후 설정된 연결을 해제해야 하므로 비효율적입니다.
3방향 핸드셰이크(연결 설정)
1. 클라이언트는 TCP 연결을 설정하기 위해 요청 메시지를 보냅니다. 이 메시지에는 전송 측에서 임의로 생성한 seq 시퀀스 번호가 포함되어 있으며 메시지의 SYN(동기화) 필드를 1로 설정하여 TCP 연결을 나타냅니다. . (SYN=1, seq=x, x는 무작위로 생성된 값입니다); 2. 서버는 클라이언트가 보낸 TCP 연결 요청 메시지에 응답합니다. 이 메시지에는 응답 측에서 임의로 생성한 seq 시퀀스 번호가 포함되어 있으며 SYN을 1로 설정하고 ACK 필드 값을 생성합니다. 전달된 시퀀스 번호 seq에 1을 추가하여 응답하면 클라이언트가 정보를 수신할 때 TCP 설정 요청이 확인되었음을 알 수 있습니다. (SYN=1, ACK=x 1, seq=y, y는 무작위로 생성된 값) 여기서 ack + 1은 누구와 연결이 되었는지 확인하는 것으로 이해될 수 있습니다. 3. 클라이언트는 서버가 보낸 TCP 설정 확인 요청을 받은 후 시퀀스 번호를 1씩 증가시키고, ACK 확인 요청에 다시 응답하며, 서버가 응답하기 위해 보낸 seq에 1을 추가합니다. (SYN=1, ACK=y 1, seq=x 1).
네 번 흔들기(연결 끊기)
1. 클라이언트는 TCP 연결 끊기를 요청하는 메시지를 보냅니다. 이 메시지에는 보낸 사람이 임의로 생성한 seq 시퀀스 번호가 포함되어 있습니다. 또한 메시지의 FIN 필드를 1로 설정하여 TCP 연결을 끊어야 함을 나타냅니다. 연결이 끊어졌습니다. (FIN=1, seq=x, x는 클라이언트에 의해 무작위로 생성됩니다); 2. 서버는 클라이언트가 보낸 TCP 연결 해제 요청 메시지에 응답합니다. 이 메시지에는 응답 측에서 임의로 생성한 seq 시퀀스 번호가 포함되어 있으며 ACK 필드의 값은 seq 시퀀스입니다. 클라이언트가 보낸 번호. 기본적으로 응답에 1을 추가하면 클라이언트가 정보를 수신하면 TCP 연결 해제 요청이 확인되었음을 알 수 있습니다. (FIN=1, ACK=x 1, seq=y, y는 서버에 의해 무작위로 생성됩니다); 3. 서버는 클라이언트의 TCP 연결 해제 요청에 응답한 후 즉시 TCP 연결을 끊지 않습니다. 서버는 먼저 A로 전송된 모든 데이터가 연결 해제되었는지 확인하고 나면 FIN 필드를 확인합니다. 응답 메시지의 값은 1로 설정되고 임의의 시퀀스 번호가 생성됩니다. (FIN=1, ACK=x 1, seq=z, z는 서버에 의해 무작위로 생성됩니다); 4. 클라이언트는 서버로부터 TCP 연결 끊기 요청을 받은 후 무작위로 생성된 seq 필드와 ACK 필드를 포함하여 서버의 연결 끊기 요청에 응답합니다. 따라서 ACK 필드는 서버의 TCP 연결 끊기 요청 seq에 1을 추가합니다. 서버에서 요청한 확인 응답을 완료합니다. (FIN=1, ACK=z 1, seq=h, h는 클라이언트에 의해 무작위로 생성됩니다) 이 시점에서 TCP 연결 해제의 4파장 프로세스가 완료됩니다.
하위 주제 3
네트워크 소켓
IP와 포트의 조합이 소켓을 형성합니다.
네트워크 통신의 본질: 소켓 간 통신
분류
스트림 소켓
TCP를 이용한 안정적인 바이트 스트림 서비스 제공
TCP 기반 소켓 프로그래밍 단계
고객
1. 소켓 생성: 지정된 서버의 IP 주소 또는 포트 번호를 기반으로 소켓 클래스 객체를 생성합니다. 서버가 응답하면 클라이언트에서 서버로의 통신 회선이 설정됩니다. 연결에 실패하면 예외가 발생합니다. 2. 소켓에 연결된 입출력 스트림을 엽니다. getInputStream() 메서드를 사용하여 입력 스트림을 얻고, getOutputStream() 메서드를 사용하여 데이터 전송을 위한 출력 스트림을 얻습니다. 3. 특정 프로토콜에 따라 소켓에 대한 읽기/쓰기 작업: 입력 스트림을 통해 서버가 라인에 넣은 정보를 읽고(그러나 라인에 넣은 정보를 직접 읽을 수는 없음) 정보를 스레드에 씁니다. 출력 스트림을 통해. 4. 소켓 닫기: 서버에서 클라이언트 연결을 끊고 라인을 해제합니다.
서비스 터미널
1. ServerSocket 호출(int 포트): 서버 측 소켓을 생성하고 지정된 포트에 바인딩합니다. 클라이언트 요청을 모니터링하는 데 사용됩니다. 2. accept() 호출: 연결 요청을 수신합니다. 클라이언트가 연결을 요청하면 연결을 수락하고 통신 소켓 개체를 반환합니다. 3. 소켓 클래스 객체의 getOutputStream() 및 getInputStream()을 호출합니다. 출력 스트림과 입력 스트림을 얻고 네트워크 데이터 전송 및 수신을 시작합니다. 4. ServerSocket 및 Socket 개체를 닫습니다. 클라이언트 액세스가 완료되고 통신 소켓이 닫힙니다.
데이터그램 소켓
UDP를 사용하여 "최선의" 데이터 서비스 제공
UDP 기반 네트워크 프로그래밍
1. DatagramSocket 및 DatagramPacket 클래스는 UDP 프로토콜을 기반으로 네트워크 프로그램을 구현합니다. 2. UDP 데이터그램은 데이터그램 소켓인 DatagramSocket을 통해 송수신됩니다. 시스템은 UDP 데이터그램이 목적지까지 안전하게 전달될 수 있다고 보장하지 않으며, 데이터그램이 언제 도착할지 결정할 수도 없습니다. 3. DatagramPacket 개체는 UDP 데이터그램을 캡슐화하며, 데이터그램에는 보낸 사람의 IP 주소와 포트 번호, 받는 사람의 IP 주소와 포트 번호가 포함되어 있습니다. 4. UDP 프로토콜의 각 데이터그램은 완전한 주소 정보를 제공하므로 송신자와 수신자 사이에 연결을 설정할 필요가 없습니다. 특급 소포를 보내는 것과 같습니다.
프로세스
1. DatagramSocket 및 DatagramPacket 2. 송신측과 수신측 설정 3. 데이터 패키지 생성 4. 소켓의 송수신 메소드를 호출합니다. 5. 소켓 닫기 참고: 송신측과 수신측은 두 개의 독립적인 실행 프로그램입니다.
URL
반사
개념
JAVA 메커니즘 반영은 모든 클래스에 대해 이 클래스의 모든 속성과 메서드를 알 수 있으며 동적으로 얻은 정보와 동적 호출을 호출할 수 있습니다. 객체의 메소드를 Java 언어의 반사 메커니즘이라고 합니다.
클래스 클래스의 인스턴스 가져오기
1) 전제: 특정 클래스를 알면 해당 클래스의 클래스 속성을 통해 얻을 수 있다. 이 방법이 가장 안전하고 신뢰성이 높으며, 프로그램 성능도 가장 높다. 예: 클래스 clazz = String.class; 2) 전제: 특정 클래스의 인스턴스가 알려지면 해당 인스턴스의 getClass() 메소드를 호출하여 Class 객체를 얻어야 한다. 예: 클래스 clazz = "www.atguigu.com".getClass(); 3) 전제조건: 클래스의 전체 클래스 이름을 알고 있어야 하며, 해당 클래스가 클래스 경로에 있고 Class 클래스의 정적 메서드를 통해 검색할 수 있어야 합니다. forName()을 사용하여 얻은 경우 ClassNotFoundException이 발생할 수 있습니다. 예: 클래스 clazz =Class.forName("java.lang.String"); 4) 기타 방법(필수 아님) ClassLoader cl = this.getClass().getClassLoader(); Class clazz4 = cl.loadClass("클래스의 전체 클래스 이름");
클래스 클래스의 일반적인 메소드
클래스 객체가 있는 유형
(1) 수업: 외부 클래스, 멤버(멤버 내부 클래스, 정적 내부 클래스), 로컬 내부 클래스, 익명 내부 클래스 (2) 인터페이스: 인터페이스 (3)[]: 배열 (4) 열거형: 열거형 (5) 주석: @interface 주석 (6) 원시형: 기본 데이터형 (7)무효
예
클래스 c1 = Object.class; 클래스 c2 = Comparable.class; 클래스 c3 = String[].class; 클래스 c4 = int[][].class; 클래스 c5 = ElementType.class; 클래스 c6 = Override.class; 클래스 c7 = int.class; 클래스 c8 = void.class; 클래스 c9 = 클래스.클래스; int[] a = 새로운 int[10]; int[] b = 새로운 int[100]; 클래스 c10 = a.getClass(); 클래스 c11 = b.getClass();
하위 주제 11
하둡
HDFS
HDFS의 장점과 단점
이점
내결함성(복제 메커니즘)
빅데이터 처리에 적합하고, 페타바이트급 데이터 처리가 가능하며, 수백만 개의 파일을 처리할 수 있습니다.
저렴한 머신에 배포 가능
결점
지연 시간이 짧은 데이터 액세스에는 적합하지 않음
많은 수의 작은 파일을 효율적으로 저장하는 것은 불가능합니다. 네임노드의 메모리는 제한되어 있으며 작은 파일이 너무 많으면 주소 지정 시간이 파일 처리 시간보다 길어집니다.
동시 쓰기는 지원되지 않으며 파일은 무작위로 수정됩니다.
hdfs 아키텍처 구성
네임노드
hdfs 네임스페이스 관리
복제본 정책 구성
블록 매핑 정보 관리
클라이언트 요청 처리
데이터노드
데이터 블록 저장
데이터 블록에 대한 읽기 및 쓰기 요청 실행
고객
파일 분할, 파일 업로드 시 파일을 블록으로 분할
파일 위치 정보를 얻기 위해 namenode와 상호작용
데이터노드와 상호작용, 데이터 읽기 또는 쓰기
클라이언트는 hdfs를 관리하는 명령을 제공합니다.
클라이언트는 HDFS에 대한 작업 추가, 삭제, 확인 등 HDFS에 액세스하기 위한 명령을 제공합니다.
보조 이름 노드
nameNode가 작동하도록 지원하고, fsimage를 병합하고, 파일을 편집하고, nameNode에 푸시합니다.
긴급 상황에서 네임노드 복구 지원
hdfs 파일 블록 크기
hadoop1.x 64M, hadoop2.x/3.x는 128M입니다.
최적의 상태는 주소 지정 시간이 전송 시간의 1%일 때입니다.
HDFS 파일 블록 크기가 너무 크거나 작을 수 없는 이유
1. 너무 작으면 탐색 시간이 늘어납니다.
2. 블록이 너무 크면 데이터 전송 시간이 시작 블록 위치를 찾는 시간보다 훨씬 길어져 프로그램이 이 데이터 블록을 매우 느리게 처리하게 됩니다.
껍데기
업로드
hadoop fs -moveFromLocal 로컬 파일 hdfs 디렉토리(로컬 잘라내기 및 hdfs로 복사)
hadoop fs -copyFromLocal 로컬 파일 hdfs 디렉토리(hdfs에 로컬로 복사)
hadoop fs - 로컬 파일 hdfs 디렉토리 넣기(로컬로 복사하고 hdfs에 업로드)
hadoop fs -appendToFile 로컬 파일 hdfs 파일(로컬 파일 데이터가 hdfs 파일 끝에 추가됨)
다운로드
hadoop fs -copyToLocal hdfs 파일 로컬 디렉토리(로컬에 복사된 파일)
hadoop fs -get hdfs 파일 로컬 디렉토리(로컬에 복사된 파일)
hdfs 운영
hadoop fs -ls 디렉토리(디렉토리 아래에 정보 표시)
hadoop fs -mkdir 디렉토리(디렉토리 생성)
-chgrp, -chmod, -chown(파일 소유권 수정)
hadoop fs -cat 파일(파일 내용 표시)
hadoop fs -cp 파일 디렉터리(파일을 다른 디렉터리에 복사)
hadoop fs -tail 파일(파일 끝에 1kb의 데이터 표시)
hadoop fs -rm 파일 또는 폴더 삭제
hadoop fs -rm -r 디렉토리 (디렉토리와 디렉토리 아래의 내용을 반복적으로 삭제)
하둡 fs -du
hadoop fs -setrep (레플리카 수를 설정하고 네임노드에만 기록합니다. 데이터노드 수가 설정된 레플리카 수보다 적으면 레플리카 수는 데이터노드만큼만 됩니다.)
hdfs api 작업: FileSystem 개체를 통해
hdfs 읽기 및 쓰기 프로세스
독서 과정
하위 주제 1
쓰기 프로세스
삽화
하위 주제 3
하이브
개념
Hive는 구조화된 데이터를 테이블로 매핑하고 SQL과 유사한 쿼리 기능을 제공하는 Hadoop 기반의 데이터 웨어하우스 관리 도구입니다.
원칙
Essence HQL을 mr 작업으로 변환
메타스토어
메타데이터: 테이블 이름, 테이블이 속한 데이터베이스(기본값), 테이블 소유자, 열/파티션 필드, 테이블 유형(외부 테이블인지 여부), 테이블 데이터가 있는 디렉터리 등을 포함합니다.
고객
jdbc/ODBC 인터페이스, webUI 액세스, 인터페이스 액세스 등을 제공합니다.
운전사
파서SQL 파서
SQL을 추상 구문 트리 AST로 변환합니다. 이 단계는 일반적으로 Antrl과 같은 타사 도구를 사용하여 SAT에서 구문 분석을 수행하여 SQL 의미가 올바른지, 테이블 및 열 이름이 있는지 등을 확인합니다.
컴파일러 물리적 계획
AST를 논리적 실행 계획으로 변환
최적화 도구 쿼리 최적화 도구
논리적 실행 계획 최적화
실행
논리적 쓰기 저장 계획은 실행 가능한 물리적 실행 계획으로 변환됩니다. Hive의 경우 mr/tez/spark 작업으로 변환됩니다.
데이터 유형
기본 데이터 유형
Hive의 문자열 유형은 이론적으로 2G 문자를 저장할 수 있습니다.
컬렉션 데이터 유형
컬렉션 데이터 유형 테이블 생성문
테이블 테스트 생성( 이름 문자열, 친구 배열<string>, 하위 맵<string, int>, 주소 구조체<거리:문자열, 도시:문자열> ) ',' //열 구분 기호로 끝나는 행 형식 구분 필드 '_'로 끝나는 컬렉션 항목 //MAP STRUCT 및 ARRAY의 구분 기호(데이터 분할 상징) ':'으로 끝나는 맵 키 //키와 값 구분 기호 매핑 //줄 구분 기호로 끝나는 줄;
유형 변환
Hive의 원자 데이터 유형은 Java의 변환과 유사하게 암시적으로 변환됩니다. 예를 들어 표현식이 INT 유형을 사용하는 경우 TINYINT는 자동으로 INT 유형으로 변환되지만 Hive는 역변환을 수행하지 않습니다. 예를 들어 표현식이 TINYINT 유형을 사용하는 경우 INT는 자동으로 TINYINT로 변환되지 않습니다. 유형이며 CAST 연산을 사용하지 않으면 오류를 반환합니다.
암시적 변환 규칙
1. 모든 정수 유형은 암시적으로 더 넓은 유형으로 변환될 수 있습니다. 예를 들어 TINYINT는 변환될 수 있습니다. INT로 대체되면 INT를 BIGINT로 변환할 수 있습니다.
2. 모든 정수 유형, FLOAT 및 STRING 유형은 암시적으로 DOUBLE로 변환될 수 있습니다. (String과 double의 암시적 변환으로 인해 데이터 왜곡이 쉽게 발생할 수 있습니다.)
3.TINYINT, SMALLINT, INT는 모두 FLOAT로 변환될 수 있습니다.
4. BOOLEAN 유형은 다른 유형으로 변환될 수 없습니다.
DDL
테이블 생성
[외부] 테이블 생성 [존재하지 않는 경우] 테이블_이름 [(col_name 데이터_유형 [COMMENT col_comment], ...)] [COMMENT 테이블_설명] [PARTITIONED BY (col_name 데이터_유형 [COMMENT col_comment], ...)] [CLUSTERED BY(col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets 버킷] [ROW FORMAT 행_형식] [파일_형식으로 저장됨] [위치 hdfs_path] [TBLPROPERTIES(속성_이름=속성_값, ...)] [AS select_statement]
설명하다
(1) CREATE TABLE은 지정된 이름의 테이블을 생성합니다. 동일한 이름의 테이블이 이미 존재하는 경우 예외가 발생합니다. 사용자는 IF NOT EXISTS 옵션을 사용하여 이 예외를 무시할 수 있습니다. (2) EXTERNAL 키워드를 사용하면 테이블을 생성할 때 실제 데이터에 대한 경로(LOCATION)를 지정할 수 있으며, 테이블이 삭제되면 내부 테이블의 메타데이터와 데이터도 함께 삭제됩니다. , 외부 테이블은 데이터가 아닌 메타데이터만 삭제합니다. (3) COMMENT: 테이블과 컬럼에 설명을 추가합니다. (4) PARTITIONED BY는 파티션 테이블을 생성합니다. (5) CLUSTERED BY는 버킷 테이블을 생성합니다. (6) SORTED BY는 일반적으로 버킷에 있는 하나 이상의 열을 정렬하는 데 사용됩니다. (7) ROW FORMAT DELIMITED [FIELDS TERMINATED BY char] [컬렉션 항목 문자로 종료됨] [MAP KEYS TERMINATED BY 문자] [LINES TERMINATED BY 문자] | SERDE serde_name [SERDEPROPERTIES 포함(property_name=property_value, property_name=property_value, ...)] 사용자는 SerDe를 사용자 정의하거나 테이블을 생성할 때 내장된 SerDe를 사용할 수 있습니다. ROW FORMAT 또는 ROW FORMAT DELIMITED가 지정되지 않은 경우 내장된 SerDe가 사용됩니다. 테이블을 생성할 때 사용자는 테이블의 열을 지정해야 하며 Hive는 SerDe를 사용하여 결정합니다. 지정된 테이블의 특정 열 데이터입니다. SerDe는 Serialize/Deserilize의 약어입니다. Hive는 Serde를 사용하여 행 개체의 순서를 지정하고 역직렬화합니다. (8) STORED AS는 저장 파일 유형을 지정합니다. 일반적으로 사용되는 저장 파일 유형은 SEQUENCEFILE(바이너리 시퀀스 파일), TEXTFILE(텍스트), RCFILE(열 저장 형식 파일)입니다. TEXTFILE. 데이터를 압축해야 하는 경우 STORED AS SEQUENCEFILE을 사용하세요. (9) LOCATION: HDFS에 테이블이 저장되는 위치를 지정한다. (10) AS: 쿼리 결과를 기반으로 테이블을 생성하는 쿼리 문이 뒤에 옵니다. (11) LIKE를 사용하면 사용자가 기존 테이블 구조를 복사할 수 있지만 데이터는 복사할 수 없습니다.
파티션 테이블
파티션 테이블의 본질은 HDFS의 폴더에 해당하고 Hive의 파티션은 하위 디렉터리입니다.
DML
짐
데이터 로드 [로컬] inpath '/opt/module/datas/student.txt' [덮어쓰기] 테이블 학생 [파티션(partcol1=val1,…)];
끼워 넣다
기본 삽입
테이블에 삽입(덮어쓰기) ...
다중 테이블 삽입
테이블 이름에서 테이블 t1에 삽입 .... tableName에서 ....를 선택하고, 테이블 t2에 삽입 .... tableName에서 .... 선택
테이블 쿼리 및 생성
선택으로 베일 테이블 이름을 생성합니다.....
데이터를 업로드하여 테이블 만들기
1. hdfs에 데이터 업로드
2. 테이블을 생성하고 hdfs에 해당 위치를 지정합니다.
HIve로 데이터 가져오기
참고: 먼저 내보내기를 사용하여 데이터를 내보낸 다음 가져오세요.
'/user/hive/warehouse/export/student'에서 테이블 Student2 파티션(월='201709') 가져오기;
잘라내기는 테이블의 데이터를 삭제합니다.
관리 테이블만 삭제할 수 있으며, 외부 테이블의 데이터는 삭제할 수 없습니다.
일반적으로 사용되는 기능
최대
분
합집합
평균
세다
종류
전역 정렬
전역 정렬로 정렬하면 리듀서가 하나뿐이어서 데이터의 양이 많을 때는 효율성이 매우 낮고, 데이터의 양이 적을 때는 효율성이 높습니다.
파티션 정렬
distribution by는 mr 작업의 사용자 정의 파티셔너와 유사합니다. distribution by의 규칙은 파티션 필드의 해시 코드를 기반으로 감속기 수를 모듈로 나눈 후 동일한 숫자를 가진 나머지가 동일한 파티션에 들어가는 것입니다.
지역 정렬
sort by는 각 리듀서의 내부 정렬이며 전역적으로 순서가 지정되지 않습니다. 이는 종종 distribution by와 함께 사용되며, distribution by는 앞쪽에, sort by는 뒤쪽에 사용됩니다.
클러스터 기준
Distribution by sort by를 함께 사용하고 클러스터 기준이 동일한 오름차순인 경우 대체할 수 있습니다. ASC 또는 DESC로 정렬 규칙을 지정할 수 없습니다.
파티션, 버킷
버킷
버킷팅을 활성화하고 hive.enforce.bucketing=true로 설정하여 구성해야 합니다.
버킷 테이블 생성
버킷 테이블에 데이터를 삽입하는 것은 일반 테이블에 데이터를 삽입하는 것과 같습니다.
버킷팅 규칙
버킷 필드는 해시 모듈러스의 모듈러스를 버킷 수로 나누어 계산하여 데이터가 어느 버킷에 있는지 결정합니다.
버킷팅과 파티셔닝의 차이점
파티셔닝은 데이터 저장 경로를 위한 것입니다. 즉, 버킷팅은 데이터 파일을 위한 것입니다.
버킷 샘플링 설문조사
문법
테이블샘플(BUCKET x OUT OF y) .
분할
하위 주제
행과 열 간 변환
행에서 열로
CONCAT(문자열 A/열, 문자열 B/열…)
CONCAT_WS(구분자, str1, str2,...)
COLLECT_SET(열)
기능 설명
예
SQL 구현
열에서 행으로
기능 설명
예
SQL 구현
창 기능
위에()
현재 행
현재 행
n 퍼싱
n줄 앞으로 이동
n 팔로잉
n 줄 뒤로
무제한
출발점
무한한 강요는 앞에서부터 시작한다는 뜻이다.
무한한 추종은 뒤의 끝점까지 가는 것을 의미합니다.
LAG(열,n,기본_값)
n번째 줄 앞으로 이동
리드(열,n,기본_발)
n번째 줄 뒤로
N타일(n)
순서가 지정된 파티션의 행을 지정된 데이터 그룹에 배포합니다. 각 그룹에는 1부터 시작하여 번호가 지정됩니다. 각 행에 대해 NTILE은 행이 속한 그룹의 번호를 반환합니다. 참고: n은 int 유형이어야 합니다.
예
데이터
요구 사항 및 구현
1. 2017년 4월 구매 고객 및 총 고객 수를 조회합니다.
2. 고객의 구매 내역 및 월간 구매 총액 확인
3. 위 시나리오에서는 날짜별로 비용이 누적되어야 합니다.
4. 각 고객의 마지막 구매 시간을 쿼리합니다.
5. 이전 20% 시간의 주문 정보를 조회합니다.
계급
순서가 동일할 경우 반복되며 총 개수는 변경되지 않습니다.
밀도_순위
순서가 동일할 경우 중복이 발생하지 않으며, 총 개수가 감소됩니다.
행_번호
순서대로 계산됩니다
예
기능
내장 기능
맞춤 기능
udf(사용자 정의 함수)
특징: 하나에 하나, 하나에 하나
프로그래밍 단계
1. org.apache.hadoop.hive.ql.UDF 클래스 상속
2. 평가 기능을 구현해야 합니다. 평가 기능은 오버로드를 지원합니다.
3. 하이브의 명령줄 창에서 함수를 만듭니다.
1.병 업로드
jar linux_jar_path 추가
2.기능 생성
[임시] 함수 생성 [dbname.]function_name AS class_name;
4. 하이브의 명령줄 창에서 함수를 삭제합니다.
[임시] 함수 삭제 [존재하는 경우] [dbname.]function_name;
참고: UDF에는 반환 유형이 있어야 하며 null을 반환할 수 있지만 반환 유형은 void일 수 없습니다.
udaf(사용자 정의 집계 함수)
더 많이 들어가고 하나는 나옴
집계 함수
udtf(사용자 정의 테이블 생성 함수)
하나가 들어와 다수가 나옴
측면도 폭발()
압축 및 보관
Hive에서 일반적으로 사용되는 압축 및 저장
Parquet 파일 형식은 Hive에서 일반적으로 사용되며 압축에는 lzo 또는 snappy가 사용됩니다.
압축
압축 형식 표
압축 성능 비교
압축 매개변수 설정
저장
하이브의 일반적인 파일 형식
텍스트 파일, 쪽모이 세공 마루, 오크, 시퀀스 파일
파일 형식 분류
행 저장
특징
조건을 충족하는 전체 데이터 행을 쿼리할 때 열 저장소는 각 집계된 필드로 이동하여 각 열의 해당 값을 찾으면 됩니다. 행 저장소는 값 중 하나만 찾으면 되며 나머지 값은 다음과 같습니다. 인접 장소에 있으므로 이 행 저장소 쿼리가 더 빠릅니다.
텍스트파일
기본 형식에서는 데이터가 압축되지 않으므로 디스크 오버헤드와 데이터 구문 분석 오버헤드가 높아집니다.
시퀀스파일
컬럼 보관
특징
각 필드의 데이터가 집계되어 저장되기 때문에 쿼리에 몇 개의 필드만 필요한 경우 읽혀지는 데이터의 양이 크게 줄어들 수 있으며, 각 필드의 데이터 유형은 동일해야 하며 열 형식 스토리지를 구체적으로 더 잘 설계할 수 있습니다. 압축 알고리즘을 설계했습니다.
쪽매 세공
오크
구성
Orc 파일은 일반적으로 하나 이상의 스트라이프로 구성됩니다. 각 스트라이프는 일반적으로 HDFS 블록 크기입니다. 이러한 레코드는 열에 따라 독립적으로 저장됩니다.
줄무늬
인덱스 데이터
하위 주제 1
행 데이터
줄무늬 바닥글
동조
캡처 가져오기
이는 어떤 경우에는 쿼리가 select * from table과 같은 MR 작업을 거칠 필요가 없다는 것을 의미합니다. 이 경우 Hive는 간단히 테이블 디렉터리에 있는 파일을 읽고 콘솔에 출력할 수 있습니다.
캡처 활성화 설정 가져오기
hive-default.xml.template 파일에서 hive.fetch.task.conversion = more를 설정합니다.
켜면 전역 검색, 제한 검색, 필드 검색에서는 mr 작업을 사용하지 않습니다.
로컬 모드
Hive 입력 데이터가 적고 쿼리 실행 작업을 트리거하는 데 소요되는 시간이 실제 작업 실행 시간보다 훨씬 길 수 있습니다. 이 경우 로컬 모드를 켜서 단일 머신에서 모든 작업을 처리할 수 있습니다. 소규모 데이터 세트의 작업 실행 시간이 크게 단축됩니다.
매개변수 설정
set hive.exec.mode.local.auto=true; //로컬 mr 활성화
테이블 최적화
큰 테이블, 작은 테이블 조인
작은 테이블을 앞에 배치하고 큰 테이블을 뒤에 배치하면 메모리 오버플로 오류 가능성을 효과적으로 줄일 수 있습니다. 이제 최적화되었으므로 작은 테이블을 앞에 배치하고 큰 테이블을 뒤에 배치해도 효과가 없습니다.
맵 조인(작은 테이블 조인 큰 테이블)
맵 조인 활성화 설정
지도 조인은 기본적으로 활성화되어 있습니다.
hive.auto.convert.join = true로 설정;
set hive.mapjoin.smalltable.filesize=25000000;//기본 소형 테이블 크기는 25M입니다.
맵 조인 원리
큰 테이블에 합류
1. 빈 키 필터링
빈 키가 있는 대량의 비정상적인 데이터가 동일한 감속기에 들어가고 처리 속도가 매우 느려지는 경우도 있습니다. 때로는 빈 키를 먼저 필터링하도록 선택할 수도 있습니다.
2. 빈 키 변환
다수의 빈 키는 비정상적인 데이터가 아니며 결과 세트에 포함되어야 합니다. 그러면 키에 값을 할당하고 리듀서에 균등하게 분배할 수 있습니다.
그룹화 기준
지도 측 집계 활성화
매개변수 설정
1. 지도 측에서 집계 활성화
hive.map.aggr = true로 설정
2. 지도측 항목수 집계
hive.groupby.mapaggr.checkinterval = 100000으로 설정
3. 데이터 편향이 있는 경우 로드 밸런싱 수행(기본값은 false)
hive.groupby.skewindata = true로 설정
원리: 두 개의 작업이 시작됩니다. 첫 번째 작업의 맵 측은 키를 리듀서에 무작위로 배포합니다. 각 리듀서는 내부적으로 집계 작업을 수행하고 결과를 출력합니다. the same 최종 집계 작업을 완료하기 위해 집계를 위해 키가 동일한 감속기로 전송됩니다.
개수(고유)
작은 데이터는 중요하지 않습니다
대용량 데이터
데이터 볼륨이 큰 경우 count(distinct)는 리듀서 수에 관계없이 하나의 리듀서만 입력하므로 작업 진행에 영향을 미치므로 그룹화를 사용하여 중복 제거 통계를 수행할 수 있습니다.
데카르트 곱
데카르트 곱을 피하고, 조인 시 조건을 추가하지 마세요. Hive는 하나의 감속기만 사용하여 데이터를 처리할 수 있습니다.
행 및 열 필터링
컬럼 처리
select에서는 필수 열만 선택하고 select *를 최대한 적게 사용하세요.
행 처리
보조 테이블의 필터 조건이 연결의 where 뒤에 기록되면 두 테이블은 먼저 전체 테이블과 연결된 다음 데이터를 필터링하는 것이 좋습니다. 그런 다음 연결을 수행합니다.
동적 파티셔닝
동적 파티션 설정 활성화
1. 동적 파티셔닝 기능 설정 활성화(기본적으로 활성화됨)
hive.exec.dynamic.partition=true
2. 비엄격 모드(동적 파티셔닝 모드, 기본값은 엄격함)로 설정합니다. 이는 최소한 하나의 파티션을 다음과 같이 지정해야 함을 의미합니다. 정적 파티셔닝, 비엄격 모드는 모든 파티션 필드가 동적 파티셔닝을 사용할 수 있음을 의미합니다. )
hive.exec.dynamic.partition.mode=비엄격
삼. MR을 실행하는 모든 노드에서 생성할 수 있는 동적 파티션의 최대 수입니다. 기본 1000
hive.exec.max.dynamic.partitions=1000
4. MR을 실행하는 각 노드에 생성할 수 있는 동적 파티션의 최대 수입니다. 이 매개변수는 실제를 기반으로 해야 합니다. 설정할 데이터. 예를 들어 소스 데이터에 1년 동안의 데이터가 포함되어 있습니다. 즉, 일 필드에 365개의 값이 있으면 이 매개변수는 365보다 크게 설정해야 합니다. 기본값인 100을 사용하면 오류가 보고됩니다.
hive.exec.max.dynamic.partitions.pernode=100
5. 전체 MR 작업에서 생성할 수 있는 최대 HDFS 파일 수입니다. 기본값 100000
hive.exec.max.created.files=100000
6. 빈 파티션이 생성될 때 예외를 발생시킬지 여부입니다. 일반적으로 설정이 필요하지 않습니다. 기본값은 거짓
hive.error.on.empty.partition=false
분할
버킷
데이터 편향
1. 합리적인 수의 지도를 설정하세요
병렬 실행
기본적으로 Hive는 한 번에 하나의 단계만 실행할 수 있습니다. 그러나 특정 작업에는 여러 단계가 포함될 수 있으며 이러한 단계는 서로 완전히 종속되지 않을 수 있습니다. 작업을 병렬로 실행하면 더 빠르게 완료될 수 있습니다.
매개변수 설정 켜기
set hive.exec.parallel=true; //작업의 병렬 실행 활성화 set hive.exec.parallel.thread.number=16; //동일한 SQL에 허용되는 최대 병렬 처리 수준, 기본값은 8입니다.
엄격 모드
JVM 재사용
투기적 실행
압축
숫자 창고 이론
개념
이는 기업의 모든 수준에서 의사 결정 프로세스에 대한 모든 유형의 데이터 지원을 제공하는 전략적 컬렉션입니다.
특징
데이터 웨어하우스는 의사결정을 지원하기 위한 마스터 그래프 중심의 통합된 비휘발성 시변 데이터 컬렉션입니다.
주제 중심
완성
비휘발성(변경할 수 없음)
시변
etl
Extra 추출, 변환 전송, 로드 로드
데이터 웨어하우스 계층화
소스 데이터
이 계층에서는 데이터에 대한 변경이 없으며 주변 시스템의 데이터 구조와 데이터를 직접 사용하며 대중에게 공개되지 않습니다. 이는 후속 작업을 준비하기 위한 인터페이스 데이터의 임시 저장 영역입니다. 데이터 처리.
데이터 베이스
세부 레이어라고도 하는 DW 레이어의 데이터는 원본 시스템 데이터에서 정리된(불순물 제거된) 일관되고 정확하며 깨끗한 데이터여야 합니다.
데이터 응용
프런트 엔드 애플리케이션에서 직접 읽은 데이터 소스, 보고서 및 주제별 분석 요구 사항을 기반으로 계산 및 생성된 데이터
레이어링을 하는 이유
시간을 위한 공간
애플리케이션 시스템의 사용자 경험(효율성)을 향상시키기 위해 많은 양의 전처리가 사용되므로 소스 비즈니스 시스템의 비즈니스 규칙이 변경되면 계층화 없이 데이터 웨어하우스에 대량의 중복 데이터가 있게 됩니다. 전체 데이터 정리 프로세스에 영향을 미치며 작업량은 엄청납니다.
계층화로 데이터 정리 프로세스가 단순화됩니다.
원래의 한 단계 작업을 여러 단계로 나누는 것은 복잡한 작업을 여러 개의 간단한 작업으로 나누고 큰 블랙 박스를 화이트 박스로 만드는 것과 같기 때문에 데이터 계층적 관리를 통해 데이터 정리 과정을 단순화할 수 있으며, 각 계층의 처리 논리는 비교적 간단하고 이해하기 쉽습니다. 따라서 각 단계의 정확성을 더 쉽게 확인할 수 있습니다. 데이터에 오류가 발생하면 특정 단계만 부분적으로만 조정하면 됩니다.
데이터 마트
데이터 마트 아키텍처
독립 데이터 마트
종속 데이터 마트
데이터 웨어하우스 계층화
데이터 웨어하우스 계층화 원리
1. 데이터 분석을 용이하게 하기 위해서는 기본이 되는 복잡한 비즈니스를 보호하고 간단하고 완전하며 통합된 방식으로 데이터를 분석 계층에 노출해야 합니다.
2. 기본 데이터 계층에서는 비즈니스 시스템 변경의 영향이 모델에 미치는 영향이 최소화되고, 하향식 구축 방식이 결합되어 수요 변화가 모델에 미치는 영향이 최소화됩니다. 모델이 약해졌습니다.
3. 높은 응집성과 느슨한 결합, 즉 주제 내 또는 각 전체 시스템 내 데이터의 높은 응집성과 주제 간 또는 전체 시스템 간의 데이터의 느슨한 결합입니다.
4. 웨어하우스의 기본 데이터 계층을 구축하여 기본 비즈니스 데이터 통합 작업을 상위 계층 애플리케이션 개발 작업과 분리하여 웨어하우스의 대규모 개발을 위한 기반을 마련하고 데이터를 외부에 노출시킵니다. 더욱 통일될 것입니다.
데이터 웨어하우스 계층화
ods(운영 데이터 저장소)
원본 데이터에 그대로 액세스
DW(데이터 웨어하우스)
DWD(Data Warehouse Detail) 데이터 세부 레이어
세분성은 ods 레이어와 일치하며 특정 데이터 품질 보장을 제공합니다. dwd 계층이 해야 할 일은 데이터 정리, 통합 및 표준화입니다. 더티 데이터, 정크 데이터, 일관성 없는 사양, 일관성 없는 상태 정의 및 일관성 없는 명명 사양이 모두 처리됩니다. 동시에 데이터의 유용성을 향상시키기 위해 일부 차원 저하 기술을 사용하여 차원을 팩트 테이블로 저하시키고 차원 테이블과 팩트 테이블 간의 연관성을 줄입니다. 이 계층에서는 일부 데이터가 집계되어 동일한 주제 영역의 데이터를 동일한 테이블로 가져와 데이터의 유용성을 향상시킵니다.
DWM(Data Warehouse Middle) 데이터 중간 계층
DWD 레이어를 기반으로 공통 핵심 차원에 대한 지표 집계 작업을 수행하여 해당 통계 지표를 계산합니다. 실제 계산에서 넓은 테이블의 계산 지표를 DWD나 ODS 계층에서 직접 계산하면 계산량이 너무 많아지고 차원이 너무 적어지는 등의 문제가 발생할 수 있으므로 일반적인 접근 방식은 먼저 여러 개의 작은 중간 테이블을 계산하는 것입니다. dwm 레이어를 하나의 넓은 테이블로 합칩니다. 너비와 너비 경계를 정의하기 어렵기 때문에 dwm 레이어를 제거하고 dws 레이어만 남겨 둘 수도 있습니다.
DWS(Data Warehouse Service) 데이터 서비스 계층
dwd 레이어 기반의 데이터는 특정 주제 영역을 분석하기 위한 서비스 데이터로 통합되어 요약되며, 이는 일반적으로 넓은 테이블입니다. dws 레이어는 영양분 장면의 80%를 덮어야 합니다. 데이터 마트 또는 와이드 테이블이라고도 하며 후속 비즈니스 쿼리, Olap 분석, 데이터 배포 등에 사용됩니다.
APP 데이터 애플리케이션 레이어
데이터는 주로 데이터 제품 및 데이터 분석을 위해 제공되며 일반적으로 온라인 시스템에서 사용하기 위해 ES, PostgreSql, Redis 및 기타 시스템에 저장되며 데이터 분석 및 데이터 마이닝을 위해 Hive 또는 Druid에 저장될 수도 있습니다. 예를 들어 우리가 자주 이야기하는 보고서 데이터는 대개 여기에 배치됩니다.
희미한 차원 표면층
차원 테이블이 있는 경우 이 레이어를 별도로 디자인할 수 있습니다.
높은 카디널리티 데이터
일반적으로 사용자 데이터 테이블, 제품 테이블 데이터 테이블과 유사합니다. 데이터의 양은 수천만 또는 수억이 될 수 있습니다.
낮은 기본 둘레 데이터
일반적으로 열거값에 해당하는 한자 뜻이나 날짜 차원 테이블 등의 구성 테이블이다. 데이터의 양은 한 자리, 수백, 수천, 수만일 수 있다.
데이터 웨어하우스 모델링 방법
차원 모델링
중요성
분석된 의사결정의 요구사항을 기반으로 모델을 구축하고, 구축된 데이터 모델은 사용자가 분석을 신속하게 완료하는 문제를 해결하는 데 중점을 두고 분석 요구사항을 충족하며, 대규모의 복잡한 쿼리에 대해서도 우수한 응답 성능을 제공합니다.
사실 테이블
정기 스냅샷 팩트 테이블
거래 사실 테이블
누적 스냅샷 팩트 테이블
사실이 없는 사실 테이블
집계 사실 테이블
팩트 테이블 병합
차원 테이블
스타 스키마
모든 차원 테이블은 팩트 테이블에 연결되며 차원 테이블은 다른 차원 테이블과 연결되지 않습니다.
별자리 모델
스타 스키마에서 확장된 여러 팩트 테이블은 차원 정보를 공유합니다.
눈송이 모델
팩트 테이블은 차원 테이블과 연결되어 있으며, 차원 테이블에는 다른 차원 테이블이 있을 수 있으며 성능이 낮습니다.
차원 모델링 프로세스
업무프로세스 선택
선언 세분성
동일한 사실 테이블은 동일한 세분성을 가져야 합니다. 동일한 사실 테이블에 여러 다른 세분성을 혼합하지 마십시오. 서로 다른 세분성 데이터에 대해 서로 다른 사실 테이블이 생성됩니다. 요구 사항이 불분명한 데이터의 경우 원자 단위를 설정합니다.
치수 확인
사실 확인
패러다임 모델링
데이터베이스의 6가지 패러다임
첫 번째 정규형(1NF)
강조되는 것은 컬럼의 원자성, 즉 컬럼이 다른 컬럼으로 분할될 수 없다는 점이다.
제2정규형(2NF)
첫 번째 정규형을 만족하려면 두 가지 조건이 충족되어야 합니다. 첫째, 테이블에 기본 키가 있어야 하며, 둘째, 기본 키에 포함되지 않은 열은 기본 키의 일부에만 의존할 수 없어야 합니다. 열쇠.
제3정규형(3NF)
2nf를 충족하려면 기본 키가 아닌 열이 기본 키에 직접 종속되어야 하며 전이적 종속성이 있을 수 없습니다. 즉, 존재할 수 없습니다. 기본 키가 아닌 열 A는 기본 키가 아닌 열 B에 종속되고 기본 키가 아닌 열 B는 종속됩니다.
Boyce-Codd 정규형(BCNF)
제4정규형(4NF)
제5정규형(5NF)
모델링 단계
1. 개념적 모델
2. 논리 모델
3. 물리적 모델
데이터 웨어하우스 핵심 구축 아이디어
설계, 개발, 배포 및 응용 수준에서 반복 구성 및 중복 인덱스 구성을 방지하여 데이터 수준의 표준화 및 통일을 보장하고 궁극적으로 데이터 자산의 풀 링크 연결을 실현하여 표준 데이터 출력 및 통합 데이터를 제공합니다. 공개 레이어
데이터센터 구축 과정
임팔라
데이터 유형
쉘 명령
건축학
기준 치수
임팔라드
클라이언트의 요청을 받아 쿼리를 실행하고 중앙 조정 지점으로 돌아갑니다.
하위 노드의 데몬 프로세스는 Statestore와의 통신을 유지하고 작업을 보고하는 역할을 담당합니다.
스테이트스토어
각 임팔라드 프로세스에서 배포되는 리소스 정보, 각 노드의 Health 상태 수집, 노드 정보 동기화를 담당합니다.
쿼리 조정 및 예약을 담당합니다.
목록
각 임팔라드에 테이블 메타데이터 정보를 배포합니다.
Statestore에서 모든 요청을 받습니다.
하이브메타스토어
HDFS
ddl
Impala는 WITH DBPROPERTIES를 지원하지 않습니다(예: 라이브러리에 작성자 정보 및 생성 날짜 추가).
데이터베이스 삭제
데이터베이스 삭제
임팔라는 데이터베이스 변경을 지원하지 않습니다.
dml
데이터 가져오기(기본적으로 hive와 동일), 임팔라는 로컬 inpath 데이터 로드를 지원하지 않습니다.
데이터 내보내기(임팔라는 삽입 덮어쓰기를 지원하지 않습니다... 데이터 내보내기 구문, 대신 impala -o를 사용할 수 있습니다)
내보내기 및 가져오기 명령은 지원되지 않습니다.
문의
기본 구문은 Hive 쿼리 문과 거의 동일합니다.
임팔라는 버킷팅을 지원하지 않습니다.
임팔라는 클러스터 기준, 정렬 기준, 배포 기준을 지원하지 않습니다.
Impala는 COLLECT_SET(col) 및 분해(col) 함수를 지원하지 않습니다.
Impala는 윈도우 기능을 지원합니다.
임팔라 맞춤 기능
UDF
저장 및 압축
최적화
1. 통신을 보장하기 위해 가능한 한 동일한 서버에 stateStore와 카탈로그를 배포하려고 합니다.
2. impala dameon의 메모리(기본값 256) 및 statestore 스레드 수를 제한하여 작업 효율성을 향상시킵니다.
3. SQL 최적화, SQL 실행 전 실행 계획 호출
4. 쿼리 효율성을 높이기 위해 저장에 적합한 파일 형식을 선택하십시오.
5. 작은 파일을 많이 생성하지 마십시오(다른 프로그램에서 생성된 작은 파일이 있는 경우 중간 테이블을 사용하여 작은 파일 데이터를 중간 테이블에 저장할 수 있습니다. 그런 다음 중간 테이블의 데이터를 삽입을 통해 최종 테이블에 삽입할 수 있습니다. ..선택하다...)
6. 적절한 파티셔닝 기술을 사용하고 파티션 세분성에 따라 계산합니다.
7. 컴퓨팅 통계를 사용하여 테이블 정보를 수집합니다. 콘텐츠 테이블이나 파티션이 크게 변경되면 데이터 테이블이나 파티션과 관련된 통계를 다시 계산합니다. 행 수와 고유 값의 차이로 인해 임팔라가 테이블에 대한 쿼리를 사용할 때 다른 조인 순서를 선택할 수 있기 때문입니다.
8. 네트워크 IO 최적화
–a. 전체 데이터를 클라이언트로 보내지 마십시오.
–b. 조건부 필터링을 최대한 수행합니다.
–c.한도 조항을 사용하십시오.
–d.파일을 출력할 때 미화된 출력을 사용하지 마십시오.
–e 전체 메타데이터 새로 고침을 덜 사용해 보십시오.
9. 프로필을 사용하여 기본 정보 계획을 출력하고 그에 따라 환경을 최적화합니다.
데이터 레이크 이론
불꽃
내장 모듈
스파크 코어
작업 스케줄링, 메모리 관리, 오류 복구, 스토리지 시스템과의 상호 작용과 같은 모듈을 포함하여 Spark의 기본 기능을 구현했습니다. Spark Core에는 RDD(Resilient Distributed DataSet)에 대한 API 정의도 포함되어 있습니다.
스파크 SQL
Spark는 구조화된 데이터를 조작하기 위한 패키지이며 HQL을 지원할 수 있습니다.
스파크 스트리밍
스트리밍 컴퓨팅 구성요소인 API는 스파크 코어와 매우 일치합니다.
스파크 Mlib
공통 머신러닝 라이브러리 제공
스파크 그라그스
그래프 계산
작동 모드
로컬 모드
독립형 모드
원사 모드
원사 클라이언트
특징:
드라이버는 클라이언트에서 실행되며 상호 작용 및 디버깅에 적합합니다.
원사 클러스터
특징
드라이버는 ResourceManager에 의해 시작된 applicationMaster를 실행하며 프로덕션 환경에 적합합니다.
스파크코어
rdd
계산하다
파티션
파티셔너
의존성
운영자
변환 연산자
값 유형
지도(기능)
map파티션(func)
func의 함수 유형은 Iterator[T] => Iterator[U]여야 합니다.
mapPartitionsWithIndex(func)
func의 함수 유형은 (Int, Interator[T]) => Iterator[U]여야 합니다.
플랫맵(func)
글롬()
각 파티션을 배열로 구성하고 새로운 RDD 유형 RDD[Array[T]]를 구성합니다.
그룹별()
하위 주제 1
전달된 함수의 반환 값을 기준으로 그룹화합니다. 동일한 키에 해당하는 값을 iterator에 넣습니다.
필터
샘플(대체, 분수, 시드 포함)
지정된 무작위 시드를 사용하여 데이터의 일부를 무작위로 샘플링합니다. withReplacement는 추출된 데이터가 대체되는지 여부를 나타냅니다. true는 대체가 포함된 샘플링을 의미하고 false는 무작위 숫자 생성기 시드를 지정하는 데 사용됨을 의미합니다.
뚜렷한([numTasks]))
소스 RDD를 중복 제거한 후 새 RDD를 반환합니다. 기본적으로 8개의 병렬 작업만 작동하지만 선택적 numTasks 매개 변수를 전달하여 변경할 수 있습니다.
병합(파티션 수)
큰 데이터 세트를 필터링한 후 작은 데이터 세트의 실행 효율성을 높이기 위해 파티션 수를 줄입니다.
재파티션(numPartitions)
모든 데이터는 파티션 수에 따라 네트워크를 통해 다시 무작위로 섞입니다.
병합과 재분배의 차이점
1. 파티션을 다시 합치고 셔플 프로세스를 수행할지 여부를 선택할 수 있습니다. 매개변수 셔플 기준: 부울 = false/true 결정하다.
2. 재분할은 실제로 병합을 호출하여 셔플을 수행합니다.
sortBy(func,[오름차순], [numTasks])
먼저 데이터를 처리하려면 func를 사용하고, 처리된 데이터 비교 결과에 따라 정렬하면 기본값은 양수입니다.
파이프(명령어, [envVars])
파이프라인은 각 파티션에 대해 셸 스크립트를 실행하고 RDD 출력을 반환합니다.
이중 값 유형
노동 조합
빼기(otherDataset)
두 RDD에서 동일한 요소를 제거하고 다른 RDD는 그대로 유지하여 차이를 계산하는 함수
교차로(otherDataset)
소스 RDD와 매개변수 RDD를 교차한 후 새 RDD를 반환합니다.
데카르트(otherDataset)
데카르트 곱
zip(기타데이터세트)
두 RDD를 키/값 형식으로 하나의 RDD로 결합합니다. 기본적으로 두 RDD의 파티션 수와 요소는 동일합니다. 그렇지 않으면 예외가 발생합니다.
키/값 유형
partitionBy(파티셔너)
pairRDD에서 파티셔닝 작업을 수행합니다. 원본 partionRDD가 기존 partionRDD와 일치하면 파티셔닝이 수행되지 않습니다. 그렇지 않으면 ShuffleRDD가 생성되어 셔플 프로세스가 생성됩니다.
ReduceByKey(func, [numTasks])
(K, V) RDD에서 호출되면 지정된 축소 함수를 사용하여 동일한 키의 값을 함께 집계하여 (K, V) RDD를 반환합니다. 축소 작업 수는 두 번째 옵션을 통해 전달될 수 있습니다. 설정할 매개변수입니다.
그룹별키()
groupByKey도 각 키에 대해 작동하지만 하나의 seq만 생성합니다.
ReduceByKey와 groupByKey의 차이점
1. ReduceByKey: 키 기반 집계, 셔플 이전에 결합(사전 집계) 작업이 있으며 반환 결과는 RDD[k,v]입니다. 2. groupByKey: 키별로 그룹화하고 직접 섞습니다. 3. 개발 지침: groupByKey보다 ReduceByKey를 권장합니다. 하지만 이것이 비즈니스 로직에 영향을 미칠지는 주의를 기울여야 합니다.
집계별키
매개변수: (zeroValue:U,[파티셔너: 파티셔너]) (seqOp: (U, V) => U,combOp: (U, U) => U)
kv 쌍의 RDD에서는 키에 따라 값을 그룹화하여 병합할 때 각 값과 초기값을 seq 함수의 매개변수로 사용하여 계산하고, 반환된 결과를 새로운 kv 쌍으로 사용하며, 그런 다음 결과는 키가 병합되고 마지막으로 각 그룹의 값이 결합 함수에 전달되어 계산됩니다(처음 두 값이 먼저 계산되고 반환 결과와 다음 값이 전달됩니다). 결합 기능 등), 키와 계산 결과는 다음과 같습니다. 새로운 kv 쌍이 출력됩니다.
접이식키
매개변수: (zero값: V)(func: (V, V) => V): RDD[(K, V)]
AggregateByKey, seqop 및 콤보p의 단순화된 작업은 동일합니다.
CombineByKey[C]
매개변수: (createCombiner: V => C, mergeValue: (C, V) => C, mergeCombiners: (C, C) => C)
기능: V를 동일한 K에 대한 집합으로 병합
하위 주제 3
sortByKey([오름차순], [numTasks])
(K, V)의 RDD에서 호출되면 K는 Ordered 인터페이스를 구현하고 키별로 정렬된 (K, V)의 RDD를 반환해야 합니다.
지도값
형식(K, V)의 경우 V에서만 작동합니다.
조인(otherDataset, [numTasks])
(K, V) 및 (K, W) 유형의 RDD에서 호출되면 동일한 키에 해당하는 모든 요소가 함께 쌍을 이루는 (K, (V, W))의 RDD를 반환합니다.
cogroup(otherDataset, [numTasks])
(K,V) 및 (K,W) 유형의 RDD에서 호출되어 (K,(Iterable<V>,Iterable<W>)) 유형의 RDD를 반환합니다.
행동
감소(기능)
func 함수를 통해 RDD의 모든 요소를 집계하고, 먼저 파티션 내의 데이터를 집계한 다음, 파티션 간의 데이터를 집계합니다.
모으다()
드라이버에서 데이터 세트의 모든 요소를 배열로 반환합니다.
세다()
RDD의 요소 수를 반환합니다.
첫 번째()
RDD의 첫 번째 요소를 반환합니다.
취하다(n)
RDD의 처음 n개 요소로 구성된 배열을 반환합니다.
takeOrdered(n)
이 RDD로 정렬된 처음 n개 요소로 구성된 배열을 반환합니다.
골재
매개변수: (zeroValue: U)(seqOp: (U, T) ⇒ U, CombOp: (U, U) ⇒ U)
집계 함수는 seqOp와 초기값을 통해 각 파티션의 요소를 집계한 후 결합 함수를 사용하여 각 파티션의 결과를 초기값(zeroValue)과 결합합니다. 이 함수에 의해 반환된 최종 유형은 RDD의 요소 유형과 일치할 필요가 없습니다.
접기(숫자)(함수)
Folding 연산, Aggregate의 단순화된 연산, seqop, 콤보p은 동일합니다.
하위 주제 9
스파크 커널
스파크 핵심 구성 요소
운전사
집행자
스파크 일반 실행 프로세스
1) 작업이 제출되면 드라이버 프로그램이 먼저 시작됩니다. 2) 그런 다음 드라이버는 클러스터 관리자에 애플리케이션을 등록합니다. 3) 그런 다음 클러스터 관리자는 이 작업의 구성 파일을 기반으로 Executor를 할당하고 시작합니다. 4) Driver가 main 함수 실행을 시작하고 Spark 쿼리가 느리게 실행됩니다. Action 연산자가 실행되면 역계산이 시작되고 넓은 종속성에 따라 단계가 구분되며 각 단계는 Taskset에 해당합니다. 작업 세트의 여러 작업 검색 사용 가능한 리소스 예약을 위한 실행자. 5) 현지화 원칙에 따라 태스크는 실행을 위해 지정된 Executor에 배포됩니다. 태스크 실행 프로세스 동안 Executor는 드라이버와 계속 통신하고 태스크 실행 상태를 보고합니다.
배포 모드
독립형
하둡 원사
원사 클라이언트
원사 클러스터
메소스
k8s
단어 수
sc.textFile("xx"). flatMap(_.split(" ")).map((_,1)).reduceByKey(_ _).saveAsTextFile("xx")
최적화
데이터 편향
메모리 모델
일반적인 알고리즘
카프카
Hbase
정의
Hbase는 높은 신뢰성, 고성능, 열 중심, 확장 가능한 분산 스토리지 및 실시간 스토리지를 갖춘 noSql 시스템입니다.
특징
1. 대용량 저장 장치
Hbase는 PB 수준의 데이터를 저장하는데 적합하며, PC 수준의 데이터는 수십~수백 ms 내에 반환이 가능합니다.
2. 컬럼 보관
HBase 스토리지에는 많은 열을 포함하는 열 패밀리 스토리지만 있습니다.
3. 확장이 매우 쉽습니다.
Hbase의 확장성은 크게 두 가지 측면으로 반영되는데, 하나는 상위 계층 처리 능력 기반 확장(RegionServer)이고, 다른 하나는 스토리지 기반 확장(HDFS)이다. RegionSever 머신을 수평적으로 추가함으로써 Hbase의 상위 레이어 처리 능력을 향상시키고 더 많은 Region에 서비스를 제공할 수 있는 Hbsae의 능력을 향상시키기 위해 수평 확장이 수행됩니다.
4. 높은 동시성
Hbase를 사용하는 현재 아키텍처의 대부분은 값싼 PC를 사용하기 때문에 단일 IO의 지연은 실제로 작지 않으며 일반적으로 수십에서 수백 ms 사이입니다. 여기서 언급하는 높은 동시성은 주로 동시성의 경우 Hbase의 단일 IO 지연이 크게 떨어지지 않는다는 것을 의미합니다. 높은 동시성, 낮은 지연 시간의 서비스를 얻을 수 있습니다.
5. 스파스
Sparse는 주로 Hbase 열의 유연성을 위해 열 데이터가 비어 있으면 저장 공간을 차지하지 않습니다.
H베이스 아키텍처
아키텍처 다이어그램
고객
HBase 액세스를 위한 인터페이스를 포함하고 HBase 액세스 속도를 높이기 위한 캐시도 포함합니다. 예를 들어 캐시에는 .META 정보가 포함되어 있습니다.
사육사
마스터의 고가용성, reginserver 모니터링, 메타데이터 입력 및 클러스터 구성 유지 관리를 주로 담당합니다.
ZK는 클러스터에서 하나의 마스터만 실행되도록 보장합니다. 마스터가 실패하면 경쟁 메커니즘을 통해 새 마스터가 생성됩니다.
zk를 통해 지역 서버의 상태를 모니터링한다. 지역 서버가 비정상일 경우 콜백 형태로 지역 서버의 온라인 및 오프라인 정보를 마스터에게 알린다.
zk를 통해 메타데이터를 저장하기 위한 통합 항목 정보
HDFS
HBase에 대한 기본 데이터 스토리지 서비스 제공
메타데이터 및 테이블 데이터에 대한 기본 분산 스토리지 서비스 제공
다수의 데이터 사본으로 높은 신뢰성과 가용성 보장
H마스터
RegionServer에 지역 할당
클러스터 전반에 걸쳐 로드 밸런싱 유지
클러스터 메타데이터 정보 유지
실패한 Region을 발견하고 실패한 Region을 일반 RegionServer에 할당합니다.
RegionSever가 실패하면 해당 Hlog의 분할을 조정합니다.
HReginServer
주로 사용자의 읽기 및 쓰기 요청을 처리합니다.
마스터가 할당한 Region 관리
클라이언트의 읽기 및 쓰기 요청 처리
기본 HDFS와 상호 작용하고 HDFS에 데이터를 저장하는 일을 담당합니다.
지역이 커진 후 지역 분할을 담당합니다.
Storefile 병합을 담당합니다.
역할
H마스터
1. 지역 서버 모니터링
2. RegionServer 장애 조치 처리
삼. 메타데이터 변경 처리
4. 지역 할당 또는 이전 처리
5. 유휴 시간 동안 데이터 로드 밸런싱
6. Zookeeper를 통해 고객에게 위치를 게시하세요.
지역서버
1. HBase의 실제 데이터를 저장하는 역할을 담당합니다.
2. 할당된 Region을 처리합니다.
삼. 캐시를 HDFS로 플러시
4. Hlog 유지
5. 압축 수행
6. 지역 조각화 처리를 담당합니다.
기타 구성 요소
미리 쓰기 로그(월)
HBase 수정 기록, HBase에서 데이터를 읽고 쓸 때 데이터는 디스크에 직접 기록되지 않으며 일정 기간 동안 메모리에 유지됩니다(시간 및 데이터 볼륨 임계값 설정 가능). 그러나 데이터를 메모리에 저장하면 데이터 손실이 발생할 확률이 높아질 수 있습니다. 이 문제를 해결하기 위해 먼저 Write-Ahead logfile이라는 파일에 데이터를 기록한 다음 메모리에 기록합니다. 따라서 시스템 장애 시 이 로그 파일을 통해 데이터를 재구성할 수 있습니다.
지역
HBase 테이블의 샤딩을 위해 HBase 테이블은 RowKey 값을 기반으로 여러 영역으로 나누어지고 RegionServer에 저장됩니다. RegionServer에는 여러 개의 서로 다른 영역이 있을 수 있습니다.
가게
HFile은 Store에 저장되며 하나의 Store는 HBase 테이블의 컬럼 패밀리에 해당합니다.
멤스토어
이름에서 알 수 있듯이 메모리에 위치하며 현재 데이터 작업을 저장하는 데 사용되는 메모리 저장소입니다. 따라서 데이터가 WAL에 저장된 후 RegionServer는 키-값 쌍을 메모리에 저장합니다.
H파일
디스크에 원본 데이터를 담고 있는 실제 물리적 파일, 즉 실제 저장 파일입니다. StoreFile은 HDFS에 Hfile 형태로 저장됩니다.
HBase 작업
HBase 데이터 구조
RowKey
nosql 데이터베이스와 마찬가지로 rowkey는 데이터 액세스를 위한 기본 키입니다. HBase 행에 액세스하는 세 가지 방법이 있습니다.
1. 단일 rowkey를 통한 액세스
2. rowkey 범위 전달(일반)
3. 전체 테이블 스캔
RowKey 행 키(RowKey)는 임의의 문자열일 수 있습니다(최대 길이는 64KB, 실제 애플리케이션의 길이는 일반적으로 10~100바이트입니다). HBASE 내부에서는 RowKey가 바이트 배열로 저장됩니다. 저장 시 데이터는 RowKey의 사전순(바이트순)으로 저장됩니다. RowKey를 설계할 때 저장소 속성을 완전히 정렬하고 자주 함께 읽는 행을 저장하는 것이 필요합니다. (위치 의존성)
기둥 가족
열 계열: HBASE 테이블의 각 열은 특정 열 계열에 속합니다. 열 패밀리는 테이블 스키마의 일부이며(열은 아님) 테이블을 사용하기 전에 정의해야 합니다. 열 이름 앞에는 열 계열이 붙습니다. 예를 들어,courses:history 및courses:math는 모두 코스 열 패밀리에 속합니다.
셀
{rowkey, 열 제품군:columu, 버전}으로 고유하게 식별되는 단위입니다. 셀의 데이터는 유형이 없으며 모두 바이트코드 형식으로 저장됩니다.
타임 스탬프
HBase에서는 행키(rowkey)와 열(column)에 의해 결정되는 저장 단위를 셀(cell)이라고 합니다. 각 셀은 동일한 데이터의 여러 버전을 저장합니다. 버전은 타임스탬프를 기준으로 색인이 생성됩니다. 타임스탬프 유형은 64비트 정수입니다. 타임스탬프는 HBASE에 의해 할당될 수 있습니다(데이터가 기록될 때 자동으로). 이 경우 타임스탬프는 밀리초 단위로 정확한 현재 시스템 시간입니다. 타임스탬프는 클라이언트가 명시적으로 할당할 수도 있습니다. 애플리케이션이 데이터 버전 충돌을 피하려면 고유한 타임스탬프를 생성해야 합니다. 각 셀에는 다양한 버전의 데이터가 역시간순으로 정렬됩니다. 즉, 최신 데이터가 먼저 나열됩니다. 너무 많은 데이터 버전으로 인해 발생하는 관리(저장 및 인덱싱 포함) 부담을 피하기 위해 HBASE는 두 가지 데이터 버전 재활용 방법을 제공합니다. 하나는 마지막 n 버전의 데이터를 저장하는 것이고, 다른 하나는 최근 기간(예: 지난 7일) 내의 버전을 저장하는 것입니다. 사용자는 각 컬럼 패밀리에 대해 이를 설정할 수 있습니다.
네임스페이스
네임스페이스 구조
테이블
테이블의 경우 모든 테이블은 네임스페이스의 멤버입니다. 즉, 테이블은 특정 네임스페이스에 속해야 합니다. 지정하지 않으면 기본 네임스페이스에 속하게 됩니다.
지역서버 그룹
네임스페이스에는 기본 RegionServer 그룹이 포함되어 있습니다.
허가
권한과 네임스페이스를 사용하면 액세스 제어 목록(ACL)을 정의할 수 있습니다.
몫
할당량은 네임스페이스에 포함될 수 있는 지역 수를 적용할 수 있습니다.
HBase 데이터 원칙
HBase 읽기 원리
1) 클라이언트는 먼저 Zookeeper에 접속하여 메타 테이블에서 해당 영역의 위치를 읽은 후 메타 테이블의 데이터를 읽습니다. 메타는 사용자 테이블의 지역 정보도 저장합니다.
2) 네임스페이스, 테이블 이름, rowkey를 기준으로 메타 테이블에서 해당 지역 정보를 찾습니다.
3) 이 지역에 해당하는 지역 서버를 찾습니다.
4) 해당 지역을 찾으세요.
5) 먼저 MemStore에서 데이터를 찾고, 그렇지 않은 경우 BlockCache에서 읽습니다.
6) BlockCache를 아직 사용할 수 없으면 StoreFile에서 읽습니다(읽기 효율성을 위해).
7) StoreFile에서 데이터를 읽어오면 바로 클라이언트로 반환되지 않고 BlockCache에 먼저 쓴 후 클라이언트로 반환됩니다.
HBase 작성 프로세스
1) 클라이언트가 HregionServer에 쓰기 요청을 보냅니다.
2) HregionServer는 HLog(로그 미리 쓰기)에 데이터를 씁니다. 데이터 지속성 및 복구를 위해;
3) HregionServer는 메모리(MemStore)에 데이터를 씁니다.
4) 클라이언트가 성공적으로 작성되었다는 피드백.
데이터 플러시 프로세스
1) MemStore 데이터가 임계값(기본값은 128M, 이전 버전은 64M)에 도달하면 데이터가 하드 디스크로 플러시되고 메모리의 데이터가 삭제되며 HLog의 기록 데이터가 삭제됩니다.
2) 그리고 데이터를 HDFS에 저장합니다.
3) HLog에 마크 포인트를 만듭니다.
데이터 병합 프로세스
1) 데이터 블록 수가 4에 도달하면 Hmaster는 병합 작업을 트리거하고 Region은 병합을 위해 데이터 블록을 로컬로 로드합니다.
2) 병합된 데이터가 256M을 초과하는 경우 데이터를 분할하고 분할된 지역을 다른 HregionServer 관리에 할당합니다.
3) HregionServer가 다운되면 HregionServer에서 hlog를 분할한 다음 이를 다른 HregionServer에 할당하여 로드하고 .META를 수정합니다.;
4) 참고: HLog는 HDFS에 동기화됩니다.
Hive와 HBase의 통합 사용
hive-hbase-handler-1.2.2.jar을 통해 통합됨
Hive 테이블을 생성하고 이를 HBase 테이블과 연결한 다음 HBase 테이블에 영향을 주면서 Hive 테이블에 데이터를 삽입합니다.
HBase에 hbase_emp_table 테이블이 저장되어 있고, HBase에 있는 hbase_emp_table 테이블을 연결하기 위해 Hive에 외부 테이블이 생성되어 Hive를 사용하여 HBase 테이블의 데이터를 분석할 수 있습니다.
HBase 최적화
고가용성(여러 Hmaster)
HBase에서 Hmaster는 RegionServer의 수명 주기를 모니터링하고 다음과 같이 RegionServer의 로드 균형을 조정하는 역할을 담당합니다. Hmaster가 끊기면 전체 HBase 클러스터가 비정상 상태가 되며 이때의 작동 상태는 동일하지 않게 됩니다. 너무 오래 지속됩니다. 따라서 HBase는 Hmaster의 고가용성 구성을 지원합니다.
사전 분할된
수동으로 사전 분할
create 'staff1','info','partition1',SPLITS => ['1000','2000','3000','4000']
5개의 파티션 [최소,1000),[1000,2000),[2000,3000),[3000,4000),[4000,최대]를 나타냅니다.
16진수 시퀀스 사전 파티션 생성
'staff2','info','partition2',{NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'} 생성
16진수가 15개의 파티션으로 나누어져 있음을 나타냅니다.
파일에 설정된 규칙에 따라 사전 분할
'staff3','partition3',SPLITS_FILE => 'splits.txt' 생성
Splits.txt의 내용은 다음과 같습니다.
아아아아 bbbb cccc dddd
javaAPI가 파티션을 생성합니다.
//알고리즘을 맞춤화하여 일련의 해시 해시 값을 생성하고 이를 2차원 배열에 저장합니다. byte[][] SplitKeys = 해시 값 함수 //HBaseAdmin 인스턴스 생성 HBaseAdmin hAdmin = new HBaseAdmin(HBaseConfiguration.create()); //HTableDescriptor 인스턴스 생성 HTableDescriptor tableDesc = new HTableDescriptor(tableName); //HTableDescriptor 인스턴스와 해시 값의 2차원 배열을 통한 사전 파티셔닝을 통해 HBase 테이블 생성 hAdmin.createTable(tableDesc, SplitKeys);
행 키 디자인
Rowkey는 데이터 조각의 고유 식별자입니다. 데이터 왜곡을 방지하려면 rowkey가 지역에 고르게 분산되도록 적절하게 디자인해야 합니다.
1. 난수, 해시, 해시 값 생성
예: 원래 rowKey는 1001이고 SHA1 이후에는 dd01903921ea24941c26a48f2cec24e0bb0e8cc7이 됩니다. 원래 rowKey는 3001이었고 SHA1 이후에는 49042c54de64a1e9bf0b33e00245660ef92dc7bd가 되었습니다. 원래 rowKey는 5001이었고 SHA1 이후에는 7b61dec07e02c188790670af43e717f0f46e8913이 되었습니다. 이 작업을 수행하기 전에 일반적으로 데이터 세트에서 샘플을 추출하여 각 파티션의 중요 값으로 해시할 rowKey의 종류를 결정합니다.
2. 문자열 반전
예:20170524000001을 10000042507102로 변환
3. 문자열 연결
20170524000001_a12e 20170524000001_93i7
메모리 최적화
HBase는 동작 중에 많은 메모리 오버헤드가 필요합니다. 결국 테이블은 메모리에 캐시될 수 있습니다. 일반적으로 사용 가능한 전체 메모리의 70%가 HBase의 Java 힙에 할당됩니다. 그러나 너무 큰 힙 메모리를 할당하는 것은 권장되지 않습니다. GC 프로세스가 너무 오랫동안 계속되면 RegionServer가 장기간 사용할 수 없는 상태가 되기 때문입니다. 일반적으로 16~48G 메모리이면 충분합니다. 프레임워크가 차지하는 메모리가 너무 높아 시스템 메모리가 부족하면 프레임워크도 시스템 서비스에 의해 종료됩니다.
기본 최적화
1. HDFS 파일에 콘텐츠 추가 허용
hdfs-site.xml, hbase-site.xml 속성: dfs.support.append 설명: HDFS 추가 동기화를 켜면 HBase 데이터 동기화 및 지속성과 완벽하게 협력할 수 있습니다. 기본값은 true입니다.
2. DataNode에서 허용하는 최대 열린 파일 수를 최적화합니다.
hdfs-site.xml 속성: dfs.datanode.max.transfer.threads 설명: HBase는 일반적으로 클러스터 및 데이터 작업의 수와 크기에 따라 많은 수의 파일을 동시에 작동합니다. 4096 이상으로 설정하세요. 기본값: 4096
3. 높은 대기 시간으로 데이터 작업의 대기 시간을 최적화합니다.
hdfs-site.xml 속성: dfs.image.transfer.timeout 설명: 특정 데이터 작업에 대한 지연이 매우 높고 소켓이 더 오래 기다려야 하는 경우 다음을 수행하는 것이 좋습니다. 소켓이 시간 초과되지 않도록 이 값은 더 큰 값(기본값 60000밀리초)으로 설정됩니다.
4. 데이터 쓰기 효율성 최적화
mapred-site.xml 속성: mapreduce.map.output.compress mapreduce.map.output.compress.codec 설명: 이 두 데이터를 활성화하면 파일 쓰기 효율성이 크게 향상되고 쓰기 시간이 단축될 수 있습니다. 첫 번째 속성 값을 true로 변경하고 두 번째 속성 값을 org.apache.hadoop.io.compress.GzipCodec 또는 기타 압축 방법으로 변경합니다.
5. RPC 리스너 수 설정
hbase-site.xml 속성: hbase.regionserver.handler.count 설명: 기본값은 30이며 RPC 리스너 수를 지정하는 데 사용됩니다. 클라이언트 요청 수에 따라 조정될 수 있습니다. 읽기 및 쓰기 요청이 있는 경우 이 값을 늘리십시오.
6. HStore 파일 크기 최적화
hbase-site.xml 속성: hbase.hregion.max.filesize 설명: 기본값은 10737418240(10GB)입니다. HBase MR 작업을 실행해야 하는 경우 한 영역이 맵 작업에 해당하므로 이 값을 줄이면 됩니다. 단일 영역이 너무 크면 맵 작업 실행 시간도 너무 길어집니다. 긴. 이 값의 의미는 HFile의 크기가 이 값에 도달하면 영역이 두 개의 Hfile로 분할된다는 것입니다.
7. hbase 클라이언트 캐시 최적화
hbase-site.xml 속성: hbase.client.write.buffer 설명: HBase 클라이언트 캐시를 지정하는 데 사용됩니다. 이 값을 늘리면 RPC 호출 수를 줄일 수 있지만 더 많은 메모리를 소비하게 되며 그 반대의 경우도 마찬가지입니다. 일반적으로 RPC 수를 줄이려면 특정 캐시 크기를 설정해야 합니다.
8. HBase에서 얻은 행 수를 스캔하려면 scan.next를 지정하십시오.
hbase-site.xml 속성: hbase.client.scanner.caching 설명: scan.next 메소드로 얻은 기본 행 수를 지정하는 데 사용됩니다. 값이 클수록 메모리 소비도 늘어납니다.
9. 플러시, 컴팩트, 분할 메커니즘
MemStore가 임계값에 도달하면 Memstore의 데이터가 Storefile로 플러시됩니다. 압축 메커니즘은 플러시된 작은 파일을 큰 Storefile로 병합합니다. 분할은 지역이 임계값에 도달하면 지나치게 큰 지역이 두 개로 분할됨을 의미합니다.
관련된 속성: 즉, 128M은 Memstore의 기본 임계값입니다. hbase.hregion.memstore.flush.size: 134217728 즉, 이 매개변수의 기능은 단일 HRegion의 모든 Memstore 크기 합계가 지정된 값을 초과하는 경우 단일 HRegion의 모든 Memstore를 플러시하는 것입니다. RegionServer의 플러시는 생산 및 소비 모델을 시뮬레이션하기 위해 대기열에 요청을 추가하여 비동기적으로 처리됩니다. 그러면 여기서 문제가 발생합니다. 대기열이 소비할 시간이 없고 대량의 요청 백로그가 생성되면 메모리가 갑자기 증가할 수 있으며 최악의 경우 OOM이 트리거될 수 있습니다. hbase.regionserver.global.memstore.upperLimit: 0.4 hbase.regionserver.global.memstore.lowerLimit: 0.38 즉, MemStore에서 사용하는 총 메모리 양이 hbase.regionserver.global.memstore.upperLimit에 지정된 값에 도달하면 여러 MemStore가 파일에 플러시됩니다. MemStore 플러시 순서는 크기가 내림차순으로 실행됩니다. MemStore에서 사용하는 메모리가 lowerLimit보다 적습니다.
블룸 필터
깜박거리다
데이터x1
프레스토 악장
오지
데이터 자산
스프링부트
면접관 새우와 돼지 심장 면접 질문
리눅스
자기 소개
1분 동안 자신을 소개하세요. 이전 회사에서는 주로 Xiaomi, JD.com, Che300에 액세스하는 China Continent Insurance 데이터 플랫폼을 구축했습니다. Continent Insurance Company의 내부 생성 및 은행 관련 보험 데이터는 주문 주제를 포함한 여러 주제로 나누어졌습니다. , 고객 주제, 청구 주제, 기한이 지난 주제, 승인 주제 및 불만 주제 제가 개발하는 비즈니스에는 주문 주제, 사용자 주제 및 기한이 지난 주제가 포함됩니다. 제가 직장에서 하는 일은 데이터 웨어하우스 모델링, 데이터 처리, 데이터 품질 모니터링과 관련됩니다. 및 주제 지표 계산. ;주로 적용되는 기술에는 Hive, Spark, Hue, Impala, Hadoop, Infomatical 등이 포함되며 플랫폼은 매일 약 1TB의 데이터를 추가합니다.
사업소개