220413 데이터 파이프라인 - 5

데이터 파이프라인(Data Pipeline)

이번 포스팅에서는 웹 서버 전용 EC2 인스턴스를 생성하고, 생성한 EC2 인스턴스에 httpd 설치 및 실행을 해보고 간단한 테스트 웹 페이지를 띄워보는 실습을 해본다.

Httpd

우선 웹 서버 전용 EC2 인스턴스를 생성한 뒤에 해당 EC2 인스턴스에 Httpd demon을 설치해줬다. 선택한 AMI가 CentOS와 비슷한 이미지를 가지고 만들었기 때문에 설치한 httpd 서비스가 EC2 lifting시에 자동으로 로드되게 하기 위해서는 서비스를 등록해야되는데, 설치하면 default로 서비스에 등록이 되기 때문에 아래와 같은 프로세스로 서비스 설치 및 시작을 하면 된다.
설치된 Httpd에 기본 Home 디렉토리(/var/www/html)가 있는데, 해당 위치에 웹 기본이 되는 파일(index.html)을 생성해서 간단하게 웹 페이지 테스트를 할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# httpd 설치
$sudo yum install httpd -y

# httpd service 시작
$sudo service httpd start
Redirecting to /bin/systemctl start httpd.service

# 현재 실행되고 있는 service process에서 httpd관련 service를 출력
$ps -ef|grep httpd
root 6563 1 0 02:33 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 6564 6563 0 02:33 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 6565 6563 0 02:33 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 6566 6563 0 02:33 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 6567 6563 0 02:33 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 6568 6563 0 02:33 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
ec2-user 6611 3407 0 02:33 pts/0 00:00:00 grep --color=auto httpd

# root 사용자로 변경 (prompt $ -> #)
$sudo su -

# 웹 서버에 출력할 html파일 출력
$cd /var/www/html/

# index.html 파일 작성
$vi index.html

위에서 index.html 파일내에 HTML 코드를 작성 후, 주소표시줄에 “연결” 메뉴에서 확인하였던 퍼블릭 DNS 주소를 웹에 붙여넣으면, 작성했던 HTML 페이지가 출력됨을 확인 할 수 있다.
이처럼 Public DNS 주소를 통해 생성된 EC2 인스턴스의 리소스에 접근을 할 수 있다는 것을 알 수 있다.

추가적으로 위의 httpd를 설치 및 서비스 시작하는 일련의 과정을 EC2 인스턴스 생성시에 고급 세부 정보 세션에사용자 데이터 부분에 스크립트로 넣어서 간단하게 실습해볼 수도 있다. (웹 서버 시작 부분까지)

1
2
3
$yum update -y
$yum install httpd -y
$sudo service httpd start

Read More

220412 Hadoop과 친해지기 일곱 번째 이야기(MAPREDUCE 이해)

Hadoop MapReduce

이번 포스팅에서는 MapReduce의 정의에 대해서 알아보고, 어떻게 작동을 하는지 그리고 분산처리하는 방법과 간단한 MapReduce 연습문제를 통해 데이터를 분류해보도록 하겠다.

MapReduce?

이전에 Hadoop의 Core System에 대해서 전반적으로 알아볼때 이미 학습했지만, MapReduce는 HDFS -> YARN -> MapReduce 순으로 구조화되어있다. 즉, MapReduce는 HDFS, YARN과 함께 제공되는 Hadoop의 핵심기술이다.
Hadoop을 이해하기 위해서는 MapReduce를 잘 이해하는 것이 필수이다.

MapReduce는 Hadoop에 내제된 기능으로, 클러스터에 데이터의 처리를 분배하는 역할을 한다.데이터를 파티션으로 나눠서 클러스터 전반에 걸쳐서 병렬 처리되도록 한다.
이러한 일련의 과정에서 관리를 하고 실패하였을때 감당하는 역할을 한다.

Data Mapping -> Mapper -> Data Transformation

데이터를 변형(Transformation)하는 과정으로, 데이터가 한 줄씩 들어오면, Mapper는 해당 데이터를 변형시키게 된다. 들어오는 데이터에서 필요한 정보를 추출하고, 이해할 수 있는 구조로 정리를 해서 해결하고자하는 문제를 해결한다.

데이터를 집계하고자 하는 중요한 데이터를 키-값의 형태로 연관시켜서 구조화시킨다. (키:집계하고자하는 항목)
input line -> (mapper) -> Data 추출 및 구조화해서 한 줄로 출력

Mapper의 처리 순서는 아래와 같다.

INPUT DATA -> Mapper -> K1:V, K2:V, K3:V, K4:V, K5:V ….

Data Reducing -> Reducer -> Data Aggregation

Reducer는 데이터를 집계한다. Mapper를 통해 key:value의 형태로 변형된 데이터가 shuffle & sort 과정을 거쳐서 Reducer는 얻고자 하는 결과 데이터를 기준으로 key:value에서 value 데이터를 집계한다.

[MapReducer를 통한 문제해결]

Mapper와 Reducer를 창의적으로 조합하면, 놀랄만큼 다양한 분석문제를 해결할 수 있다.

Read More

220412 Hadoop과 친해지기 여섯 번째 이야기(HDFS 다뤄보기)

Hadoop HDFS

이번 포스팅에서는 sample 데이터를 활용해서 HDFS를 실제로 다뤄보는 실습을 해본다.

Ambari

Ambari는 Hadoop Eco System에서 구조상 최 상위에 위치해있는 어플리케이션으로, Hadoop과 관려된 서비스들 전체를 모니터링할 수 있는 웹 인터페이스 환경을 제공한다.

웹 인터페이스를 사용해서 HDFS 다뤄보기

Ambari Browser

HTTP 인터페이스로 간단하게 HDFS에 파일을 업로드, 로컬 디스크에 다운로드, HDFS에 업로드한 파일들을 삭제해보았다.

HDFS에 파일을 업로드할때에는 단순히 파일을 업로드 되는 것처럼 보이지만, 실제로는 파일을 올릴때 HDFS 내부의 Name Node에 어느 Data Node에 저장을 할지 확인하는 절차를 통해 클러스터내의 특정 Data Node에 저장을 하고, 정상적으로 저장이 완료되면 Name Node에 결과를 알려줘서 Name Node가 관리하고 있는 저장 데이터와 관련된 메타 데이터 테이블에 새롭게 저장된 데이터 정보를 추가하게 된다.
(내부적으로 이러한 일련의 과정을 거치고 있다는 것을 인지한 상태에서 계속해서 학습을 이어가도록 하자)

Read More

220411 데이터 파이프라인 스터디 4일차

데이터 파이프라인(Data Pipeline)

이번 포스팅에서는 앞으로 진행하게 될 첫 실습내용에 대해서 개괄적으로 정리를 해보려고 한다.
실습에 사용되는 것은 AWS의 EC2, Kafka, Logstash, Twitter이며, 간단하게 말하면 EC2 가상 서버를 기반으로 설치된 Producer와 Kafka(queue), Consumer로 구성하고, Producer가 Twitter에서 발생하는 데이터를 수집해서 Kafka queue에 저장된 Twitter의 데이터를 Consumer에서 가져와서 화면에 보여주는 형태로 실습을 진행한다.

(Kafka를 온프레미스에 설치하듯이 AWS의 EC2에 설치를 해서 실습을 진행한다)

Kafka가 뭐지?

Kafka

Kafaka란 메시지 큐이고, 분산환경에 특화되어 설계가 되어있다는 특징을 가지고 있다. 따라서 기존의 RabbitMQ와 같은 다른 메시지큐보다 훨씬 빠르게 처리한다.
(여기서 RabbitMQ란 커다란 바구니 안에 여러가지 공이 있는데, 공은 queue에 있는 job을 의미한다. 공들 중에서 하나를 꺼내서 job을 수행하고, 성공적으로 job이 끝나면 해당 job을 삭제하는 일련의 과정을 거친다)

Kafka가 다른 메시지큐보다 빠른 이유는 위에서 언급했듯이, 분산환경에 특화되어 설계가 되어있는데, 때문에 여러 서버 혹은 서비스에서 발생하는 데이터를 한 군데에서 수집할 수 있는 환경을 구성할 수 있다.

또한 대표적인 스트림 큐의 서비스이며, 파일 사이즈를 기준으로 설정하며, default로 1GB 정도의 데이터를 유지한다. 만약에 큐의 데이터가 1GB를 넘을 경우, 삭제처리한다.
(ex. 폭포에 비유 : 사이즈를 넘는 데이터는 폭포에서 떨어지는 데이터로, 삭제 처리한다)

[특징]

  • LinkedIn에서 개발된 분산 메시징 처리 시스템이다.
  • 파일시스템을 사용하기 때문에 데이터영속성이 보장된다.
  • 대용량의 실시간 로그 처리에 특화되어 설계된 메시징 시스템으로, 기존 범용 메시징 시스템대비, TPS가 우수하다. 이러한 이유로 최근에 가장 많이 사용하는 스트림 큐이다.

Read More

220411 데이터 파이프라인 - 4

데이터 파이프라인(Data Pipeline)

이번 포스팅에서는 앞으로 진행하게 될 첫 실습내용에 대해서 개괄적으로 정리를 해보려고 한다.
실습에 사용되는 것은 AWS의 EC2, Kafka, Logstash, Twitter이며, 간단하게 말하면 EC2 가상 서버를 기반으로 설치된 Producer와 Kafka(queue), Consumer로 구성하고, Producer가 Twitter에서 발생하는 데이터를 수집해서 Kafka queue에 저장된 Twitter의 데이터를 Consumer에서 가져와서 화면에 보여주는 형태로 실습을 진행한다.

(Kafka를 온프레미스에 설치하듯이 AWS의 EC2에 설치를 해서 실습을 진행한다)

Kafka가 뭐지?

Kafka

Kafaka란 메시지 큐이고, 분산환경에 특화되어 설계가 되어있다는 특징을 가지고 있다. 따라서 기존의 RabbitMQ와 같은 다른 메시지큐보다 훨씬 빠르게 처리한다.
(여기서 RabbitMQ란 커다란 바구니 안에 여러가지 공이 있는데, 공은 queue에 있는 job을 의미한다. 공들 중에서 하나를 꺼내서 job을 수행하고, 성공적으로 job이 끝나면 해당 job을 삭제하는 일련의 과정을 거친다)

Kafka가 다른 메시지큐보다 빠른 이유는 위에서 언급했듯이, 분산환경에 특화되어 설계가 되어있는데, 때문에 여러 서버 혹은 서비스에서 발생하는 데이터를 한 군데에서 수집할 수 있는 환경을 구성할 수 있다.

또한 대표적인 스트림 큐의 서비스이며, 파일 사이즈를 기준으로 설정하며, default로 1GB 정도의 데이터를 유지한다. 만약에 큐의 데이터가 1GB를 넘을 경우, 삭제처리한다.
(ex. 폭포에 비유 : 사이즈를 넘는 데이터는 폭포에서 떨어지는 데이터로, 삭제 처리한다)

[특징]

  • LinkedIn에서 개발된 분산 메시징 처리 시스템이다.
  • 파일시스템을 사용하기 때문에 데이터영속성이 보장된다.
  • 대용량의 실시간 로그 처리에 특화되어 설계된 메시징 시스템으로, 기존 범용 메시징 시스템대비, TPS가 우수하다. 이러한 이유로 최근에 가장 많이 사용하는 스트림 큐이다.

Read More

220410 Hadoop과 친해지기 다섯 번째 이야기(HDFS에 대한 이해)

Hadoop HDFS

이번 포스팅에서는 HDFS의 내부구성에 대해서 알아보고, 대용량의 파일을 어떤식으로 처리하는지에 대해서 한 번 정리해보겠다.

개괄적으로 HDFS에서 대용량의 파일을 처리하는 방법에 대해서 간단히 알아보면 대용량의 파일을 여러개의 블록 단위로 쪼개서 클러스터를 구성하고있는 각 노드에 저장을 한다.
각 노드는 같은 데이터 블록 정보를 저장하고 있기 때문에 노드 중에 한 개에 문제가 생겨도 복원을 할 수 있다.
(Single point failure issue 대응)

이제 한 번 STEP BY STEP으로 HDFS(Hadoop Distribution File System)에 대해서 알아보자.

STEP1 BIG DATA의 등장과 블록단위로 쪼개고 저장하기

Big data

자, 엄청나게 큰 데이터가 주어졌다고 가정하자.
HDFS는 이러한 빅데이터를 전체 클러스터에 분산해서 안정적으로 저장해서 어플리케이션이 그 데이터를 신속하게 액세스해 분석할 수 있도록 돕는다.

좀 더 구체적으로 말하면 HDFS는 대용량 파일들을 다루기 위해서 만들어졌다. 작은 데이터는 누구든 쉽게 다룰 수 있지만, HDFS는 이런 대용량의 파일들을 작은 조각으로 쪼개서 클러스터 전체에 걸쳐 분산시키는데 최적화되어있다.
그래서 분산 파일 시스템이라고 하는 것이다.

Read More

220410 데이터 파이프라인 스터디 3일차

데이터 파이프라인(Data Pipeline)

이번 포스팅에서는 Data 분석 대상에 대한 부분과 이전 1, 2일차때 공부했던 데이터 파이프라인 구성시에 필요한 AWS 서비스 이외에 기본적으로 필요한 AWS 서비스에 대해서 학습한 내용에 대해서 정리해보려고 한다.

(1) Data 분석 대상

우리가 분석할 데이터는 기업의 플랫폼이 되는 웹 또는 앱에서 발생한다.
이전 포스팅에서도 이 부분에 대해서 언급을 했었는데, 이러한 데이터를 이용해서 실제 사용자가 해당 서비스에서 어떤 것을 필요로 하는지, 니즈를 파악해서 기존 서비스를 개선할 수 있다.

데이터는 웹과 앱에서 발생하는 이벤트를 통해서 취득하게 되는데, 사용자가 페이지(화면)에서 특정 카테고리를 클릭하고 어떤 경로로 또는 어떤 depth로 메뉴를 타고 들어가서 정보를 확인하는지, 이러한 일련의 네비게이션 과정에 대해서 파악을 한다.
이러한 일련의 사이클들에 대해서 파악을 하게 되면, 사용자들이 서비스에서 어떻게 메뉴를 구성했을때 주문이 많아졌는지, 그리고 어떤 부분에 관심이 많은지에 대한 파악을 할 수 있다.

더 나아가서 어떻게 데이터 파이프라인을 구성했을 때 가장 효율적으로 데이터를 수집하고 분석을 빠르게 할 수 있는지에 대한 고민도 필요하다.

데이터를 수집할 수 있는 외부 서비스에는 050 시스템, Appsflyer, Adbrix가 있는데, 050 시스템의 경우에는 상담사가 전화한 내용을 전부 Web Hook을 통해서 DB서버에 저장을 하고, 저장된 데이터를 텍스트로 변환하는 작업까지 한다.
그 외의 두 개의 서비스는 다채널 마케팅으로, 어느쪽에 광고를 실었을대 가장 효율이 좋은지 데이터적 근거를 통해 분석할 수 있다.

Google Analytics와 같은 서비스를 통해서도 데이터를 파악 및 분석할 수 있지만, 데이터를 내제화해서 데이터를 일괄적으로 모은 다음에 디테일하게 분석하기 위해서는 별도의 파이프라인 구성이 필요하다.
특정 사용자가 네이버 블로그를 통해서 앱을 설치했다고 가정하자. 사용자가 앱을 설치한 뒤에 앱을 삭제할 수도 있고, 앱을 설치하고 앱을 통해 원하는 정보를 확인할 수도 있다. 이러한 디테일한 사용자의 니즈를 파악하기 위해서는 데이터를 내제화할 필요성이 있다. 그리고 클라우드에는 이러한 데이터 내제화에 도움이 되는 여러 서비스들이 있다.

Read More

220409 데이터 파이프라인 스터디 2일차

Data Pipeline

이번 포스팅에서는 2일차에 학습했던 데이터 파이프라인과 관련된 학습내용을 정리하면서 간단하게 회고 내용을 작성해보려고 한다.

2일차 학습했던 학습내용을 개괄적으로 정리하자면, 우선 Data & AI LANDSCAPE를 통해서 현재 빅데이터 관련 서비스에 어떠한 변화가 있는지 살펴보았고, Data Pipeline 구축에 접근하는 방법에 대해서 배워보았다. Data Pipeline 구축을 할 때 Lambda Architecture라는 Architecture를 활용해서 배워보았는데, 실제 실무에서는 어떤식으로 접근해서 Data Pipeline을 구축하는지 궁금했는데 그 궁금증이 어느정도 해소되었던 소중한 시간이었다.

Read More

220409 비공개 링크

개인적 학습 목적으로 정리한 강의내용(비공개) 정리 포스팅 링크

[데이터 파이프라인 학습 관련 비공개 링크]

https://leehyungi0622.github.io/2022/04/08/202204/220408-data-pipeline-1

https://leehyungi0622.github.io/2022/04/08/202204/220408-data-pipeline-2/

https://leehyungi0622.github.io/2022/04/09/202204/220409-data-pipeline-3/

https://leehyungi0622.github.io/2022/04/11/202204/220411-data-pipeline-4/

220409 데이터 파이프라인의 구축 - 3

Data &AI LANDSCAPE

이번 포스팅에서는 데이터 파이프라인을 구축함에 있어 어떤 방식으로 접근을 해야하는지, 그리고 고려해야되는 부분과 실무에서 예외발생이 발생하며, 대체방안으로 어떤 부부을 선택해야되는지에 대해 정리해보려고 한다.

(1) Data & AI LANDSCAPE

2015년도 Bigdata landscape에서는 서비스가 셀 수 있을 만큼의 갯수였는데, 2020년 기준으로(상단의 이미지 참조), 여러 데이터 기반의 회사가 등장하고, 대표적으로 넷플릭스가 등장하면서 분석 및 추천에 많은 공헌을 하였다. 이러한 서비스들은 오픈소스화하는 경우가 많았고, 오픈소스화된 서비스들은 클라우드 진영에서 자체 서비스화하기 위해 더욱 다양한 서비스들이 등장하기 시작했다.

최근에 페이스북, 트위터, 리프트의 기업들이 데이터 기반으로 비즈니스를 확대하면서, 여러 서비스들을 운영하기 시작했다.

[참고]
Airflow는 Airbnb에서 만든 전체 플로우를 컨트롤할 수 있는 툴(workflow tool)인데 오픈소스화하면서, 이 것을 기반으로 클라우드 진영에서는 자체 서비스화하기 위해서 다양한 서비스들이 등장을 하였다.
그 외에도 데이터 예측을 위해 AI 진영에도 다양한 서비스들이 등장하였다.

Read More