실제 hadoop 환경에 대한 경험이 없어 직접 구축을 해봤습니다.

연습용으로 구축해보기 위해 vm환경에서 4대의 클러스터를 구성할 예정입니다.

 

우선, vm설치를 진행해보았습니다.

 

먼저, 저는 맥북 m2 칩을 사용하고 있습니다

-> virtualBox는 m2 환경에서 호환이 되지 않아 저는 utm으로 설치하였습니다.

 

https://mac.getutm.app/ 

 

UTM

Securely run operating systems on your Mac

mac.getutm.app

appstore에서 설치하시면 14,000원의 유료로 구매해야하지만, web에서 다운로드 받으시면 무료로 다운 받을 수 있습니다.

 

os는 ubuntu22.04버전 사용하였고, 

추후 버전 문제로 오류가 발생할 경우 20.04버전으로 변경할 예정입니다.

 

utm에 대한 설치와 ubuntu설치 과정은 타 블로그를 참고하였습니다.

 

ubuntu설치까지 완료 화면

 

 

보완해야할 점, 참고해야할 점 댓글로 남겨주시면 도움이 많이 될 것 같습니다 

감사합니다.

AWS 실습 중 9090port로 접속이 불가능

- 인바운드 규칙을 http, tcp, http로 모든 port를 설정하였음에도 불구하고, 9090port의 웹 접속이 불가능

- 모든 tcp 유형으로 포트범위를 지정한뒤 접속이 가능(필요한 port에 따라서 인바운드 규칙을 지정해주는 방법도 가능)

 저의 경우에는 9090으로 지정해주었더니 접속이 가능해졌습니다.

 

 

[주의사항]

- 고정된 port가 존재한다면, 위의 방법을 사용하여 웹 접속이 가능하지만,

 여러개의 port를 사용하게 된다면 모든 port를 허용하는게 좋습니다.

'데이터 엔지니어 > 서버' 카테고리의 다른 글

[서버]TCP 통신  (0) 2022.07.06

반복문을 활용하다보면 하나이상의 리스트가 필요한 경우가 있습니다.

그럴때 zip()함수를 이용하여 여러개의 리스트를 불러올 수 있습니다.

 

li_1 = ["a","b","c","d","e"]
li_2 = [1,2,3,4,5]

#for문 밖에서 선언한 li_1의 변수들을 사용할 수 없음
for i,j in zip(li_1, li_2):
	i = j
    
for i,j in zip(li_1, li_2):
	globals()[i] = j  #for문 밖에서 선언한 li_1의 변수들을 사용할 수 있음

 

#주의사항

이때 선언한 변수 i를 그대로 사용하게되면, li_1의 변수명들을 사용할 수 없습니다.

그래서 추가적으로 필요한 개념이 globals()함수 입니다.

 

for문 안에서 변수명을 사용할 때는 globals()함수를 이용하여 for문 밖에서 선언한 변수명을 그대로 사용할 수 있게해줍니다.

ubuntu에서 docker를 설치하고 실행하였을때, docker가 연결되지 않았다는 에러가 발생하였습니다.

 

 

일반적인 linux환경에서는 $sudo systemctl status docker 명령어로 docker의 연결상태를 확인할 수 있습니다.

하지만, WSL환경에서는 systemctl 명령어가 사용이 불가능합니다.

systemctl명령어 대신 service 명령어를 사용해야 정상작동 합니다.

 

docker가 실행된걸 볼 수 있습니다.

 

위와 같은 hello-world 명령어를 실행한 결과

정상작동 하는것을 볼 수 있습니다.

 

* ubuntu 22.04버전에서는 docker 실행 명령어가 정상작동 하지 않을 수 있습니다.

저도 22.04버전에서 실행하다 작동이 안되서 20.04버전으로 버전을 낮춘뒤 사용했습니다.

ubuntu 20.04버전의 사용을 추천합니다.

자연어 처리 중 키워드의 출현빈도 및 자주 등장한 키워드에 대한 나열이 가능합니다.

 

collection 라이브러리에 Counter 패키지 사용하였습니다.

 

코드는 아래와 같습니다.

from collections import Counter #라이브러리 호출

df['noun'] = df['content'].apply(lambda x : mecab.nouns(x)) #데이터프레임 본문에서 명사만 추출

#전처리(불용어 제거 및 텍스트 정제)
noun = df['noun'].apply(lambda x : [item for item in x if item not in stop_words])
noun = noun.apply(lambda x : [word for word in x if len(word) > 1])

#counter 함수를 사용하기위해 list화 
noun_list = []

for tokens in noun:
    for token in tokens:
        noun_list.append(token)

#키워드 빈도수 확인
noun_count = Counter(noun_list)
#상위 50개 추출
noun_50 = noun_count.most_common(50)

 

자연어 처리 중 연관단어를 확인하기 위한 방법으로 n-gram을 사용합니다.

 

가장 보편적으로 사용되는 2개의 연속된 단어를 확인하는 bigram 사용해봤습니다. 

 

nltk 패키지 bigrams 사용했습니다.

 

from nltk import bigrams #nltk에 bigrams 패키지 사용

#전처리
noun = df['content'].apply(lambda x : [item for item in x if item not in stop_words]) #불용어 제거
noun = df['content'].apply(lambda x : [word for word in if len(word) > 1]) #글자 수가 1개보다 적은 단어는 제거

bgrams = [bigrams(word) for word in noun] #bgrams라는 변수에 전처리된 단어들을 적용

token = []
for i in bgrams:
    token += ([x for x in i])

 

 

 

 

 

 

 

 

자연어 처리를 하기위해 konlpy를 실행하는 도중...

JVMNotFoundException: No JVM shared library file (jvm.dll) found. Try setting up the JAVA_HOME environment variable properly. 오류를 마주했습니다.

 

konlpy 설치와 import까지 무사히 진행했으나,

okt를 실행했을때 JVMNotFoundException: No JVM shared library file (jvm.dll) found. Try setting up the JAVA_HOME environment variable properly 오류가 났습니다.

 

이전에는 정상적으로 썼던거같은데 오랜만에 사용하려고 하니 오류가 뜬걸까요..?

열심히 구글을 통해 저와 같은 오류가 있으신분들이 어떻게 해결했는지 찾아봤으나 다양한 경우와 해결방법이 있어 

제가 해결한 방법을 공유드리려고 합니다.

 

우선 순서는 아래와 같습니다.

1. JAVA_HOME 환경변수 설정

2. Jpype 설치 및 import

3. 정상작동

 

위와 같은 순서로 진행했습니다.

 

정전으로 인한 서버 다운으로 서버의 연결이 끊겼었습니다.

서버를 관리하는 서버 관리자는 아니지만,데이터 엔지니어로써 데이터가 수집되는 서버에 대해서도

공부해볼 필요가있어 네트워크 이론에대해 공부해봤습니다.

 

정리글은 필요한 부분에 대해서 저의 기준으로 이해하기 쉽게 풀어서 설명한 것입니다.

제가 이해하고있는게 틀려서 수정이 필요하거나,

더 쉽게 이해할 수 있는 방법이 있으신분은 댓글로 달아주시면 감사하겠습니다 !

 

우선 TCP통신에 대해서 설명해보겠습니다.

TCP통신이란 ?

- Transmission Control Protocol의 약자로 두개의 호스트를 연결하고 데이터 스트림을 교환하게 해주는 네트워크 프로토콜이다. TCP는 데이터와 패킷이 보내진 순서대로 전달하는 것을 보장해준다. 

쉽게 말해서 내 기기에서 다른 기기로 데이터를 전송해 주는 통신방식 입니다.

 

TPC 통신에서 SYN과 ACK라는 개념이 있습니다.

SYN : synchronize의 약자로 가장 많이 활용되는 패킷이며, 서로 연결(프로세스 통신)을 하기위해 최초로 connection하는 신호

ACK : acknowledge의 약자로 수신자가 송신자측에서 보내온 패킷을 정상적으로 전달 받았음을 알려줌

이를 토대로 2가지의 연결방법을 설명할 수 있습니다.

 

1. 3-way handshake : 통신전 연결방법

- 통신하기 이전 client와 server간 연결을 맺기위해 진행하는 송수신이 3번 진행

1) client가 server에게 연결을 요청하기위해 최초 SYN신호와 함께 Sequence number를 전달

2) server는 client에게 연결 요청을 받고, 연결을 승낙하기 위해 SYN-ACK신호와 Sequnce number를 전달

3)  client는 ACK신호를 받고 ESTABLISHED상태가되어 연결이 이루어지고, 이때 신호를 전달하면서 server도 ESTABLISHED 상태가 된다.

 

2. 4-way handshake : 통신후 종료

- 연결이 종료되는 시점에서 client와 server간 진행하는 송수신이 4번 진행

1) client 측에서 FIN신호를 보내어 연결 종료요청. 이후 client는 server가 연결종료를 승낙할 때 까지 대기하는 FIN_WAIT상태

2) server는 CLOSE_WAIT 상태에서 연결종료를 승낙하기 위한 ACK신호를 client에게 전달

3) client는 ACK신호를 받은 후 FIN_WAIT_2 상태가 되고, 이때 server측은 LAST_ACK상태에서 최종 연력종료 통보인 FIN신호를 전달

4) FIN신호를 전달받은 client는 TIME_WAIT 상태로 전환되어 일정시간 이후 연결을 종료. 이 시점에서 ACK신호를 server보내고 server는 CLOSED 상태가 되어 두 client와 server간 연결이 종료

 

이렇게 TCP통신에 대해서 간략하게 살펴보았습니다.

공부를 시작하게 된 계기가 종료된 서버가 다시 되살아났는지, 연결을 정확하게 됬는지 확인하고 싶었기 때문에 관련한 내용인 ICMP와 ping에 대해서 설명하고 마무리 하겠습니다.

 

ICMP란?

- Internet Control Message Protocol의 약자로 TCP/IP 에서 IP패킷을 처리할 때 발생되는 문제를 알려주는 프로토콜 입니다.

 

ping?

- ping은 특정한 인터넷 주소가 있고, 또 그 주소가 요청을 받아들일 수 있는지를 확인해 주는 기본적인 인터넷 프로그램입니다.

만약 내부망처럼 외부에서 접근이 안되는 ip주소라면 VPN연결을 통해 내부망으로 접근하여 확인할 수 있습니다.

확인 방법은 명령 프로토콜(cmd)창을 띄워 명령어로 ping IP주소를 치면 확인할 수 있습니다.

단, 명령어의 결과값을 해석하는데 어려움이 있을 수 있습니다.

문제가 있는지를 확인하기 위해 봐야할 것은 손실평균 왕복시간입니다. 

 

1. 평균 왕복시간이 30ms 이상인 경우

- 평균 왕복시간은 낮을수록 좋은 수치입니다. 만약 평균 왕복시간 30ms이상일 경우 문제가 있을 확률이 높으며, 문제가 없는 경우 평균 왕복시간은 1 ~ 15ms 입니다.

2. 손실이 발생하는 경우

- 유선 환경이라면 손실은 없어야 됩니다. 유선 환경에서 손실이 발생한다는 것은 명백한 문제가 있는 것 입니다. 무선랜을 사용하는 환경에서는 약간의 손실이 발생할 수 있습니다.

3. 핑이 들쑥날쑥 일정하지 않은 경우

- 평균핑은 높지 않지만, 테스트 진행시 핑(시간)이 100ms, 2ms, 130ms, 4ms와 같이 불규칙하게 나타나는 경우도 문제가 있을 확률이 높습니다.

 

 

이상으로 글을 마치겠습니다 .

완벽히 정리된 글은 아니지만, 서버 전송과 관련하여 대략적으로 이해할 수 있는 기회가 되었습니다 !

 

+ Recent posts