목록전체 글 (182)
취미가 좋다
하둡 에코시스템은 빅데이터를 효율적으로 다루기 위한 프로젝트들의 집합니다. 빅데이터 저장을 위한 HDFS 빅데이터 처리를 위한 MapReduce 두 가지를 코어 프로젝트 외에도 많은 프로젝트들이 존재한다. 자바 기반의 프레임워크이다. HDFS MapReduce YARN Sqoop Hive IMPALA KUDU Ranger HUE Zookeeper nifi Oozie Ozone Spark Kafka Cassandra Pig STORM FLUME Tajo MAHOUT Ambari HDFS - 하둡 네트워크에 연결된 기기에 데이터를 분산해서 저장한다. - 분산된 데이터는 복사본(보통 3개)을 만들어 나누어 저장하기 때문에 높은 가용성을 가진다. - 고가용성(high ability) : 하나가 문제가 생겨도 안..
List vs Tuple vs Array List Tuple Array 요소를 생성, 삭제, 수정 가능 O X O 선언 [ ] ( ) import array 요소의 데이터 타입 여러가지 가능 여러가지 가능 하나의 타입만 가능 공통점 요소의 순서가 있고 index로 접근할 수 있다. 특징 스택, 큐를 구현할 때 자주 새용된다. - 요소들이 메모리의 연속된 위치에 존재한다. lambda : 함수의 형태를 더 짧게 표현한 문법 람다 함수에는 이름이 없다. 복잡하면 이해하거나 사용하기 어렵기 때문에 간단한 식만 사용한다. map() 함수와 많이 사용된다. map() 함수는 인자로 함수를 받는다. 두 번째 인자로 받은 데이터(리스트 등)의 요소에 함수를 적용하여 반환한다. lambda 매개변수 : 반환되는 값 a..
지금까지 ME를 해결하기 위한 SW 솔루션, HW 솔루션, OS가 지원하는 SW 솔루션을 알아봤다. 이 방법들은 low-level에서의 접근으로 Flexible하지만 복잡하다. 마지막으로 Language-level(high-level)에서 접근해보자. Monitor High-level Mechanism은 프로그래밍 언어로 상호배제(ME)를 수행한다. 그래서 사용이 비교적 쉽다. 여러 High-level Mechanism 중 Monitor만 살펴보자. Monitor 한 번에 한 프로세스만 들어갈 수 있는 Critical data, Critical sections 영역이 있다. C#, C++, F#, VB, java 에서 제공 장점 : 사용이 쉬워서 에러가 발생할 가능성이 낮다. 단점 : 지원하는 언어에서만..
https://leetcode.com/problems/next-permutation/ Next Permutation - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com Solution class Solution: def nextPermutation(self, nums): temp = [] for idx in range(len(nums)-1, 0, -1): if nums[idx] nums[idx-1]: temp[i], nums[idx-1] = nums[idx-1],..
Proxy Server 클라이언트와 서버 사이에 위치하여 통신을 대리 수행하는 서버이다. 캐시, 보안, 트래픽 분산 등 여러 장점을 가진다. Forward Proxy 클라이언트와 인터넷 사이에 있는 프록시 서버이다. 일반적으로 말하는 프록시 서버이다. 캐싱 클라이언트가 요청한 내용을 캐싱한다. 연결된 클라이언트가 요청한 데이터를 반환할 때 저장했다가 다른 클라이언트가 동일한 데이터를 요청하면 인터넷을 거치지 않고 바로 반환해준다. 전송 시간이 절약되고 외부 요청이 감소되어 네트워크 병목 현상을 방지한다. 익명성 클라이언트가 보낸 요청을 감춘다. 클라이언트의 요청이 프록시 서버를 거치면서 프록시 서버가 요청한 것처럼 보인다. 서버가 받은 요청은 프록시 서버의 IP이므로 서버가 누가 보냈는 지 알 수 없다...
비슷해보이지만 다른 Blocking과 동기화를 알아보자. 아래처럼 A함수에 B함수가 들어가 있다고 가정한다. def func_A(): func_B() ... Blocking 함수 B의 동작이 마칠 때까지 제어권이 B에게 있다. B이 동작이 끝난 후에 A에게 제어권이 돌아간다. Non-blocking 함수 B가 시작하자마자 제어권을 함수 A에게 넘긴다. 함수 B가 끝나지 않았지만 A가 다음 코드를 실행한다. 즉, 내부에서 호출된 함수가 제어권을 바로 주는 지, 동작을 끝낸 뒤 주는 지에 따라 구별된다. Synchronous (동기) 함수 A가 기다리면서 함수 B의 수행 결과나 종료 상태를 계속 체크한다. Asynchronous (비동기) 함수 B의 수행 상태를 함수 A가 신경쓰지 않는다. Callback ..