[HADOOP] Hadoop : map / reduce로 처리 할 (많은) 사진 이미지에 액세스하는 방법?
HADOOPHadoop : map / reduce로 처리 할 (많은) 사진 이미지에 액세스하는 방법?
나는 10M + 사진을 로컬 파일 시스템에 저장했다. 이제는 각각의 사진을 바이너리로 분석하여 강아지인지 확인하고 싶습니다. 나는 기본적으로 클러스터 된 hadoop 환경에 대한 분석을 원한다. 문제는지도 메소드의 입력을 어떻게 디자인해야합니까? 예를 들어,지도 메소드에서, 새로운 FaceDetection (photoInputStream) .isDog ()는 분석을위한 모든 기본 로직입니다.
구체적으로는, 모든 사진을 HDFS에 업로드해야합니까? 가정하자.
hadoop, map / reduce 및 hdfs에 대한 기본 원칙에 대한 지식이 부족한 것 같지만 위의 질문에 대해 감사드립니다. 감사합니다!
해결법
-
==============================
1.가장 큰 문제점은 각 파일이 하나의 파일에 존재한다는 것입니다. 따라서 10M 파일이있는 경우 10M 매퍼가 제공됩니다. 이는 대단히 합리적이지 않습니다. 파일을 SequenceFile (키 - 값 쌍당 하나의 이미지)에 미리 직렬화하는 것이 좋습니다. 이렇게하면 MapReduce 작업 네이티브에 데이터를로드하게되므로 까다로운 코드를 작성할 필요가 없습니다. 또한 원하는 경우 모든 데이터를 하나의 SequenceFile에 저장할 수 있습니다. Hadoop은 SequenceFiles를 아주 잘 처리합니다.
가장 큰 문제점은 각 파일이 하나의 파일에 존재한다는 것입니다. 따라서 10M 파일이있는 경우 10M 매퍼가 제공됩니다. 이는 대단히 합리적이지 않습니다. 파일을 SequenceFile (키 - 값 쌍당 하나의 이미지)에 미리 직렬화하는 것이 좋습니다. 이렇게하면 MapReduce 작업 네이티브에 데이터를로드하게되므로 까다로운 코드를 작성할 필요가 없습니다. 또한 원하는 경우 모든 데이터를 하나의 SequenceFile에 저장할 수 있습니다. Hadoop은 SequenceFiles를 아주 잘 처리합니다.
기본적으로이 방식의 작동 방식은 여러 이미지 파일을 가져와 광선 바이트를 메모리로 읽어 들이고 SequenceFile의 키 - 값 쌍에 데이터를 저장하는 별도의 Java 프로세스를 갖게됩니다. 계속해서 HDFS에 계속 기록하십시오. 이 작업은 다소 시간이 걸릴 수 있지만 한 번만 수행하면됩니다.
합리적인 클러스터가 있으면 (이 경우 Hadoop을 고려하고 있어야하며 실제로 Hadoop의 기능을 사용하고 싶다면 괜찮습니다). MapReduce 작업이 실행되고 파일을로드하지만 맵퍼는 이미지가 아닌 텍스트 파일에 데이터 로컬로 실행됩니다! 따라서 기본적으로 JobTracker는 파일이있는 작업을 배치하지 않으므로 모든 곳에서 이미지 파일을 뒤섞습니다. 이로 인해 상당량의 네트워크 오버 헤드가 발생합니다. 1TB의 이미지가있는 경우 노드가 여러 개있는 경우 네트워크를 통해 많은 이미지가 스트리밍 될 것으로 예상 할 수 있습니다. 이것은 상황과 클러스터 크기 (소수의 노드 이하)에 따라 그리 좋지 않을 수 있습니다.
이 작업을 수행하려는 경우 FileSystem API를 사용하여 파일을 만들 수 있습니다 (열려있는 메서드를 사용하려는 경우).
-
==============================
2.각 파일을 시퀀스 파일에 저장하는 데 초가 걸린다 고 가정합니다. 개별 파일을 시퀀스 파일로 변환하는 데 ~ 115 일이 소요됩니다. 단일 시스템에서도 병렬 처리가 가능하므로 디스크 읽기 / 쓰기가 사진 파일을 읽고 시퀀스 파일을 쓰는 병목 일 것이기 때문에별로 개선되지 않았습니다. 작은 파일 문제에 대한이 Cloudera 기사를 확인하십시오. 또한 tar 파일을 시퀀스 파일로 변환하는 스크립트에 대한 참조와 변환에 소요 된 시간이 있습니다.
각 파일을 시퀀스 파일에 저장하는 데 초가 걸린다 고 가정합니다. 개별 파일을 시퀀스 파일로 변환하는 데 ~ 115 일이 소요됩니다. 단일 시스템에서도 병렬 처리가 가능하므로 디스크 읽기 / 쓰기가 사진 파일을 읽고 시퀀스 파일을 쓰는 병목 일 것이기 때문에별로 개선되지 않았습니다. 작은 파일 문제에 대한이 Cloudera 기사를 확인하십시오. 또한 tar 파일을 시퀀스 파일로 변환하는 스크립트에 대한 참조와 변환에 소요 된 시간이 있습니다.
기본적으로 사진은 시퀀스로 변환하기 위해 분산 된 방식으로 처리되어야합니다. 하둡으로 돌아 가기 :)
Hadoop - The Definitive Guide에 따르면
따라서 10M 파일을 직접로드하려면 NameNode에 네임 스페이스를 저장하기 위해 약 3,000MB의 메모리가 필요합니다. 작업 실행 중 노드에서 사진을 스트리밍하는 일은 잊어 버리십시오.
이 문제를 해결하는 더 좋은 방법이 있어야합니다.
또 다른 방법은 파일을 그대로 HDFS에로드하고 작은 파일을 입력 분할로 결합하고 입력 분할을 계산하는 동안 데이터 지역을 고려하는 CombineFileInputFormat을 사용하는 것입니다. 이 접근법의 장점은 변환없이 파일을 그대로 HDFS에로드 할 수 있고 노드간에 데이터가 많이 이동하지 않는다는 것입니다.
-
==============================
3.나는 Hadoop과 매우 비슷한 것을 한 곳에서 프로젝트를 진행했다. (2008?) 나는 처음에 HDFS를 사용하여 사진을 저장했다고 생각하고 처리 할 파일을 나열한 텍스트 파일을 만들었습니다. 개념은 map / reduce를 사용하여 텍스트 파일을 여러 조각으로 나눠서 클라우드에 분산시켜 각 노드가받은 목록의 일부분을 기반으로 파일의 일부를 처리하도록하는 것입니다. 죄송합니다. 더 자세한 내용은 기억하지 않지만 일반적인 접근 방법입니다.
나는 Hadoop과 매우 비슷한 것을 한 곳에서 프로젝트를 진행했다. (2008?) 나는 처음에 HDFS를 사용하여 사진을 저장했다고 생각하고 처리 할 파일을 나열한 텍스트 파일을 만들었습니다. 개념은 map / reduce를 사용하여 텍스트 파일을 여러 조각으로 나눠서 클라우드에 분산시켜 각 노드가받은 목록의 일부분을 기반으로 파일의 일부를 처리하도록하는 것입니다. 죄송합니다. 더 자세한 내용은 기억하지 않지만 일반적인 접근 방법입니다.
from https://stackoverflow.com/questions/8752772/hadoop-how-to-access-many-photo-images-to-be-processed-by-map-reduce by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] HIVE 시작시 java.net.URISyntaxException (0) | 2019.06.02 |
---|---|
[HADOOP] hadoop에서 SUCCESS 및 part-r-00000 파일이란 무엇입니까? (0) | 2019.06.02 |
[HADOOP] 스파크 RDD - 항상 RAM에있는 파티션입니까? (0) | 2019.06.02 |
[HADOOP] HDFS의 대형 블록 크기! 사용되지 않은 공간은 어떻게 계산됩니까? (0) | 2019.06.02 |
[HADOOP] HBase에 데이터를 프로그램 방식으로 대량로드하는 가장 빠른 방법은 무엇입니까? (0) | 2019.06.02 |