docker에서 test로 hadoop을 공부하고 있는 도중,
namenode와 datanode가 서로 연결되지 않아 
데이터를 전송하지 못하는 상황이 발생하였습니다.

datanode가 연결되지 않는 원인을 찾아
core-site.xml을 수정하는 해결 방법을 시도하려고 하였으나,
debian9라는 오래된 운영체제의 이슈로 vi/vim/nano 모두 편집기가 실행되지 않았습니다.

이때, 편집기 없이 내부에 있는 텍스트를 수정하기 위한 방법을 공유드립니다.

 

sed 명령어로 파일 수정하기

  • sed는 스트림 편집기로, 파일의 내용을 변경할 때 유용합니다. 기존 파일을 덮어쓰거나, 필요한 내용을 파일에 추가할 수 있습니다.

sed -i 's/old-text/new-text/' 경로

 

-> 이 명령은 old-text를 찾아 new-text로 바꿉니다.

 

변경 전 :

 

변경 후 :

ubuntu 환경에서

패키지 업데이트를 위해 sudo update 명령어를 실행하였으나

 

0% [Connecting to download.docker.com] 에서 멈춰 진행되지 않았습니다.

 

관련된 에러 해결 방법에 대해 공유합니다.

 

우선, 에러의 원인은 IPv6 문제로 인해 연결에 실패하였습니다.

IPv6의 비활성화를 통해 해결이 가능했습니다.

 

[해결 방법]

1. sysctl.conf 파일 수정:

vi /etc/sysctl.conf

 

 

2. 아래 내용을 추가합니다.(IPv6 비활성화)

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

 

3. 위 내용을 서버에 적용합니다.

sudo sysctl -p

 

IPv6를 비활성화하니 정상작동 되었습니다 ~

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

[서버] GPU 서버 구축기  (0) 2024.08.12
[AWS] EC2 - 9090port로 접속 안되는 이슈 해결  (0) 2023.09.11
[서버]TCP 통신  (0) 2022.07.06

회사에서 모델학습을 위해 GPU서버를 요청해서 드디어 받았습니다.

 

사용을 하기 위해 구축을하였는데,

이때 발생한 오류들을 기록하면서 공유하도록 하겠습니다.

 

1. NVIDIA 드라이버 설치

#1. 드라이버 설치를 위해 기존 드라이버 제거(필요시)
sudo apt-get purge nvidia*

#2. 드라이버 목록 업데이트:
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update

#3. NVIDIA 드라이버 설치
sudo apt-get install nvidia-driver-535

#4. 시스템 재부팅
sudo reboot

#5. 설치 확인
nvidia-smi

 

# 설치 완료시 화면 

2. CUDA 툴킷 설치 

# 1.cuda 11.8버전 다운로드
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run

# 2.cuda 툴킷 설치
sudo sh cuda_11.8.0_520.61.05_linux.run

# 3.환경 변수 설정
echo 'export PATH=/usr/local/cuda-11.2/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

 

 

## 설치시 발생했던 오류

1. cuda 툴킷을 실행하면서 GCC버전 오류로 인해 cuda 툴킷 설치 불가

해결방법

기존 GCC버전을 임시로 변경 -> 호환 가능한 GCC 설치 및 링크 -> cuda 설치 -> 설치 후 기존 GCC 복구

# 1. 기존 GCC 백업
sudo mv /usr/bin/gcc /usr/bin/gcc-backup
sudo mv /usr/bin/g++ /usr/bin/g++-backup

# 2. 호환 가능한 GCC 설치 및 링크
sudo ln -s /usr/bin/gcc-10 /usr/bin/gcc
sudo ln -s /usr/bin/g++-10 /usr/bin/g++

# 3. cuda 설치 
sudo sh cuda_11.8.0_520.61.05_linux.run

# 4. 설치 후 기존 GCC 복구
sudo rm /usr/bin/gcc
sudo rm /usr/bin/g++
sudo mv /usr/bin/gcc-backup /usr/bin/gcc
sudo mv /usr/bin/g++-backup /usr/bin/g++

 

이후에는 패키지 및 라이브러리를 설치해서 사용하실 수 있습니다.

 

Airflow의 스케줄링을 이용해서 Spark를 submit하려고했지만 위와 같은 에러가 발생하였습니다.

에러의 원인은 spark의 default connection의 host가 yarn으로 설정되어 있어 발생하였습니다.

 

분산모드가 아닌 로컬 모드에서 테스트로 이루어지는 상황에서 

host가 yarn으로 설정되어 있기 때문에 이러한 에러가 발생하였습니다.

 

https://airflow.apache.org/docs/apache-airflow-providers-apache-spark/stable/operators.html 참조

 

spark를 submit할때는 spark conection이 올바르게 설정되어 있어야합니다.

 

만약 master를 yarn으로 실행시키실 경우(분산모드) host를 yarn으로 변경해주시고,
local에서 실행하실 경우 (standalone모드) host를 local로 변경해주세요.

python을 이용하는 개발자로써 DataFrame형태의 데이터를 자주 접합니다.

 

python에서 hdfs에 dataframe 데이터를 저장하는 방법을 공유 합니다.

 

#hdfs 관련 라이브러리 로드
from hdfs import InsecureClient

#client 선언
hdfs_url = "http://<HDFS-NAMENODE-HOST>:<HDFS-NAMENODE-PORT>"
client = InsecureClient(hdfs_url, user="<HDFS-USER>")

#원하는 저장 경로(csv파일 또는 parquet 파일로 저장가능)
hdfs_path = "/path/to/your/directory/{file_name}.csv"
hdfs_path = "/path/to/your/directory/{file_name}.parquet"


with client.write(hdfs_path, overwrite=True) as writer:
    df.to_csv(writer, index=False, header=True)

 

 

Selenium을 통한 크롤링을 Airflow환경에서 테스트 중에 발생한 에러입니다.

확인 결과 구글(브라우저)이 설치되어 있지 않아 에러가 발생 했습니다.

 

Selenium에서 사용 중인 브라우저가 설치되어있는지 확인해보시고,

설치가 되어있지 않다면 아래 방법으로 설치해주시면 해결됩니다 !

 

1. 패키지 리스트 업데이트

sudo apt update

 

2. 구글 다운로드 및 설치 

 

#구글 패키지 다운로드
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

#구글 패키지 다운로드 파일 설치
sudo apt install ./google-chrome-stable_current_amd64.deb

3. 설치 확인

google-chrome-stable --version

 

이후 실행하면 정상적으로 접속이 가능한게 확인 되었습니다.

 

cat /dev/null > 파일명

 

ex) cat /dev/null > test.txt

 

/dev/null 은 리눅스 시스템에서 빈 파일 또는 데이터를 버리는 특별한 장치 파일입니다. 데이터가 이곳으로 전송되면 버려지게 됩니다. 

cat을 사용해서 파일의 내용을 표준출력으로 /dev/null로 리다이렉션하여 파일 내용을 삭제합니다.

가장 중요 - 모든 에러는 log를 확인하는 습관을 들여야하며, log안에서 해결가이드를 얻을 수 있었습니다.

 

1. ERROR : Cannot set priority of datanode process xxxx

-> /dfs/journalnode/ 모든 파일을 삭제하고 초기화를 진행한뒤 namenode 실행하니 정상적으로 namenode 실행되었습니다.

설정을 변경하면서 namenode를 초기화 하는 과정에 있어서 기존의 폴더들에 파일이 존재하면 이미 실행되고 있다고 인식할 수 있습니다.

namenode를 초기화 하기위해서는 하위 폴더들의 파일을 정리해주는 과정이 필요합니다.

 

2. hdfs-site.xml에서 rpc-adress의 port를 8020으로 설정했을때의 hdfs 실행 방법

hdfs dfs -ls hdfs:://nn01:8020/(주소 직접입력 필요)

저는 core-site.xml에 port를 9000으로 설정하여 알수 없는 충돌이 일어난것으로 보입니다.

되도록 기본port를 수정하지 않는 선에서 xml파일들을 설정하면 충돌을 피할 수 있습니다.

 

 

xml 폴더들의 설정을 변경하기 전에 기본port를 파악하고있으면, port에 대한 충돌을 피할 수 있습니다.

 

 

+ Recent posts