2014-04-01 4 views
2

mapreduce에서 간단한 단어 카운트 프로그램을 작성하려고했습니다. mapreduce 프로그램에서 파일에 출력 만 쓰고 있습니다. 하지만 출력물을 파일에 쓰는 것을 원하지 않습니다. 나는 프로그램 영역의 나머지 부분에서 사용될 정보 또는 출력 (예 : Java 컬렉션)을 수집하려고합니다.mapreduce 작업의 출력을 수집하는 방법은 무엇입니까?

예를 들어 하이브에 대한 쿼리를 제출하면 결과 집합 개체가 반환되지만 내부적으로 내 쿼리는 mapreduce 프로그램으로 변환되고 작업이 완료되면 결과 집합 개체가 반환됩니다. 다른 mapreduce 프로그램과 달리 결과를 파일 시스템에 작성하지 않습니다.

어떻게 출력을 수집 할 수 있습니까? 또는 감속기 또는 매퍼에서 내 객체를 준비하고 Java 프로그램의 다른 영역에서 해당 객체를 수집하는 방법은 무엇입니까? 나는 출력물을 파일에 쓰지 않기를 바란다.

+0

Hadoop이 아닌 Spark를 사용하려는 것처럼 들립니다. –

답변

1

Hadoop M-R 프레임 워크의 출력을 처리하는 방법은 여러 가지가 있습니다. 이정석 작업을 설명하는 사용자의 기본 인터페이스는/같은 DB로 다른 결과 수집을 설명 할 수 것입니다 당신은

getOutputFormat() 

setOutputFormat() 

방법을 (를) 찾을 수 JobConf 클래스입니다 (HBase) 저장. 기억해야 할 점은 M-R 작업이 대량의 데이터를 처리하기 때문에 분산 객체 아키텍처가 잘 발달되지 않은 경우 Java 메모리에서 객체로 관리하는 것이 번거로울 수 있다는 것입니다.

다른 당신의 실제 요구 사항을 제공 할 수 있습니다. 이 도움이

희망, 팻

0

맵리 듀스 작업은/소비 많은 양의 데이터를 생성하는 경향이있다. 또한 응용 프로그램을 독립적으로 사용하는 경향이 있으며 더 큰 워크 플로의 일부가 아닙니다. 이 두 문장은이 경우에 해당하지 않는 것으로 보입니다. 파일이 생성되지 않도록 출력 형식을 NullOutputFormat으로 설정할 수 있습니다. 그런 다음 결과를 작업 conf에 문자열로 추가하면 conf를 읽을 수있는 모든 항목에서 결과를 사용할 수 있습니다.

0

MapReduce 작업은 일반적으로 HDFS 또는 HBase에서 파일을 가져옵니다.

먼저 출력 형식을 텍스트

샘플을 설정하는 작업의 주요 방법 또는 배치, 작업 클래스의 사용 setOutputFormat()를-줄일지도 당신에

이제 HDFS 파일 시스템 내부의 디렉토리의 절대 경로를 거치게 출력은

Configuration conf = new Configuration(); 
    Job job = new Job(conf, "app"); 
    job.setJarByClass(Application.class); // batch/main method's class name 
    job.setMapperClass(Mapper.class); 
    job.setReducerClass(Reducer.class); 
    job.setOutputKeyClass(Text.class); 
    job.setOutputValueClass(Text.class); 
    job.setMapOutputKeyClass(Text.class); 
    job.setMapOutputValueClass(Text.class); 
    job.setInputFormatClass(TextInputFormat.class); 
    job.setOutputFormatClass(TextOutputFormat.class); 
    FileInputFormat.addInputPath(job, new Path(args[0])); 
    FileOutputFormat.setOutputPath(job, new Path(args[1])); 

입니다. 이제 hadoop 작업을 실행하는 동안 두 번째 매개 변수는 HDFS의 하위 디렉토리 경로 인 출력 경로입니다. 파일이 HDFS에 있기 때문에

이제 우리는 먼저 EXT3/4 파일 형식으로 HDFS에서 파일을 변환, 일반적인 유닉스 명령을 사용하여 액세스 나노/VI

DFS - 고양이 {path_to_outfile_inHDFS}

를 사용하여 읽어 질수
0

당신의 질문에 대한 나의 이해에 따르면, 당신은 HDFS 데이터를 처리하기 위해 mapreduce를 위해 Hive를 사용하고 있으며 출력을 HDFS에 저장하지 않음으로써 결국 Hive 출력으로 작업하고자합니다.

다음 명령은 표를 로컬 디렉토리에 출력합니다. INSERT OVERWRITE LOCAL DIRECTORY ''SELECT * FROM table_name; 다음 명령은 HKEY'DIR 명령을 사용하여 HDFS 또는 로컬 파일 시스템에 O/P를 쓸 수 있습니다.

다음 명령은 테이블을 HDFS 파일로 출력합니다. INSERT OVERWRITE DIRECTORY '/ tmp/hdfs_out'SELECT. * FROM table_name;

나중에이 o/p로 작업하고 싶다면 HDFS에서 다른 java MR o/p를 사용하십시오.

이 작업을 수행하려면 하이브 출력을 HDFS에 작성해야하며 두 가지 다른 o/p로 작업하려면 아래 솔루션을 사용해야합니다.

해결책 1 : JAVA 언어의지도 쪽 또는 축소 쪽 결합을 사용합니다.

[OR]

Soultion2 : Jobconfig 객체 또는 하둡 분산 캐시를 이용 측 기술에 의해 사이드.

관련 문제