同樣的Java,完全不一樣的HDInsight大數據開發體驗

大數據的熱潮一直居高不下,每個人都在談。你也許不知道,早些年這個領域可是有個非常「惹眼球」的段子:


簡單翻譯一下:大數據就像青少年之間的【敏感詞】:每個人都在談,可沒人真正知道該怎麼做,但每個人都認為其他人正在做,所以所有人都說自己也正在做……反正前美國麻省理工大學(MIT)教授,現美國杜克大學(Duke University)教授 Dan Ariely 是這麼說的

那麼,具體該怎麼做呢?今天,我要教教大家如何運用 Java 語言,為 HDInsight 上的 Hadoop 開發一個 MapReduce 程序,藉此玩轉大數據。


1首先開始科普

什麼是 HDInsight

Azure HDInsight 是 Hortonworks Data Platform (HDP) 提供的 Hadoop 組件的雲發行版,適用於對計算機集群上的大數據集進行分佈式處理和分析。目前 HDInsight 可提供以下集群類型:Apache Hadoop、Apache Spark、Apache HBase、Apache Storm、Apache 交互式 Hive(預覽版),以及其他包含腳本操作的自定義集群。

什麼是 Hadoop

Hadoop 技術堆棧包括相關的軟件和實用程序(Apache Hive、HBase、Spark 等),通常包含 Hadoop 分佈式文件系統 (HDFS)、適用於作業計劃和資源管理的 YARN、適用於並行處理的 MapReduce。Hadoop 最常用於已存儲數據的批處理。


什麼是 MapReduce

MapReduce 是一箇舊軟件框架,用於編寫並行批量處理大數據集的應用程序。MapReduce 作業將分割大型數據集,並將數據組織成鍵值對進行處理。MapReduce作業在 YARN 上運行。

什麼是 Java

這個真有必要解釋?

通過 Azure HDInsight 服務使用 Hadoop,可以獲得很多便利,例如:減少了設置和配置工作,提高了可用性和可靠性,可在不中斷作業的情況下進行動態縮放,可靈活使用組件更新和當前版本,並且能與其他 Azure 服務(包括 Web 應用和 SQL 數據庫)集成。

機智的你理解這些概念了麼,接下來我們一起來用 Java 開發一個 MapReduce 程序,然後通過 HDInsight 服務運行吧。


2前期準備

首先你需要準備好 Java JDK 8 或更高版本以及 Apache Maven,隨後按照下列方式配置開發環境:

1

設置環境變量

請在安裝 Java 和 JDK 時設置以下環境變量(同時請注意檢查這些環境變量是否已經存在並且包含正確的值):

JAVA_HOME -應該指向已安裝 Java 運行時環境 (JRE)的目錄。例如在macOS、Unix 或 Linux 系統上,值應該類似於 /usr/lib/jvm/java-7-oracle;在Windows 中,值類似於 c:\\ProgramFiles (x86)\\Java\\jre1.7。PATH - 應該包含以下路徑:

JAVA_HOME(或等效路徑)

JAVA_HOME\\bin(或等效路徑)

安裝 Maven 的目錄

2

創建 Maven 項目


1、在開發環境中,通過中斷會話或命令行將目錄更改為要存儲此項目的位置。

2、使用隨同 Maven 一起安裝的 mvn 命令,為項目生成基架。

此命令將使用 artifactID 參數指定的名稱(此示例中為 wordcountjava)創建目錄。此目錄包含以下項:

pom.xml - 項目對象模型 (POM),其中包含用於生成項目的信息和配置詳細信息。

src - 包含應用程序的目錄。

3、刪除 src/test/java/org/apache/hadoop/examples/apptest.java 文件,此示例不使用該文件。


3

添加依賴項

1、編輯 pom.xml 文件,並在<dependencies>部分中添加以下文本:/<dependencies>

這會定義具有特定版本(在<version> 中列出)的庫(在<artifactid> 中列出)。編譯時會從默認 Maven 存儲庫下載這些依賴項,此外也可使用 Maven 存儲庫搜索來查看詳細信息。/<artifactid>/<version>

<scope>provided/<scope>會告知 Maven 這些依賴項不應與此應用程序一起打包,因為它們在運行時由 HDInsight 集群提供。


注意:使用的版本應與集群上存在的 Hadoop 版本匹配。有關版本的詳細信息,請參閱 HDInsight 組件版本控制文檔。

2、將以下內容添加到 pom.xml 文件中。 此文本必須位於文件中的 <project>.../<project>標記內;例如 和 之間。

第一個插件配置 Maven Shade Plugin,用於生成 uberjar(有時稱為 fatjar),其中包含應用程序所需的依賴項。 它還可以防止在 jar 包中複製許可證,複製許可證在某些系統中可能會導致問題。

第二個插件配置目標 Java 版本。


注意:HDInsight 3.4 及更早版本使用 Java 7,HDInsight3.5 使用 Java 8。


3、保存 pom.xml 文件。



3創建 MapReduce 應用程序

1、轉到 wordcountjava/src/main/java/org/apache/hadoop/examples 目錄,並將App.java 文件重命名為 WordCount.java。

2、在文本編輯器中打開 WordCount.java 文件,然後將其內容替換為以下文本:

請注意,包名稱為 org.apache.hadoop.examples,類名稱為 WordCount。提交MapReduce 作業時需要使用這些名稱。

3、保存文件。


4構建應用程序

1、如果尚未到達此目錄,請更改為 wordcountjava 目錄。

2、使用以下命令生成包含該應用程序的 JAR 文件:


此命令將清除任何以前構建的項目,下載任何尚未安裝的依賴項,然後生成並打包應用程序。

3、命令完成後,wordcountjava/target 目錄將包含一個名為 wordcountjava-1.0-SNAPSHOT.jar 的文件。

注意:wordcountjava-1.0-SNAPSHOT.jar 文件是一種 uberjar,其中不僅包含 WordCount 作業,還包含作業在運行時需要的依賴項。


5上傳 jar 運行 MapReduce 作業

使用以下命令將該jar 文件上傳到 HDInsight 頭節點:

USERNAME 替換為集群的 SSH 用戶名,將 CLUSTERNAME 替換為 HDInsight 集群名稱。

此命令會將文件從本地系統複製到頭節點。

隨後通過下列步驟運行這個 MapReduce 作業:

1、使用 SSH 連接到 HDInsight。詳細信息請參閱將 SSH 與 HDInsight 配合使用。

2、在 SSH 會話中,使用以下命令運行 MapReduce 應用程序:

此命令將啟動 WordCountMapReduce 應用程序。輸入文件是/example/data/gutenberg/davinci.txt,輸出目錄是 /example/data/wordcountout。輸入文件和輸出均存儲到集群的默認存儲中。

3、作業完成後,請使用以下命令查看結果:

用戶會收到單詞和計數列表,其包含的值類似於以下文本:

搞定收工!

我有一條不成熟的小建議

你看,使用 Java語言開發 MapReduce 程序也不是很難。

如果你更喜歡用其他語言,或者希望開發其他類型的 HDInsight 應用,那麼這些資源應該能提供一些幫助:

開發 C# 流式處理 MapReduce 程序開發 Scalding MapReduce 作業使用 HDInsight 工具創建 Spark 應用開發 Python 流式處理程序

最後的最後,這篇教程大家看著可還滿意?想看其他任務的教程,或者想要學習瞭解某項 Azure 服務的話,你知道該怎麼辦的!

最後說一下,想要學習大數據的限時領取免費資料及課程

領取方法:

還是那個萬年不變的老規矩

1.評論文章,沒字數限制,一個字都行!

3.私信小編:“大數據開發教程”即可!

謝謝大家,祝大家學習愉快!(拿到教程後一定要好好學習,多練習哦!)