HDFS에서 파일 삭제시 바로 삭제 될까? (휴지통 기능)

 

·       Version : Hadoop 3.0.0-cdh6.3.2

 

HDFS에서 파일 삭제시 즉시 삭제되고 공간이 반환될까? HDFS에는 휴지통 기능이라는 것이 있어서, 파일 삭제시 즉시 삭제되지 않고 휴지통 폴더 (/user/사용자명/.trash) 이동된다. 휴지통에 있는 파일은 복구 있다. 휴지통 디렉터리는 설정된 간격으로 체크포인트가 실행되고, 설정된 기간이 지나면 영구 삭제 된다. 영구 삭제가 완료되면 유휴 공간으로 반환된다.

 

휴지통의 삭제 기간은 core-site.xml 파일에서 설정할 있다.

<property>

    <name>fs.trash.interval</name>

    <value>1440</value>

</property>

<property>

    <name>fs.trash.checkpoint.interval</name>

    <value>120</value>

</property>

 

·       fs.trash.interval : 파일을 삭제하기 위한 체크포인트 시간(). 설정값이 0이면 즉시 삭제.

·       fs.trash.checkpoint.interval : 체크포인트를 확인하는 간격(). 체크포인트가 실행될 때마다 체크포인트를 생성하고 유효기간이 지난 체크포인트는 삭제한다.

 

Cloudera 하둡을 사용할 경우, Cloudera Manager UI에서 설정값을 변경할 있다. 설정 방법은 아래 그림을 참고 한다.

 

 

현재 휴지통에 있는 파일을 지우려면 아래와 같은 명령을 사용한다.

hadoop fs -expunge

 

파일 삭제시 휴지통을 사용하지 않고 즉시 삭제하려면 아래 명령어를 사용한다.

hadoop fs -rm -skipTrash /user/data/file

 

 

 

 

 [참고자료]

https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#File_Deletes_and_Undeletes

 

2019-12-05 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, HDFS 파일 삭제, HDFS 휴지통, Hadoop trash, 하둡 파일 삭제

HDFS 고가용성 (High Availability) 개념

 

·       Version : HDFS

 

HDFS(Hadoop File System)에서 SPOF(Single Point of Failure) 네임노드이다. 네임노드가 손상되거나 중지되면 모든 작업이 중지되고 파일을 읽거나 쓸수 없게 된다. 하둡 2.0 부터는 SPOF 보완하기 위해 네임노드 이중화를 도입하였으며, 액티브(Active) / 스탠바이(Standby) 동작한다.  스탠바이 네임노드는 액티브네임노드로 부터 블록 리포트와 하트비트롤 모두 받아서 메타데이터를 유지하고 공유 스토리지를 이용하여 에디트 파일을 공유한다. 액티브 네임노드가 문제가 발생하면 스탠바이 네임노드가 액티브로 동작하게 되는데, 장애를 감지하기 위해 주피커를 이용하며 장애 발생시 자동으로 변경할 있도록 구성되어 있다. HA 구성에는 QJM(Quorum Journal Manager) 방식과 NFS(Network File System) 방식이 있다.

 

[ QJM (Quorum Journal Manager) ]

QJM 저널 노드 그룹에서 동작하며 에디트 로그는 전체 너널 노드에 동시에 쓰여진다. 일반적으로 저널 노드는 3개로 구성하며 하나에 장애가 발생해도 서비스에는 영향을 받지 않는다. 저널 노드의 경우 시스템은 최대 (N-1) / 2 오류를 허용하고 계속 작동 있다. 따라서 3 개의 저널 노드에 대해 시스템은 {{3-1) / 2} 하나의 실패를 허용 있다. QJM 주피커를 사용하지 않고도 구현이 되지만, HDFS에서 액티브 네임노드를 선출하기 위해 주피커를 사용한다. 스탠바이 네임노드를 활성화시키는 전환 작업은 Failover Controller라는 객체가 관리한다.

 

 

 

[ NFS (Network File System) ]

네트워크 공유스토리지를 활용하는 방법으로 에디트로그를 공유스토리지에 공유하고 펜싱을 히용하여 한개의 네임노드만 에디트로그를 기록하게 한다. 공유스토리지의 단점은 공유 스토리지 장애가 발생하면 서비스에 문제가 발생할 있다. 일반적으로 공유 스토리지를 사용할 경우 공유 스토리지 자체가 이중화 되어 있는 경우가 많다.

 

 

 

[참고자료]

·       HDFS High Availability Using the Quorum Journal Manager : https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

·       HDFS High Availability  : https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithNFS.html

·       NameNode High Availability in Hadoop HDFS  : https://data-flair.training/blogs/hadoop-hdfs-namenode-high-availability/

 

 

2019-12-04 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, HDFS 고가용성, 주키퍼, HDFS HA, Zookeeper

requirements.txt
0.00MB

Python으로 Hive 연결하기

 

·       Version : Python 2.7.5, pip, Hive, CDH 6.3.0, Centos7

 

Hive 하둡 에코시스템 중에서 데이터를 모델링하고 프로세싱할때 가장 많이 사용되는 데이터 웨어하징 솔루션이다. RDB 데이터베이스, 테이블과 같은 형태로 HDFS 저장된 데이터의 구조를 정의하는 방법을 제공하여 SQL 유사한 HiveQL쿼리를 사용하여 데이터를 조작할수 있다.

·       Hive Architecture : https://en.wikipedia.org/wiki/Apache_Hive

 

필자의 경우, 배치잡 성격의 데이터 처리나 하이브 쿼리 조회등의 자동화 작업을 대부분 파이썬 스크립트로 개발하고, 해당 파이썬을 Cron 으로 실행하는 방식으로 운영하고 있다. (물론 에코시스템중에 좋은 ETL 툴이 많지만, 관리 유지보수 차원에서 파이썬을 선택하였다.) 오픈소스 프로젝트로 작업을 진행하면서 자주 느끼는 부분인데, 오픈소스는 궁합이 매우 중요하다. 특히 파이썬의 경우 버전에 따라 지원되는 기능 패키지 모듈이 다르기 때문에 버전 문제로 인한 스트레스가 있는 편이다. 이번 포스팅은 pyhive 패키지를 이용해서 파이썬에서 Hive 커넥트할 있는 방법에 대해서 알아본다.

 

필자의 하둡 환경은 Cloudera Hadoop 6.3.0, Centos7, Python 2.7.5 환경이다. 첨부된 requirement.txt 사용하여, 필요한 pip 패키지를 설치한다. 해당 파일에는 hive 커텍트에 필요한 패키지 외에, 필자가 필요한 pip 패키지가 일부 포함되어 있다.

pip install -r /path/to/requirements.txt

 

아래 내용은 설치되어 있는 pip 패키지 리스트이다.

backports.ssl-match-hostname==3.5.0.1

certifi==2019.9.11

chardet==3.0.4

configobj==4.7.2

decorator==3.4.0

docopt==0.6.2

future==0.18.2

futures==3.1.1

hdfs==2.5.8

hdfs3==0.3.1

idna==2.8

iniparse==0.4

ipaddress==1.0.16

IPy==0.75

javapackages==1.0.0

kitchen==1.1.1

langtable==0.0.31

LinkChecker==9.3

lxml==3.2.1

MySQL-python==1.2.5

numpy==1.16.5

pandas==0.24.2

perf==0.1

pexpect==4.7.0

policycoreutils-default-encoding==0.1

psycopg2==2.5.1

ptyprocess==0.6.0

pycurl==7.19.0

pygobject==3.22.0

pygpgme==0.3

PyHive==0.6.1

pyliblzma==0.5.3

pysasl==0.4.1

python-augeas==0.5.0

python-dateutil==2.8.1

python-linux-procfs==0.4.9

pytz==2019.3

pyudev==0.15

pyxattr==0.5.1

PyYAML==3.10

requests==2.22.0

sasl==0.2.1

schedutils==0.4

seobject==0.1

sepolicy==1.1

six==1.9.0

slip==0.4.0

slip.dbus==0.4.0

SSSDConfig==1.16.4

thrift==0.13.0

thrift-sasl==0.3.0

urlgrabber==3.10

urllib3==1.25.7

virtualenv==15.1.0

yum-langpacks==0.4.2

yum-metadata-parser==1.1.4

 

패키지 설치가 완료되었으면, 파이썬에서 필요한 패키지를 import 하여 Hive 커넥트 한다. 아래 스크립트는 파이썬에서 hive 연결하거 tbl이라는 테이블의 내용을 조회하는 예제이다.

from pyhive import hive

 

conn = hive.Connection(host='hd-master', port=10000, username='ID', password='PASSWORD', database='default', auth='CUSTOM')

cur = conn.cursor()

cur.execute('select 1 from tbl')

result = cur.fetchall()

 

 

 

2019-12-03 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, hive, 파이썬으로 hive 연결하기, python connect to hive, hive connection, pyhive

+ Recent posts