nifi 에서 putHDFS 등의 프로세서를 사용하여 연결하려면

HDFS 에서 사용하는 config 파일(core-site.xml, hdfs-site.xml)들이 필요함.

 

HDFS 서버와 NiFi 서버가 같은 서버가 아니라면,

NiFi 가 읽을 수 있도록 HDFS 서버로부터 NiFi 서버로 config 파일들을 옮겨오자.

 

아래 이미지와 같이, hadoop configuration resources 의 value 에

nifi 에서 접근 가능한 core-site.xml, hdfs-site.xml 을 comma 로 구분해서 넣어주면 됨.

 

https://community.cloudera.com/t5/Support-Questions/how-to-read-my-hdfs-data-into-nifi-cluster/td-p/157623

 

config 파일 내에서 abc.def 등 ip 대신 이름을 사용하고 있다면

NiFi 서버 내 /etc/hosts 에 ip 와 abc.def 이름을 같이 적어주어

NiFi 가 이름을 보고도 ip 를 알 수 있도록 한다.

 

hdfs 와 연결은 되었으나, 권한 문제로 NiFi 에서 다음과 같은 로그가 뜰 수 있음.

08:24:50 UTCERRORc23d39a9-a414-1aba-ffff-ffffd870d511nifi-....local:8..1 ListHDFS[id=c23d39a9-a414-1aba-ffff-ffffd870d511] Failed to retrieve HDFS listing for subdirectory hdfs://abc/def/.... due to Permission denied: user=nifi, access=READ_EXECUTE, inode="/.....":hive:hadoop:drwx------ at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:399) at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:261) at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:193) at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1857)
......

해석해보면, 지금 HDFS 에 접근하고 있는 유저 이름이 'nifi'인데, 읽기 실행을 요청했지만

READ 권한이 없어서 permission denied 가 떴음.

왜냐하면 'nifi' 유저가 읽고싶어했던 파일의 권한이 hive:hadoop:rwx------ 였으니까.

 

'nifi' 유저가 파일을 읽도록 하기 위해선

HDFS 의 root 권한이 있는 유저로 접근해서 해당 파일의 권한을 nifi 로 바꿔주면 된다.

예를 들어 다음과 같은 명령어를 사용함

hdfs dfs -chown -R nifi:nifi /abc/def/my-data

 

아니면 소유권은 그대로 두되 읽기 권한만 주는 것도 괜찮겠다.

즉 chown 이 아니라 chmod 로 읽기 권한을 주는 것임

근데 이 방법은 내가 직접 해보지 않음.

 

 

 

 

 

 

 

참고

community.cloudera.com/t5/Support-Questions/NiFi-putHdfs-Error/td-p/206947

community.cloudera.com/t5/Support-Questions/PutHDFS-permission-problem/td-p/239853

community.cloudera.com/t5/Support-Questions/how-to-read-my-hdfs-data-into-nifi-cluster/td-p/157623

 

 

 

+ Recent posts