2016-05-14 22 views
5

Trong tệp đầu vào của tôi khi tạo Jar cho Công việc MapReduce của tôi, tôi đang sử dụng lệnh Hadoop-local. Tôi muốn biết có cách nào hay không, thay vì chỉ định cụ thể đường dẫn cho từng tệp trong thư mục nhập của tôi được sử dụng trong công việc MapReduce, cho dù tôi chỉ có thể chỉ định và chuyển tất cả các tệp từ thư mục nhập của tôi. Điều này là do nội dung và số lượng tệp có thể thay đổi do bản chất của công việc MapReduce mà tôi đang cố định cấu hình và vì tôi không biết số lượng tệp cụ thể, ngoài nội dung của các tệp này, có cách chuyển tất cả các tệp từ thư mục nhập vào chương trình MapReduce của tôi và sau đó lặp qua từng tệp để tính toán một hàm nhất định mà sau đó sẽ gửi kết quả đến Reducer. Tôi chỉ sử dụng một chương trình Map/Reduce và tôi đang viết mã bằng Java. Tôi có thể sử dụng lệnh hadoop-moonshot, nhưng hiện tại tôi đang làm việc với hadoop-local.Hadoop, MapReduce - Nhiều Đường dẫn Đầu vào/Đầu ra

Cảm ơn.

+0

Nếu bạn chỉ định một thư mục HDFS trong công việc của bạn thay vì một tập tin, sau đó tất cả các tập tin cần được đọc. Bạn có thể vui lòng [sửa] câu hỏi của bạn để bao gồm lệnh bạn đang chạy không? Có lẽ một số mã trong một [mcve], cũng? –

+0

Cảm ơn @ cricket_007 bạn có thể cung cấp ví dụ về cuộc gọi tới thư mục HDFS thay vì chỉ một tệp đơn. Ngoài ra, làm thế nào tôi sẽ có một tập tin đầu ra riêng biệt cho mỗi đầu vào. Tôi đoán nó bằng cách sử dụng lớp MultipleOutput bằng cách nào đó, nhưng tôi không thể thấy như thế nào vào lúc này. –

+0

Tôi không thể nhớ làm thế nào để xuất nhiều tệp, nhưng bản thân kết quả mapreduce phải là một thư mục. Đối với mục nhập thư mục, [ví dụ về số từ] (https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html#Usage) đọc hai tệp từ một thư mục –

Trả lời

1

Bạn không phải chuyển từng tệp riêng lẻ làm đầu vào cho MapReduce Công việc.

FileInputFormat lớp đã cung cấp API để chấp nhận danh sách nhiều tệp như Nhập vào bản đồ Giảm chương trình.

public static void setInputPaths(Job job, 
       Path... inputPaths) 
          throws IOException 

Thêm một con đường vào danh sách các nguyên liệu đầu vào cho công việc đồ-giảm. Tham số:

conf - Cấu hình của công việc

con đường - con đường được thêm vào danh sách các nguyên liệu đầu vào cho công việc đồ-giảm.

Ví dụ mã từ Apache tutorial

Job job = Job.getInstance(conf, "word count"); 
FileInputFormat.addInputPath(job, new Path(args[0])); 

MultipleInputs cung cấp dưới đây API.

public static void addInputPath(Job job, 
       Path path, 
       Class<? extends InputFormat> inputFormatClass, 
       Class<? extends Mapper> mapperClass) 

Thêm một con đường với một InputFormat tùy chỉnh và Mapper vào danh sách các nguyên liệu đầu vào cho công việc đồ-giảm.

liên quan SE câu hỏi:

Can hadoop take input from multiple directories and files

Tham khảo MultipleOutputs API liên quan đến truy vấn thứ hai của bạn trên nhiều đường dẫn đầu ra.

FileOutputFormat.setOutputPath(job, outDir); 

// Defines additional single text based output 'text' for the job 
MultipleOutputs.addNamedOutput(job, "text", TextOutputFormat.class, 
LongWritable.class, Text.class); 

// Defines additional sequence-file based output 'sequence' for the job 
MultipleOutputs.addNamedOutput(job, "seq", 
SequenceFileOutputFormat.class, 
LongWritable.class, Text.class); 

Hãy xem các câu hỏi SE liên quan đến nhiều tệp đầu ra.

Writing to multiple folders in hadoop?

hadoop method to send output to multiple directories

+0

Mã ví dụ bạn kéo chỉ sử dụng một đường dẫn nhập –

+0

Ngoại trừ trong tiêu đề của câu hỏi cho biết cả Đầu vào/Đầu ra, OP đang tìm kiếm nhiều tệp dưới dạng Nhập trong phần thân câu hỏi. Không đề cập đến đầu ra. Sau đó tôi đã thêm API setOutputPath. –

+0

Tiêu đề và câu hỏi không thực sự phù hợp. Tất cả những gì được hỏi là đọc một thư mục các tập tin. Mà, có, mã này có thể làm. Tôi đã chỉ đơn giản nói rằng bạn đề cập đến nhiều con đường, nhưng mã ví dụ không sử dụng phương pháp đó –

Các vấn đề liên quan