mysql 재기동 명령어

sudo service mysql [stop/start/restart]

 

DB(Maria DB) M-S 재구성

이 내용은 M-S 구조가 깨졌을때 재구성 하는 작업입니다.

slave 재기동 후 IO Thread, SQL Thread  yes로 나오면 수행 할 필요 없습니다.

 

Maria DB binary log를 통한 replication만 지원하기 때문에마스터의 내용을 복사 후 binary log 포지션을 기입해 주어 따라가게끔 해주어야 합니다.

bin log는 로컬파일을 사용한다는 장점이 있지만 Active - Standby 개념이 아닌 Master- Slave 관계여서 수동으로 작업해야할 게 많습니다.

 

#1~4과정은 데이터를 새로 엎어치는 내용입니다. 데이터의 보존을 위해  lock 을 걸어주어야 합니다.

#2 , 4번과정의 dump와 다시 import 하는 작업은 스키마 구조를 같게 하기위해서 하는작업입니다. - 단순히 slave 깨진거라면 2,4번 생략 가능

1. Master DB Lock (on Master)

Maria DB > FLUSH TABLES WITH READ LOCK;

 

2. mysql dump (On Master, Master데이터를slave import하기위해 )

mkdir /home/ndap/henry

mysqldump -h salvehost -uroot -p --extended-insert --routines --triggers --all-databases > /home/ndap/henry/mysql_backup_$(date +\%Y\%m\%d).sql

 

3. slave기능stop (on Slaves)

stop slave;

 

4. mysqldump파일import (On slaves)

mysql -uroot -p < mysql_backup_$(date +\%Y\%m\%d).sql

 

5. Masterbin log메모

Maria DB >  SHOW MASTER STATUS;

+-------------------+----------+--------------+------------------+

| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-------------------+----------+--------------+------------------+

| mysql-bin.000019 |  2454692 |              |                  |

+-------------------+----------+--------------+------------------+

 

6. slave구성 재설정(on slave)

Maria DB >

change master to

MASTER_HOST="master.host" ,

MASTER_USER="*****" ,

MASTER_PASSWORD="******" ,

MASTER_LOG_FILE="mysql-bin.000019",

MASTER_LOG_POS=2454692 ;

-->       MASTER_LOG_FILE에는 5번항목의 File 명을 (=mysql-bin.000019) 적어준다.

           MASTER_LOG_POS에는 5번항목의 Position(= 2454692 ) 적어준다

 

7. Slave기능 시작(On Slave)

Maria DB > start slave ;

 

8. Slave상태 확인

Maria DB > show slave status \G;

IO Thread, SQL Thread  yes로 나와야함

9. Master DB Unlock

UNLOCK TABLES;

Intro

Presto는 Facebook의 넘쳐나는 페타바이트급 데이터를 효율적으로 분석하기 위해 2012년도에 kickoff 된 프로젝트 입니다.
2013년 가을 Facebook에서 apache 라이선스를 적용하여 Presto 오픈소스를 공개하였습니다. [FE 발표

즉, 기업이든 연구기관이든 큰 문제없이 무료로 사용할 수 있지요. [아파치 라이선스 2.0 FAQ  ]

 

Presto란 ?

Presto는 Facebook kickoff 프로젝트의 내용처럼 TB, PB급 데이터를 효율적으로 처리하기 위해 만들어졌습니다. 대용량의 데이터를 빠르게 추출하기 원하면 Hive 보다는 Presto를 사용하는 것이 적합합니다.

Presto의 핵심은 두가지입니다.

  • 다양한 소스 지원 - Hive 메타스토어, RDBMS, 아마존 S3, HBase 등 다양한 소스로부터 데이터를 읽어올수 있다.

  • MR보다 빠르다 - MR Job 베이스의 Hive는 중간 단계별 결과를 Disk(HDFS or Local FS)상에 저장하는데, Presto는 이를 Memory상에 저장합니다.

 

아키텍쳐

에코관점의 Presto 아키텍쳐

Presto는 하나의 Coordinator와 실제로 job을 수행하는 여러개의 Worker로 나누어집니다.
Coordinator는 HBase, Hive 등 다양한 데이터 소스등을 읽어와 worker에게 전달을 하는 인터페이스 역할을 합니다.

https://labs.gree.jp/blog/2014/12/12838/ 

 

내부 동작 과정 (Daemon)

  • Coordinator (HIVE의 리소스 매니저와 비슷)
    * Clinet와 직접적은 통신을 하는 Gateway 역할을 함.
    * Client를 통해 들어오는 쿼리를 관리하며, Workerdata 처리를 하게끔 task를 보내줌(= excute).

  • Worker (HIVE의 노드 매니저와 비슷)
    * Coordinator를 통해 받은 task를 기반으로 data source에 접근함.
    * 리턴 결과를 Coordinator가 아닌 바로 Client로 보내 줌.

 

상세 동작 과정

0.    Discovery Service : Worker 실행시 CoordinatorDiscovery Service로 리스트가 등록된다. 이 리스트를 기반으로 CoordinatorWorker에게 excute를 전달 합니다.

1.    ClientHTTP 프로토콜로 쿼리를 Coordinator Parser 에 전달 합니다.

2.    CoordinatorPlanner로 쿼리플랜을 작성 합니다.

3.    Planner가 작성되면 CoordinatorSchedulerWorker가 일을 수행하게끔 task를 전달합니다.(excute)

4.    WorkerConnector plugin을 통해 다양한 Data source로부터 데이터를 읽어옵니다. 이 작업은 Memory상에서 수행됩니다.
(
중요!) 메모리상에서 task가 진행되기 때문에 worker가 부담스러워 하지 않도록 client 딴에서 쿼리 튜닝이 필수입니다. 막 쓰다가 엔지니어와 싸움날 수 있습니다 :(

5.    Worker는 작업이 끝나면 바로 Client로 결과를 보내줍니다.

presto definitive guide storage environment 中

개요

하둡 저장소에 저장된 hive warehouse 디렉토리별 용량을 확인하기 위해 아래 명령어를 사용하였다.

hadoop fs -du -h /user/hive

하지만 아래와 같이 권한 문제로 일부 경로에 접근이 불가하였다.

du: Permission denied: user=username, access=READ_EXECUTE, inode="/user/hive/.staging":hive:hive:drwx------

 

원인

  • 대부분의 현업에서, 엔지니어의 경우 root 계정이 아닌 superuser do(sudo) 실행이 가능한 계정을 받을 것 이다.
  • 그렇기 때문에, hdfs는 user 권한에 따라 탐색이 불가능 할 수 있다.

 

해결

  • 특정유저로 명령어 실행(sudo -u username "명령어")
sudo -u hdfs hadoop fs -du -h /user/hive

ResourceManager

    • YARN 클러스터의 Master 서버로 하나 또는 이중화를 위해 두개의 서버에만 실행됨
    • 클러스터 전체의 리소스를 관리
    • YARN 클러스터의 리소스를 사용하고자 하는 다른 플랫롬으로부터 요청을 받아 리소스 할당(스케줄링)

NodeManager

    • YARN 클러스터의 Worker 서버로 ResourceManager를 제외한 모든 서버에 실행
    • 사용자가 요청한 프로그램을 실행하는 Container fork 시키고 Container를 모니터링 Container 장애 상황 또는 Container가 요청한 리소스보다 많이 사용하고 있는지 감시(요청한 리소스보다 많이 사용하면 해당 Container kill 시킴)

 

Yarn Architecture

  • 1) 리소스매니저는 글러볼 스케줄러라고 정의할 수 있다. 리소스매니저는 전체 클러스터에서 가용한 모든 시스템 자원을 관리한다. 얀 클러스터에서 실행되는 애플리케이션이 리소스를 요청하면 이를 적절하게 분배하고, 리소스 사용 상태를 모니터링한다.

  • 2) 노드매니저는 맵리듀스의 태스크트래커의 기능을 담당한다. 태스크트래커가 각 슬레이브 서버마다 하나의 데몬이 실행된 것처럼 노드매니저도 각 슬레이브에서 하나의 데몬이 실행된다. 노드매니저는 컨테이너(Container)를 실행하고, 컨테이너의 라이프 사이클을 모니터링한다.

  • 3) 컨테이너는 노드매니저가 실행되는 서버의 시스템 자원을 표현한다. CPU, 메모리, 디스크, 네트워크 같은 다양한 시스템 자원을 표현한다. 맵리듀스의 태스크트래커가 태스크 단위로 잡을 실행했다면 노드매니저는 컨테이너 단위로 애플리케이션을 실행하고 각 상태를 스케줄링한다.

  • 4) 애플리케이션마스터는 하나의 애플리케이션을 관리하는 마스터 서버다. 클라이언트가 얀에 애플리케이션 실행을 요청하면 얀은 하나의 애플리케이션에 하나의 애플리케이셔마스터를 할당한다. 예를 들어, 얀 클러스터에 하나의 맵리듀스 잡과 하나의 스톰 애플리케이션 실행을 요청했다면 두 개의 애플리케이션마스터가 실행된다. 애플리케이션마스터는 애플리케이션에 필요한 리소스를 스케줄링하고, 노드매니저에 애플리케이션이 필요한 컨테이너를 실행할 것을 요청한다.

 

HADOOP 이란?

  • 분산 환경에서 빅데이터를 저장하고 관리할 수 있는 자바 기반의 오픈소스 프레임워크.
  • 무결성 원칙때문에, 이동 삭제 복사는 가능하나 수정은 불가능.
  • 병렬로 접근하기 때문에 대용량데이터 I/O가 빠름
Hadoop은 데몬 자체를 뜻하고, HDFS는 Hadoop클러스터로 이루어진 File System 지칭합니다.
통상 같은 의미로 사용합니다

 

 

HDFS(Hadoop Distributed File System) 동작 과정

Data Write 과정

hadoop write

  • 애플리케이션이 HDFS 클라이언트에 파일저장 요청
  • HDFS 클라이언트가 네임노드에 사용자가 요청한 파일경로 생성 요청
  • 네임노드가 데이터노드들(파이프라인) 반환 (복제개수만큼)
  • 첫번째 데이터노드에 저장, 첫번째 데이터노드는 두번째 데이터노드로 전송, 로컬 저장후 세번쨰로 전송... 완료 후 첫번 째 데이터노드에 완료 사실 반환
  • 데이터노드장애 시 파이프라인에서 제거 후 네임노드가 다른 데이터노드 배치
  • 첫번째 데이터노드가 클라이언트에게 저장완료 응답
  • 클라이언트가 애플리케이션에 완료 응답

 

Data Read 과정

hadoop read

  • 네임노드에게 요청한 파일의 블록 위치 정보 요청
  • 클라이언트에 가까운 순서대로 정렬하여 데이터노드 목록 반환.
  • 클라이언트는 데이터노드에 파일 조회 요청

 

사진 출처 : http://www.corejavaguru.com/bigdata/hadoop

 

[빅데이터] 얀 리소스 매니저 API 호출

 

Command

#cmd
 GET "[ResourceManagerHost]/ws/v1/cluster/apps?param1=value1&param2=value2&param3=value3..."

# ex) if you want to return "states Running" by limit 20
 GET "http://ResourceManager.host.net:8088/ws/v1/cluster/apps?limit=20&states=RUNNING"

Return Example

  • You can Return  JSON Type
  • 예 )
    {"apps":{"app":[{"id":"application_1579679167074_XXXX","user":"hive","name":"SELECT\r\n\t*\r\nFROM\r\n(\r\n\tSELECT buy.univer...ac(Stage-2)","queue":"default","state":"KILLED","finalStatus":"KILLED","progress":100.0,"trackingUI":"History","trackingUrl":"http://namenode.host.net:8088/proxy/application_1579679167074_XXXX/","diagnostics":"Application killed by user.","clusterId":158218459XXXX,"applicationType":"MAPREDUCE","applicationTags":"","startedTime":1580883583147,"finishedTime":1580883604084,"elapsedTime":20937,"amContainerLogs":"http://datanode.host.net:8042/node/containerlogs/container_e96_15796791XXXX/hive","amHostHttpAddress":"datanode.host.net:8042","allocatedMB":-1,"allocatedVCores":-1,"runningContainers":-1,"memorySeconds":4133,"vcoreSeconds":4,"preemptedResourceMB":0,"preemptedResourceVCores":0,"numNonAMContainerPreempted":0,"numAMContainerPreempted":0,"logAggregationStatus":"NOT_START"}]}}

 

Reference :: Parameter List

 

Item Data Type Description
id string The application id
user string The user who started the application
name string The application name
Application Type string The application type
queue string The queue the application was submitted to
state string The application state according to the ResourceManager - valid values are members of the YarnApplicationState enum: NEW, NEW_SAVING, SUBMITTED, ACCEPTED, RUNNING, FINISHED, FAILED, KILLED
finalStatus string The final status of the application if finished - reported by the application itself - valid values are: UNDEFINED, SUCCEEDED, FAILED, KILLED
progress float The progress of the application as a percent
trackingUI string Where the tracking url is currently pointing - History (for history server) or ApplicationMaster
trackingUrl string The web URL that can be used to track the application
diagnostics string Detailed diagnostics information
clusterId long The cluster id
startedTime long The time in which application started (in ms since epoch)
finishedTime long The time in which the application finished (in ms since epoch)
elapsedTime long The elapsed time since the application started (in ms)
amContainerLogs string The URL of the application master container logs
amHostHttpAddress string The nodes http address of the application master
allocatedMB int The sum of memory in MB allocated to the application’s running containers
allocatedVCores int The sum of virtual cores allocated to the application’s running containers
runningContainers int The number of containers currently running for the application
memorySeconds long The amount of memory the application has allocated (megabyte-seconds)
vcoreSeconds long The amount of CPU resources the application has allocated (virtual core-seconds)
limit int the # of returns limit
 

+ Recent posts