簡體   English   中英

為什么我們不能在Map Reduce中使用Java原始數據類型?

[英]Why can't we use Java primitive data types in Map Reduce?

我正在學習Hadoop MapReduce框架。 我很難找到為什么我們不能在Map Reduce中使用Java原始數據類型。

在Hadoop中,進程間通信是使用遠程過程調用(RPC)構建的。 RPC協議使用序列化將消息呈現為發送方的二進制流,並將其從接收方的二進制流反序列化為原始消息。

為了Hadoop的有效性,應優化序列化/反序列化過程,因為群集中的節點之間會發生大量遠程調用。 因此序列化格式應該fast, compact, extensible and interoperable 由於這個原因,Hadoop框架提出了一個IO類來替換java原始數據類型。 例如IntWritbale for int, LongWritable for long, Text for String etc.

有關更多詳細信息,請參閱Hadoop權威指南第4版。

從Apache 網站Writable的目的引用為:

一個可序列化的對象,它基於DataInput和DataOutput實現簡單,高效的序列化協議。

Java序列化要求在序列化格式的對象的每個實例之前為類的哈希添加前綴。 因此,要讀取對象,您不需要指定類名。 這會導致讀取對象的開銷,因為每個對象都可以是不同類的實例。

在Hadoop Serialization中,我們在檢索時指定類名。 因此,不需要前綴,因為我們已經知道我們正在檢索什么。 因此我們設置了InputFormat。 這在RPC期間提高了各方面的速度和性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM