2011-01-03 3 views
1

텍스트 파일을 다른 텍스트 파일로 변환해야한다면 mapper/reducer를 어떻게 설계해야합니까? 첫 번째 행에 쉼표가 -map/reduce에서 ETL을 수행하는 방법

  • 파일은 일반적으로 다음과 같이 구성되어 있습니다 : 아래의 세부 사항은

    나는 간단한지도/작은 변화를 한 프로그램을 감소 쓴하지만 요구 사항은 좀 더 정교 열 이름의 분리 된 목록. 초 및 나머지 행은 열에 대해 값을 지정합니다.
  • 일부 행에서는 후행 열 값이 누락 될 수 있습니다. 예 : 15 열이 있으면 처음 10 열만 값이 지정 될 수 있습니다.
  • 변환하고 하나의 파일로 집계해야하는 약 5 개의 입력 파일이 있습니다. 변환은 5 개의 입력 파일마다 고유합니다.
  • mapper/reducer 프로그램에 파일 이름과 같은 문맥 정보를 어떻게 전달합니까?
  • 변환은 열에 한정되므로 첫 번째 행에서 언급 한 열을 기억한 다음 행에서 값을 상호 연관시키고 변환하는 방법은 무엇입니까?
+2

관련 답변을 얻으려면 자세한 내용을 제공해야합니다. 텍스트 파일을 다른 텍스트 파일로 변환하면 거의 대부분의 맵이 그곳에서 축소됩니다. –

답변

3

파일을 줄로 나누고 각 줄을 병렬로 변환 (매핑)하여 결과 줄을 하나의 파일로 결합 (축소)합니까?

+0

간단한 변환을 수행 한 프로그램을 줄였습니다. 그러나 아래에 나와있는 문제가 있습니다. 파일은 일반적으로 다음과 같이 구조화되어 있습니다. - 첫 번째 행에는 쉼표로 구분 된 열 이름 목록이 들어 있습니다. 두 번째 및 나머지 행은 열에 대해 값을 지정합니다. 일부 행에서는 후행 열 값이 누락 될 수 있습니다. 예 : 15 열이 있으면 처음 10 열만 값이 지정 될 수 있습니다. – sandeepkunkunuru

+0

변환하고 하나의 파일로 집계해야하는 약 5 개의 입력 파일이 있습니다. 변환은 입력 파일에만 적용됩니다. mapper/reducer 프로그램에 파일 이름 같은 문맥 정보를 어떻게 전달합니까? 변환은 열에 한정되므로 첫 행에 언급 된 열을 기억한 다음 행의 값을 상호 연관시키고 변환하는 방법은 무엇입니까? – sandeepkunkunuru

1

첫 번째 행의 열 정보에 의존 할 수 없습니다. 파일이 HDFS 블록보다 큰 경우 파일은 여러 개의 분할로 나뉘며 각 분할은 다른 매퍼로 전달됩니다. 이 경우 첫 번째 분할을 수신하는 매퍼 만 열 정보가 포함 된 첫 번째 행을 수신하고 나머지는 그렇지 않습니다.

파일 별 메타 데이터를 별도의 파일로 전달하고 보조 데이터로 배포하는 것이 좋습니다. 매퍼 또는 감속기 작업에서 메타 데이터 파일을 읽을 수 있습니다.

Hadoop Context 객체를 통해 매퍼가 처리중인 파일의 이름을 확보 할 수 있습니다. 이 모든 것들 사이에서 당신이 말하는 모든 컨텍스트 정보를 가지고 있다고 생각합니다. 그리고 당신은 파일에 특정한 변환을 할 수 있습니다. 변환 논리가 파일마다 다르더라도 매퍼 출력은 동일한 형식을 가져야합니다.

감속기를 사용하는 경우 감속기의 수를 1로 설정하여 모든 출력을 하나의 파일에 집계하도록 할 수 있습니다.

관련 문제