오늘은 우분투 서버에 있는 하둡 서버를 주피터로 연결하여 주피터에서 hdfs를 사용해보록 하겠습니다.
외부 접속을 허용하기위해 경로를 열어줘야 됩니다.
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 라고 나오면 설정 완료입니다.
이것 역시 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
2번에서 설정해주었던 포트 9870의 외부 접속을 허용해 줍니다.
sudo ufw allow 9870
sudo groupadd <그룹이름>
sudo adduser <사용자이름>
sudo usermod -aG <그룹이름> <사용자이름>
저는 하둡 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- (읽고 쓰는 권한)이 잘 부여된걸 확인 할 수 있습니다.
stop-all.sh
start-all.sh
이제 주피터로 넘어와 hdfs라이브러리를 통하여 hdfs를 써보겠습니다.
pip install hdfs
from hdfs import InsecureClient
client = InsecureClient('http://<하둡이 있는 ip주소>:<namenodeport번호>', user='<사용자이름>')
with client.read(hdfs_file_path) as data:
for line in data:
print(line.strip())
with client.wirte('hdfs_file_path') as data :
for line in data:
webhdfs에 관한 블로그
https://wookiist.dev/173
namenode-address와 fs.default.name의 차이점
hdfs라이브러리 문서
https://hdfscli.readthedocs.io/en/latest/api.html