2012-06-18 18 views
6

Tôi xin lỗi nếu đây là một câu hỏi ngu ngốc, nhưng tôi không thể tìm thấy câu trả lời với tìm kiếm của Google. Tôi có thể hiểu loại LongWritable như thế nào? Nó là gì? Ai có thể liên kết đến một lược đồ hoặc trang hữu ích khác.Hiểu LongWritable

+3

[This] (http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/io/LongWritable.html) và [this] (http://www.google. co.in/#hl=vi&sclient=psy-ab&q=understanding+longwritable+hadoop+example&oq=understanding+longwritable+hadoop+example&aq=f&aqi=&aql=&gs_l=serp.3...3375.6585.0.7061.18.17.1.0.0.12 .309.3777.0j4j12j1.17.0 ... 0.0.EABizvklF9A & pbx = 1 & bav = on.2, hoặc.r_gc.r_pw.r_qf., Cf.osb & fp = 1183525b389c0f4f & biw = 1366 & bih = 704) là đủ? –

+0

Ồ, cảm ơn, giúp đặt "Hadoop trong hành động". Vì vậy, đây chỉ là loại Long cho hadoop :) – Mijatovic

Trả lời

16

Hadoop cần có khả năng tuần tự hóa dữ liệu vào và ra khỏi các loại Java thông qua các đối tượng DataInputDataOutput (Dòng IO thường). Các lớp Writable thực hiện điều này bằng cách thực hiện hai phương thức `write (DataOuput) và readFields (DataInput).

Cụ thể LongWritable là lớp học Writable kết thúc tốt đẹp một java.

Hầu hết thời gian (đặc biệt là chỉ bắt đầu) bạn có thể thay thế một cách tinh thần LongWritable ->Long tức là nó chỉ là một số. Nếu bạn nhận được để xác định kiểu dữ liệu riêng của bạn, bạn sẽ bắt đầu để trở thành mỗi quen thuộc với việc thực hiện các giao diện có thể ghi:

nào trông một số điều như:

public interface Writable { 

     public void write(DataOutput out) throws IOException; 

     public void readFields(DataInput in) throws IOException; 
} 
3

Lớp Mapper là một kiểu generic, với bốn loại chính thức các tham số chỉ định khóa đầu vào, giá trị đầu vào, khóa đầu ra và các loại giá trị đầu ra của hàm bản đồ.

public class MaxTemperatureMapper 
    extends Mapper<LongWritable, Text, Text, IntWritable> { 
    @Override 
    public void map(LongWritable key, Text value, Context context) 
           throws IOException, InterruptedException { 

    } 
    @Override 
    public void reduce(Text key, Iterable<IntWritable> values, Context context) 
    throws IOException, InterruptedException 
    { 
    } 

} 

Ví dụ mã, khóa đầu vào là số nguyên dài, giá trị đầu vào là dòng văn bản. khóa đầu ra là số nguyên và giá trị đầu ra là một số nguyên. Thay vì sử dụng các kiểu Java tích hợp, Hadoop cung cấp các kiểu cơ bản của riêng nó được tối ưu hóa cho tuần tự hóa mạng. Chúng được tìm thấy trong gói org.apache.hadoop.io.

Ở đây chúng tôi sử dụng LongWritable, tương ứng với Java Long, Text (như Java String) và IntWritable (như Java Integer).

0

Từ Apache tài liệu page,

Writable được mô tả như sau:

đối tượng serializable mà thực hiện một, hiệu quả, giao thức serialization đơn giản, dựa trên DataInput và DataOutput.

LongWritable là A WritableComparable for longs.

Need for Writables:

Trong Hadoop, thông tin liên lạc interprocess được xây dựng với các cuộc gọi thủ tục từ xa (RPC). Giao thức RPC sử dụng tuần tự hóa để hiển thị thông báo thành luồng nhị phân ở người gửi và nó sẽ được deserialized vào thông điệp gốc từ luồng nhị phân tại máy thu.

Tuần tự hóa Java có nhiều nhược điểm liên quan đến hiệu suất và hiệu quả. Java serialization là chậm hơn nhiều so với việc sử dụng trong các cửa hàng bộ nhớ và có xu hướng mở rộng đáng kể kích thước của đối tượng. Java Serialization cũng tạo ra rất nhiều rác.

Tham khảo hai bài viết này:

dzone bài viết

https://softwareengineering.stackexchange.com/questions/191269/java-serialization-advantages-and-disadvantages-use-or-avoid

Đối với hiệu quả của Hadoop, quá trình tuần tự/de-serialization nên được tối ưu hóa bởi vì số lượng lớn các cuộc gọi từ xa xảy ra giữa các nút trong cụm. So the serialization format should be fast, compact, extensible and interoperable. Vì lý do này, khung công tác Hadoop đã đưa ra các lớp IO riêng để thay thế các kiểu dữ liệu nguyên thủy của java. ví dụ. IntWritbale cho int, LongWritable cho long, Text cho String, vv

Bạn có thể biết thêm chi tiết nếu bạn tham khảo "Hadoop hướng dẫn dứt khoát" phiên bản thứ tư.