[HADOOP] 왜 파일이 hadoop에 존재하는지 검사하면 NullPointerException이 발생합니까?
HADOOP왜 파일이 hadoop에 존재하는지 검사하면 NullPointerException이 발생합니까?
만들기 또는 HDFS 일부 출력을 저장하는 파일을 열려고하지만 아래 코드 줄 마지막 줄 두 번째 exist 메서드를 호출 할 때 NullPointerException 점점 :
DistributedFileSystem dfs = new DistributedFileSystem();
Path path = new Path("/user/hadoop-user/bar.txt");
if (!dfs.exists(path)) dfs.createNewFile(path);
FSDataOutputStream dos = dfs.create(path);
다음은 스택 추적입니다.
java.lang.NullPointerException
at org.apache.hadoop.dfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:390)
at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:667)
at ClickViewSessions$ClickViewSessionsMapper.map(ClickViewSessions.java:80)
at ClickViewSessions$ClickViewSessionsMapper.map(ClickViewSessions.java:65)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:47)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:227)
at org.apache.hadoop.mapred.TaskTracker$Child.main(TaskTracker.java:2209)
문제는 무엇이 될 수 있습니까?
해결법
-
==============================
1.나는 이렇게하는 것이 선호되는 방법이라고 생각한다.
나는 이렇게하는 것이 선호되는 방법이라고 생각한다.
Configuration conf = new Configuration(); conf.set("fs.default.name", "hdfs://mynamenodehost:9000"); FileSystem fs = FileSystem.get(conf); Path path = ...
그렇게하면 FileSystem의 특정 구현에 코드를 묶지 않아도됩니다. 또한 FileSystem의 각 구현을 초기화하는 방법에 대해 걱정할 필요가 없습니다.
-
==============================
2.기본 생성자 인 DistributedFileSystem ()은 초기화를 수행하지 않습니다. dfs.initialize ()를 명시 적으로 호출해야합니다.
기본 생성자 인 DistributedFileSystem ()은 초기화를 수행하지 않습니다. dfs.initialize ()를 명시 적으로 호출해야합니다.
널 포인터 예외가 발생하는 이유는 DistributedFileSystem이 내부적으로 DFSClient의 인스턴스를 사용하기 때문입니다. initialize ()를 호출하지 않았으므로 DFSClient의 인스턴스는 null입니다. getFileStatus ()는 dfsClient.getFileInfo (getPathName (f))를 호출합니다. 이는 dfsClient가 null이므로 NullPointerException을 발생시킵니다.
https://trac.declarativity.net/browser/src/hdfs/org/apache/hadoop/dfs/DistributedFileSystem.java?rev=3593을 참조하십시오.
-
==============================
3.
DistributedFileSystem dfs = new DistributedFileSystem(); dfs.initialize(new URI("URI to HDFS"), new Configuration()); Path path = new Path("/user/hadoop-user/bar.txt"); if (!dfs.exists(path)) dfs.createNewFile(path); FSDataOutputStream dos = dfs.create(path);
from https://stackoverflow.com/questions/4727901/why-does-checking-whether-a-file-exists-in-hadoop-cause-a-nullpointerexception by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] YARN UNHYALTHY 노드 (0) | 2019.07.26 |
---|---|
[HADOOP] 지도에서 키에 유형이 일치하지 않습니다. 예상 됨.받은 텍스트 ... LongWritable (0) | 2019.07.26 |
[HADOOP] hadoop에서 작은 파일 병합 (0) | 2019.07.26 |
[HADOOP] hadoop이 여러 디렉토리와 파일에서 입력 받아 들일 수 있습니까? (0) | 2019.07.26 |
[HADOOP] hbase.hregion.max.filesize를 사용하여 HBase 영역 자동 분할 (0) | 2019.07.26 |