大數據的熱潮一直居高不下,每個人都在談。你也許不知道,早些年這個領域可是有個非常「惹眼球」的段子:
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 文件,此示例不使用該文件。 添加依賴項
1、編輯 pom.xml 文件,並在<dependencies>部分中添加以下文本:
定義具有特定版本(在<version> 中列出)的庫(在<artifactId> 中列出)。編譯時會從默認 Maven 存儲庫下載這些依賴項,此外也可使用 Maven 存儲庫搜索來查看詳細信息。
<scope>provided</scope>會告知 Maven 這些依賴項不應與此應用程序一起打包,因為它們在運行時由HDInsight 集群提供。
注意:使用的版本應與集群上存在的 Hadoop 版本匹配。有關版本的詳細信息,請參閱 HDInsight 組件版本控制文檔。
2、將以下內容添加到 pom.xml 文件中。 此文本必須位於文件中的 <project>...</project>標記內;例如</dependencies>和 </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 應用,那么這些資源應該能提供一些幫助: