파이썬 hdfs 라이브러리 실행

김윤지·2023년 9월 18일
0

오늘은 우분투 서버에 있는 하둡 서버를 주피터로 연결하여 주피터에서 hdfs를 사용해보록 하겠습니다.

Hadoop

1.경로 설정

외부 접속을 허용하기위해 경로를 열어줘야 됩니다.

  • 포트 외부 접속 허용
  • namenode.http-address 설정
  • dfs.webhdfs.enabled 설정
    총 3가지를 설정해주시면 됩니다.

1)dfs.webhdfs.enabled 설정

WebHDFS는 Hadoop 클러스터에 HTTP 프로토콜을 사용하여 HDFS에 접근할 수 있는 웹 인터페이스를 제공합니다. 웹HDFS를 활성화하면 HTTP를 통해 파일 시스템 작업을 수행할 수 있으므로, 웹 브라우저 또는 HTTP 클라이언트를 통해 HDFS에 접근할 수 있게 됩니다.

hdfs-site.xml에 추가해주시면 됩니다.

vi hadoop/etc/hadoop/hdfs-site.xml
        <property>
                <name>dfs.webhdfs.enabled</name>
                <value>true</value>
        </property>

설정이 되었는지 확인해줍니다.

hdfs getconf -confKey dfs.webhdfs.enabled

true 라고 나오면 설정 완료입니다.

2)namenode.http-address 설정

이것 역시 hdfs-site.xml에 추가해주시면 됩니다.
저는 포트번호는 9870이며, 외부접속 허용을 위해 0.0.0.0으로 설정해주었습니다.

vi hadoop/etc/hadoop/hdfs-site.xml
        <property>
                <name>dfs.namenode.http-address</name>
                <value>0.0.0.0:9870</value>
        </property>

설정이 되었는지 확인해줍니다.

netstat -antup | grep LISTEN |sort -n 
  • 네트워크 연결 상태 확인하는 명령어

    0.0.0.0:<namenodeport번호> 로 뜨면 설정 완료입니다.

3)포트 외부 접속 허용

2번에서 설정해주었던 포트 9870의 외부 접속을 허용해 줍니다.

sudo ufw allow 9870

2. hadoop 사용자 설정

1)하둡을 사용할 사용자그룹 만들기

sudo groupadd <그룹이름>

2)사용자 계정 추가

sudo adduser <사용자이름>

3)사용자를 그룹에 추가

sudo usermod -aG <그룹이름> <사용자이름>

4)그룹 권한 설정

저는 하둡 test 디렉토리에다가 1)에서 만든 그룹에 읽고 쓸수 있는 권한을 주겠습니다.

hdfs dfs -chmod g+rw /test
hdfs dfs -chgrp <그룹이름> /test

<사용자(User) 권한 변경 옵션>
u: 파일의 소유자(User)에 대한 권한을 지정
g: 파일의 그룹(Group)에 대한 권한을 지정
o: 기타 사용자(Other)에 대한 권한을 지정
a: 모든 사용자(All)에 대한 권한을 지정 (u+g+o와 동일)

<권한 추가/제거 옵션>
+: 권한을 추가
-: 권한을 제거

<권한 설정 옵션>
r: 읽기(read) 권한을 설정
w: 쓰기(write) 권한을 설정
x: 실행(execute) 권한을 설정

설정이 되었는지 확인해봅시다.

hdfs dfs -getfacl /test


hadoop 이란 그룹에 rw- (읽고 쓰는 권한)이 잘 부여된걸 확인 할 수 있습니다.

5)하둡 다시 실행

stop-all.sh
start-all.sh

hdfs 라이브러리

이제 주피터로 넘어와 hdfs라이브러리를 통하여 hdfs를 써보겠습니다.

hdfs 기초 설정

pip install hdfs
from hdfs import InsecureClient
client = InsecureClient('http://<하둡이 있는 ip주소>:<namenodeport번호>', user='<사용자이름>')
  • ip주소는 터미널에 "ifconfig" 를 통해 알 수 있습니다.
  • 사용자이름은 위에 만들어 놨던 사용자 이름을 입력하시면 됩니다.

예제 실행

1) 파일 읽기

with client.read(hdfs_file_path) as data:
    for line in data:
        print(line.strip())

2) 파일 쓰기

with client.wirte('hdfs_file_path') as data :
    for line in data:
         

참고 사이트

webhdfs에 관한 블로그
https://wookiist.dev/173

namenode-address와 fs.default.name의 차이점

https://community.cloudera.com/t5/Support-Questions/difference-between-fs-defaultFS-and-dfs-namenode-http/m-p/214958

hdfs라이브러리 문서
https://hdfscli.readthedocs.io/en/latest/api.html

0개의 댓글