2012-01-26 2 views
1

구조화 된 데이터가 들어있는 hdtf에 큰 파일이 저장되어 있다고 가정 해보십시오. 이제 목표는 두 번째 열 값이 둘 사이에있는 파일의 모든 행처럼 파일의 일부 데이터 만 처리하는 것입니다. hdfs가 파일의 관련 부분을 스트리밍하는 대신 매퍼에게 모든 것을 스트리밍하는 것과 같이 MR 작업을 시작할 수 있습니까?HDFS 파일의 일부에서 MR 작업 실행

이유는 필요한 부분에서만 작업 속도를 높이려는 것입니다. 아마 하나의 접근 방식은 새로운 파일을 만들기 위해 MR 작업을 실행하는 것입니다. 그러나 나는 그것을 피할 수 있는지 궁금합니다.

목표는 HDFS에 데이터를 보관하는 것이므로 데이터베이스에서 읽고 쓰고 싶지 않습니다.

답변

2

HDFS는 파일을 블록으로 바이트 묶음으로 저장하므로 색인이 없으므로 파일의 일부만을 읽을 수 없습니다 (적어도이 글을 쓰는 시점에서는). 또한, 주어진 매퍼는 파일의 첫 번째 블록이나 400 번째 블록을 가져올 수 있으며이를 제어 할 수는 없습니다.

즉, MapReduce의 요점은 많은 기계에 부하를 분산시키는 것입니다. 우리 클러스터에서는 한 번에 최대 28 개의 맵퍼 (4 노드의 노드 당 7 개)를 실행하므로 입력 파일이 1TB 인 경우 각 맵 슬롯은 전체 파일의 3 % 또는 약 30GB 만 읽을 수 있습니다. 매퍼에서 원하는 필터를 수행하고 관심있는 행만 처리하면됩니다.

정말로 필터링 된 액세스가 필요한 경우 HBase에 데이터를 저장하는 것이 좋습니다. MapReduce 작업의 기본 소스로 작동하고, 필터링 된 읽기를 제공하고, HDFS에 데이터를 저장하므로 분산 된 환경에 있습니다.

+1

0.92에서 도입 된 코 프로세서는 필터와 유사한 데이터를 필터링하는 데에도 사용할 수 있습니다. 코 프로세서와 필터의 차이점은 무엇인지 정확히 알 수 없습니다. 내가 생각할 수있는 한 가지는, 필터는 클라이언트에서 정의되고 보조 프로세서는 서버에서 정의됩니다. 따라서 코 프로세서는 여러 클라이언트에서 재사용 할 수 있습니다. 한가지 주목해야 할 것은 필터와 보조 프로세서가 모두 서버에서 실행되고 클라이언트에 전송 된 데이터를 줄이는 것입니다. –

+0

좋은 지적 Praveen. 하지만 내 이해는 코 프로세서는 기본 HDFS M/R이 아닌 기본 전용입니다. –

+0

Chris - HBase를 기본으로하지 않습니까? MR에서 사용되는 보조 프로세서를 중단시키는 것은 무엇입니까? HBase 그룹에 코 프로세서와 필터의 차이점에 대한 쿼리를 게시했지만 응답이 없습니다. –

1

하이브가이 문제를 해결하는 방법에 대한 한 가지 대답이 있습니다. 데이터는 실제로 디스크에있는 파일에 대한 메타 데이터 인 "테이블"에 있습니다. Hive를 사용하면 테이블이 분할 된 열을 설정할 수 있습니다. 당신이 날짜별로 파일을 분할하는 것처럼, 그래서 이것은 당신이 할 것이다 각 파티션에 대해 별도의 폴더를 만듭니다

날짜 디렉토리의 내부
/mytable/2011-12-01 
/mytable/2011-12-02 

당신에게 실제 파일이 될 것입니다. 따라서 다음과 같은 검색어를 실행 한 경우 :

SELECT * FROM mytable WHERE dt ='2011-12-01' 

/mytable/2011-12-01의 파일 만 작업에 공급됩니다.

Tho 결론은 이와 같은 기능을 원한다면 상위 레벨 언어 (하이브/돼지)로 이동하거나 자신의 솔루션을 롤업해야한다는 것입니다.

+0

그냥이 기술을 "분할"이라고합니다. 꽤 오랫동안 관계형 데이터베이스에서 사용되었습니다. – Olaf

0

처리 비용의 상당 부분 - 매퍼에 키 - 값을 생성하기위한 데이터 구문 분석입니다. 우리는 값 (일반적으로) 하나의 Java 객체를 값 + 컨테이너 당 하나 생성합니다. CPU 및 가비지 컬렉터 압력 측면에서 비용이 많이 듭니다.
"중간에"솔루션을 제안합니다. 입력 스트림을 읽을 입력 형식을 작성하고 초기 단계에서 관련이없는 데이터를 건너 뛸 수 있습니다 (예 : 문자열의 첫 번째 바이트 수를 조사하는 등).
결과적으로 모든 데이터를 읽지 만 실제로는 Mapper 전용 부분으로 구문 분석하고 전달합니다.
RCFile 형식 (또는 다른 기둥 형식)을 사용하고 관련성이 있고 관련성이없는 데이터가 다른 열에 배치 될 수 있도록주의해야합니다.

0

처리 할 파일의 파일 이름에 고유 한 특성 (확장명 또는 부분 파일 이름 일치)이있는 경우 FileInputFormat의 setInputPathFilter 메서드를 사용하여 MR 작업에 필요한 파일을 제외한 모든 파일을 무시할 수 있습니다. Hadoop은 기본적으로 all "을 무시합니다.xxx "및 _xxx"files/dir이지만 setInputPathFilter를 사용하여 확장 할 수 있습니다.

다른 사람들도 위에서 언급 한 것처럼 "매퍼마다 한 블록"패러다임을 깨뜨리는 이런 식으로 클러스터에서 차선 성능을 얻을 가능성이 높지만 때때로 허용됩니다. 소량의 데이터를 다루는 경우 때때로 "더 잘 수행"할 수 있습니다. & HBase로 다시 설계하거나 다시 덤프하는 시간이 작업을 수행하는 데 필요한 추가 시간을 줄입니다. 최적으로.

관련 문제