2012-01-28 3 views
1

나는 hadoop hdfs 병렬로 파일을 전송하는 코드를 작성 중이다. 그래서 나는 filesystem.copyFromLocalFile을 호출하는 많은 쓰레드를 가지고있다.에 대한 hadoop 파일 시스템 transferFromLocalFile

파일 시스템을 여는 데 드는 비용은 작지 않으므로 프로젝트에 하나의 파일 시스템 만 열었습니다. 그래서 나는 많은 스레드가 동시에 그것을 호출 할 때 문제가있을 수 있습니다. 그러나 지금까지 문제없이 잘 작동합니다.

누구든지이 복사 방법에 대한 정보를 제공해 줄 수 있습니까? 고맙습니다. & 주말 보내 주셔서 감사합니다.

답변

0

copyFromLocalFile()에 대해 더 많은 정보를 원하십니까?

확실하지 않지만 귀하의 경우에는 스레드가 동일한 리소스를 공유합니다. FileSystem 인스턴스가 하나 뿐이므로, 각 클라이언트는이 객체를 시간 공유 기준으로 공유 할 수 있습니다.

+0

코드에 동기화가 없습니다. 그래서 시간을 공유하지 않습니다. 얼마나 많은 스레드가 실행 되더라도 상관 없습니다. 복사 이외에도 내부 상태를 저장하지 않아야하므로 이것이 작동합니다. –

+0

이 copyFromLocalFile()이 스레드로부터 안전한지 알고 싶습니다. 또는 파일 시스템이 파일 tranfering을 위해 많은 스레드를 시작합니다. –

1

고려해야 할 설계 포인트는 다음과 같습니다.
a) 프로세스의 병목 현상은 어디에 있습니까? 2 ~ 3 개의 병렬 복사 작업에서 로컬 디스크 또는 1GB 이더넷이 병목 현상이 될 것이라고 생각합니다. 다중 스레드 응용 프로그램의 형태로 수행하거나 몇 가지 프로세스를 실행할 수 있습니다. 어쨌든 당신은 높은 수준의 병렬 처리가 필요하다고 생각하지 않습니다. b) 오류 처리. 한 스레드의 오류로 인해 전체 프로세스가 중단되어서는 안되며 동시에 파일이 손실되지 않아야합니다. 이런 경우에 보통 내가하는 일은 최악의 경우 파일을 두 번 복사 할 수 있다는 것에 동의하는 것입니다. 그것이 좋다면 - 시스템은 간단한 "복사 후 삭제"시나리오에서 작동 할 수 있습니다. c) 클러스터 노드 중 하나에서 복사하는 경우 - 복사 한 위치의 호스트에 하나의 복제본이 저장되므로 HDFS가 불균형하게됩니다. 당신은 균형을 끊임없이해야 할 것입니다.

관련 문제