天天看點

《Hive程式設計指南》一1.3 Java和Hive:詞頻統計算法

本節書摘來異步社群《hive程式設計指南》一書中的第1章,第1.3節,作者: 【美】edward capriolo , dean wampler , jason rutherglen 譯者: 曹坤,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

如果使用者不是java工程師,那麼可以直接跳到下一節。

如果使用者是名java工程師,那麼可能需要閱讀本節,因為使用者需要為其所在組織的hive使用者提供技術支援。你可能會質疑如何使用hive解決自己的工作。如果是這樣的話,那麼可以先看看下面這個實作了之前我們所讨論的word count算法的例子,我們先學會使用java mapreduce api,然後再學習如何使用hive。

通常都會使用word count作為使用者學習使用java編寫mapreduce程式的例子,因為這樣使用者可以關注于api。是以,word count已經成為hadoop世界中的“hello world”程式了。

apache hadoop 分支版本中包含有下面的這個java實作[8]。如果讀者并不了解java(但是你仍在讀本節内容的話),也不必擔心,我們提供這個代碼隻是為了友善使用者進行大小對比。

上面是一個有63行的java代碼。我們不會詳細解釋其中的api[9]。如下是使用hiveql進行的相同的運算,這時隻有8行代碼,而且不需要進行編譯然後生成一個“jar”(java壓縮包)檔案。

我們稍後會解釋所有這些hiveql文法。

在上面兩個例子中,都是使用盡可能簡單的方法将檔案中的内容分割成單詞,也就是按照空格進行劃分的。這個方法不能很好地處理标點,同時也不能識别同一個單詞的單數和複數形式,等等。不過,這裡這麼使用已經可以達到我們的目的了。[10]

借助java api可以定制和調整一個算法實作的每個細節。不過,大多數情況下,使用者都不需要這個級别的控制,而且當使用者需要控制所有那些細節時也會相當地放慢使用者的開發進度。

如果你不是一名程式員,那麼也就用不着寫java mapreduce代碼了。不過,如果你已經熟悉sql了,那麼學習hive将會相當地容易,而且很多程式也都很容易快速實作。