2016-06-08 2 views
1

HDFS에서 저장소를 모니터링하여 복사 된 파일의 데이터를 읽고 처리하려고합니다. (로컬 시스템에서 HDFS로 파일을 복사하는 데 hdfs dfs -put을 사용합니다.) 때때로 문제가 발생합니다. 스파크 스트리밍 : java.io.FileNotFoundException : 파일이 존재하지 않습니다 :. COPYING 그래서 포럼과 문제의 질문을 여기에서 읽었습니다 Spark Streaming: java.io.FileNotFoundException: File does not exist: <input_filename>._COPYING_ 내가 읽은 바에 따르면 스파크가 HDFS와 Github : https://github.com/maji2014/spark/blob/b5af1bdc3e35c53564926dcbc5c06217884598bb/streaming/src/main/scala/org/apache/spark/streaming/dstream/FileInputDStream.scala에 복사되기 전에 파일을 읽는 것과 관련이 있습니다. 문제는 단지 FileInputDStream에 대해서만 볼 수 있지만 사용하고 있습니다. textFileStream FileInputDStream을 사용하려고 시도하면 IDE에서이 장소에서 Symbol에 액세스 할 수없는 오류가 발생합니다. 는 아무도 내가 시도 때문에 여전히 복사 할 파일을 필터링하는 방법을 알고 있나요 :Spark Streaming textFileStream 복사

var lines = ssc.textFileStream(arg(0)).filter(!_.contains("_COPYING_") 

을하지만 작동하지 않았다 및 필터 같아요 파일 프로세스의 이름에 적용해야하기 때문에이 예정되어있는 나는 접근 할 수 없다 당신이 볼 수 있듯이 나는 질문을하기 전에 많은 연구를했지만 행운을 얻지는 못했다. 도움이 필요하십니까?

+0

코드의 어느 시점에서 오류가 발생합니까? 스트리밍 직후 또는 첫 번째 변환시? – Vale

+0

@Vale이 오류는 항상 나타나지 않습니다. 파일을 HDFS에 저장하는 셸 프로그램을 만들었습니다. Spark Streaming에서 실행될 때까지 오류가 발생합니다. – Jean

답변

2

그래서 나는 모양을 보았습니다 : -put is the wrong method. 최종 설명을 보자. 쉘 스크립트에서 -rename을 사용하여 HDFS에 원자 트랜잭션을 가져야한다.

+0

해답을 주셔서 감사합니다.하지만 설명해주십시오. 어떻게 이름 바꾸기를 사용합니까? "hdfs dfs -put fileName directoryName"대신 "hdfs dfs -rename fileName directoryName"을 사용해야한다는 의미입니까? – Jean

+1

'hadoop fs -mv oldName newName' 파일을 원자 적으로 이동하고 이름을 변경하는 것입니다. (이름 바꾸기는 hadoop이 아니며, 죄송합니다.) – Vale

+0

고맙지 만이 명령에는 대상 디렉토리가 없으므로 혼란 스럽습니다. 로컬 파일에서 파일을 옮길 때부터 이전 이름을 모른다. – Jean

관련 문제