반응형

최근 주키퍼 version-2폴더 안에 스냅샷 로그가 매우 많아 디스크 용량이 90%이상 초과되었습니다.

 

따라서, 데이터를 삭제해줘야하는데, 직접 삭제하는 경우는 주키퍼 노드간 정합성 불일치 이슈가 있기 때문에 서치 중, conf폴더 아래 zoo.cfg 설정을 통해 해결할 수 있었습니다.

 

주키퍼의 경우 디폴트로 아래 옵션이 주석처리 되어 적용되지 않습니다. 따라서 아래 옵션을 활성화 시켜줍니다.

아래 옵션은 24시간 마다 스냅샷과 트랙잭션 로그를 3개 남기라는 옵션입니다.

 

# 스냅샷 유지 갯수

autopurge.snapRetainCount=3

# autopurge를 해당 주기마다 실행 (24시간)

autopurge.purgeInterval=24

 

해당 설정은 주키버 재시작을 해야만 적용됩니다. 아래 명령를 통해 재시작하게 되면, 3개의 스냅샷 로그와 트랜잭션 로그를 제외하고 삭제된 것을 확인할 수 있습니다.

 

/zookeeper/default/bin/zkServer.sh restart

반응형
반응형

아래 명령어를 통해 파일의 row수를 셀 수 있습니다.

cat 파일명.xml | wc -l
194
반응형
반응형

주키퍼 실행, 저널노드 실행했더니, 아래 에러가 발생하고 있었습니다. 아래 에러이며, 해당 저널 스토리지에 포멧이 되지 않았는다는 문구로, 하둡 HA구성 시 발생할 수 있습니다.

 

원인

 

해결

하둡 bin폴더에서 아래 명령어를 실행하게 되면, 관련 에러가 사라진 걸 볼 수 있습니다.

hdfs namenode -initializeSharedEdits  명령어를 실행하면 네임노드의 편집 로그를 초기화하고 공유된 편집 로그 시스템을 설정하는 작업을 수행합니다. 편집 로그의 초기화는 데이터를 삭제하지 않지만, 해당 네임노드의 편집 로그를 새로운 시작점으로 설정합니다.

./hdfs namenode -initializeSharedEdits

 

 

 

반응형
반응형

몽고DB 데이터 저장

현재 몽고 DB에 아래와 같은 데이터가 저장되어 있습니다. KEY로는 reg_date, user_id, ids가 있으며, ids안에 다시 key:value 형태로 id와 score를 저장하고 있습니다.

{
    "_id" : ObjectId("abcdefg"),
    "reg_date" : "2023-05-07",
    "user_id" : "foo",
    "ids" : [
        {
            "id" : "boo",
            "score" : "100.0"
        },
        {
            "id" : "boo1",
            "score : "80.0"
        }
    ]
}

트리노 몽고DB 조회

트리노에서 위의 몽고 데이터를 조회하게 되면 아래와 같이 나옵니다.

reg_date user_id ids
2023-05-07 foo {{id=boo, score=100.0},{id=boo1, score = 80.0}}

 

문제

앞서 말씀 드린 것과 같이 ids안에는 각각의 id와 score가 key:value형태로 저장되어있습니다. 

이번 포스팅에서는 json형태의 ids안에 key를 각 컬럼 value를 row로 변경해보려 합니다.

reg_date user_id ids
2023-05-07 foo {{id=boo, score=100.0},{id=boo1, score = 80.0}}

                                                                         ▼

reg_date user_id id score
2023-05-07 foo boo 100.0
2023-05-07 foo boo1 80.0

해결

아래와 같이 unnest, cross join을 통해 간단하게 추출할 수 있습니다.

select a.reg_date, a.user_id ,id ,score 
from mongo.db.table a
cross join unnest(ids) as x(id,score)
where reg_date '2023-05-07'
and user_id ='foo'
반응형
반응형

원인

이번주 부터 갑자기 자동화로 수집되는 크롤링들이 안되는 경우가 있었을 겁니다. 이유는 바로 115버전으로 업데이트 되면서 chromedriver_autoinstaller.install(True)이 제대로 작동하지 않아서 입니다. 저는 아래와 같은 에러메세지가 발생했습니다.

해결

1. 크롬드라이버다운(115)

https://chromedriver.chromium.org/downloads

 

ChromeDriver - WebDriver for Chrome - Downloads

Current Releases If you are using Chrome version 115 or newer, please consult the Chrome for Testing availability dashboard. This page provides convenient JSON endpoints for specific ChromeDriver version downloading. For older versions of Chrome, please se

chromedriver.chromium.org

우선 115가 아니더라도 자신의 크롬버전의 맞은 크롬드라이브를 다운받습니다. 우선 아래 빨간색 밑줄 클릭후

 

저는 115이기 때문에  stable win64버전을 다운받았습니다.

2. 코드 수정

기존에러 코드

chrome_ver = chromedriver_autoinstaller.get_chrome_version().split('.')[0]
try:
    driver = webdriver.Chrome(f'./{chrome_ver}/chromedriver.exe', options=option)
    
except:
    chromedriver_autoinstaller.install(True)
    driver = webdriver.Chrome(f'./{chrome_ver}/chromedriver.exe', options=option)
driver.implicitly_wait(10)

수정된 에러코드

저는 스크립트와 크롬드라이브를 같은 폴더내에 위치하여 경로를 아래와 같이 잡았습니다. 수정 후 배치를 다시 진행되면 스크립트가 정상적으로 수행되는 것을 볼 수 있습니다.

chrome_ver = chromedriver_autoinstaller.get_chrome_version().split('.')[0]
try:
    driver = webdriver.Chrome(f'./{chrome_ver}/chromedriver.exe', options=option)
    
except:
    chromedriver_autoinstaller.install(True)
    
    ## 현재 작동안함
    #driver = webdriver.Chrome(f'./{chrome_ver}/chromedriver.exe', options=option)
    
    ## 신규 코드
    driver = webdriver.Chrome(f'./chromedriver.exe', options=option)
driver.implicitly_wait(10)
반응형
반응형
### sbt 설치
curl https://bintray.com/sbt/rpm/rpm | sudo tee /etc/yum.repos.d/bintray-sbt-rpm.repo
yum install sbt

혹시 위와 같은 에러가 발생한다면 아래 코드로 진행해 주세요

# 재 다운로드
curl -L https://www.scala-sbt.org/sbt-rpm.repo > sbt-rpm.repo
sudo mv sbt-rpm.repo /etc/yum.repos.d/
cd /etc/yum.repos.d/

# 기존 파일 삭제
rm -rf bintray-sbt-rpm.repo

# 재 빌드
sudo yum install sbt -y
반응형
반응형

원인

하둡 서버 자체가 다운되었습니다. nn02에는 모든 데몬이 내려가 있었고 (주키퍼, 저널노드 포함), nn01에 hbase와 namenode가 내려갔습니다. 네임노드 재시작 시 아래와 같은 에러가 발생하며, 네임노드 데몬이 올라오지 못했습니다. 에러내용으로는 네임노드가 내려가면서, edit로그의 정합성이 깨진 것 같습니다.

 

 

해결1- (nn01,nn02 둘다 데몬 내려가서 안 올라올 때)

# edit_log 및 fsimage 백업 (nn01)
cd /data/dfs/nn/current/
cd -r current current_backup

# hadoop bin 폴더 이동 (nn01)
cd /hadoop/bin

# 네임노드 복구(nn01) Continue or Always 옵션 선택(nn01)
./hadoop namenode -recover

# 네임노드 시작(nn01)
/rnd/hadoop/default/bin/./hdfs --daemon start namenode

# 세이프 모드 진입 및 설정(nn01)
cd /hadoop/bin/
./hdfs dfsadmin -safemode enter
./hdfs dfsadmin -saveNamespace
./hdfs dfsadmin -safemode leave

# fsimage 파일 복사(nn02)
cd /hadoop/bin/
./hdfs namenode -bootstrapStandby -force

# 네임노드 재시작 (nn02)
/rnd/hadoop/default/bin/./hdfs --daemon start namenode

# 네임노드 상태 확인
/hadoop/bin/./hdfs haadmin -getServiceState nn01
/hadoop/bin/./hdfs haadmin -getServiceState nn02

 

 

해결2 - (nn02 데몬 내려가서 안 올라올 때)

# 세이프 모드 진입 및 설정(nn01)
cd /hadoop/bin/
./hdfs dfsadmin -safemode enter
./hdfs dfsadmin -saveNamespace
./hdfs dfsadmin -safemode leave

# fsimage 파일 복사(nn02)
cd /hadoop/bin/
./hdfs namenode -bootstrapStandby -force

# 네임노드 재시작 (nn02)
/hadoop/bin/./hdfs --daemon start namenode

# 네임노드 상태 확인
/hadoop/bin/./hdfs haadmin -getServiceState nn01
/hadoop/bin/./hdfs haadmin -getServiceState nn02

 

반응형
반응형

최근에 airflow 웹상에 dag들이 올라오지 않아 고생한 부분을 정리하고자 합니다. 결론적으로 아래 발생한 현상은 모두 인코딩 문제로 간단하게? 해결할 수 있었습니다.

 

 

dag가 웹에 안보이는 케이스

1. 한글주석

아래와 같이 dag 파일 내에 한글 주석을 넣으면 dag가 웹상에 올라오지 않았습니다.

 

2. 스케쥴링

분과 시를 설정할 경우에는 dag들이 웹상에 잘 나왔지만 년월일 스케쥴링시 dag가 웹상에 올라오지 않았습니다.

특히 @daily는 가능하나 @monthly 및 @hourly등은 dag가 올라오지 않았습니다.

 

스케쥴링 에러를 확인하니 아래와 같은 에러가 계속해서 발생했습니다.

airflow unicodeencodeerror: 'charmap' codec can't encode characters in position 7-8: character maps to <undefined>

 

 

해결방법

아마 위의 에러는 mysql등 다른 디비와 연결하며 발생했을거라고 생각됩니다.

airflow.cfg 파일 sql_alchemy_conn에서 airflow뒤에 ?charset=utf8 추가 후 airflow 재시작하게 되면 위에 두가지 케이스일 때 dag가 정상적으로 올라오는 것을 볼 수 있습니다.

 

sql_alchemy_conn = mysql://root:password@127.0.0.1:3306/airflow?charset=utf8

 

 

반응형

+ Recent posts