[HADOOP] HDFS Java의 기존 파일에 데이터 추가
HADOOPHDFS Java의 기존 파일에 데이터 추가
HDFS의 기존 파일에 데이터를 추가하는 데 문제가 있습니다. 나는 그 파일이 존재한다면 줄을 추가하고 그렇지 않다면 주어진 이름으로 새로운 파일을 생성하기를 원한다.
여기 내 방식으로 HDFS에 글을 쓸 수 있습니다.
if (!file.exists(path)){
file.createNewFile(path);
}
FSDataOutputStream fileOutputStream = file.append(path);
BufferedWriter br = new BufferedWriter(new OutputStreamWriter(fileOutputStream));
br.append("Content: " + content + "\n");
br.close();
실제로이 방법은 HDFS에 기록하고 파일을 만들지 만 추가하지는 않습니다.
이것이 내 방법을 테스트하는 방법입니다.
RunTimeCalculationHdfsWrite.hdfsWriteFile("RunTimeParserLoaderMapperTest2", "Error message test 2.2", context, null);
첫 번째 매개 변수는 파일의 이름이고 두 번째 매개 변수는 다른 매개 변수는 중요하지 않습니다.
누구나 제가 놓치고 잘못 생각한 것을 가지고 있습니까?
해결법
-
==============================
1.실제로 HDFS 파일에 추가 할 수 있습니다.
실제로 HDFS 파일에 추가 할 수 있습니다.
HDFS 소스를 확인한 결과, DistributedFileSystem # append 메소드가 있습니다.
FSDataOutputStream append(Path f, final int bufferSize, final Progressable progress) throws IOException
자세한 내용은 프리젠 테이션을 참조하십시오.
또한 명령 줄을 통해 추가 할 수도 있습니다.
hdfs dfs -appendToFile <localsrc> ... <dst>
stdin에서 직접 행을 추가하십시오.
echo "Line-to-add" | hdfs dfs -appendToFile - <dst>
-
==============================
2.HDFS는 추가 작업을 허용하지 않습니다. 추가 기능과 동일한 기능을 구현하는 한 가지 방법은 다음과 같습니다.
HDFS는 추가 작업을 허용하지 않습니다. 추가 기능과 동일한 기능을 구현하는 한 가지 방법은 다음과 같습니다.
-
==============================
3.해결 .. .. !!
해결 .. .. !!
Append는 HDFS에서 지원됩니다.
다음과 같이 구성 및 간단한 코드를 수행하면됩니다.
1 단계 : hdfs-site.xml에서 dfs.support.append를 true로 설정하십시오.
<property> <name>dfs.support.append</name> <value>true</value> </property>
stop-all.sh를 사용하여 모든 데몬 서비스를 중지하고 start-all.sh를 사용하여 다시 시작하십시오.
2 단계 (선택 사항) : 단 하나의 단일 클러스터가있는 경우 다음과 같이 복제 계수를 1로 설정해야합니다.
커맨드 라인을 통해 :
./hdfs dfs -setrep -R 1 filepath/directory
또는 자바 코드를 통해 런타임에 동일한 작업을 수행 할 수 있습니다.
fShell.setrepr((short) 1, filePath);
3 단계 : 파일에 데이터 작성 / 추가 코드 :
public void createAppendHDFS() throws IOException { Configuration hadoopConfig = new Configuration(); hadoopConfig.set("fs.defaultFS", hdfsuri); FileSystem fileSystem = FileSystem.get(hadoopConfig); String filePath = "/test/doc.txt"; Path hdfsPath = new Path(filePath); fShell.setrepr((short) 1, filePath); FSDataOutputStream fileOutputStream = null; try { if (fileSystem.exists(hdfsPath)) { fileOutputStream = fileSystem.append(hdfsPath); fileOutputStream.writeBytes("appending into file. \n"); } else { fileOutputStream = fileSystem.create(hdfsPath); fileOutputStream.writeBytes("creating and writing into file\n"); } } finally { if (fileSystem != null) { fileSystem.close(); } if (fileOutputStream != null) { fileOutputStream.close(); } } }
친절하게 다른 도움이 필요하면 알려주세요.
건배.!!
from https://stackoverflow.com/questions/22997137/append-data-to-existing-file-in-hdfs-java by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop Map에서 목록 출력 Custom writable을 사용하여 작업 줄이기 (0) | 2019.06.01 |
---|---|
[HADOOP] apache spark - 파일이 존재하는지 확인 (0) | 2019.06.01 |
[HADOOP] hadoop hdfs에있는 디렉토리와 서브 디렉토리에있는 모든 파일을 나열하는 법 (0) | 2019.06.01 |
[HADOOP] Spark를 사용하여 HDFS에서 파일을 읽을 수 없습니다. (0) | 2019.06.01 |
[HADOOP] Hadoop 데이터 노드가 NameNode를 찾을 수 없습니다. (0) | 2019.06.01 |