[Hadoop + Maven] 使用 Maven 快速生成 MapReduce 項目

任務背景

  我們都知道, Apache Hadoop 需要使用許多依賴項,我們當然不希望花費大量的時間在項目配置上,最好的方式是能夠開箱即用、快速編碼生成 Apache Hadoop MapReduce 項目。如果能夠有一個快速生成 Apache Hadoop MapReduce 項目的原型,豈不是非常方便?

注意事項

  本原型適用於以下開發環境:

  • Java Development Kit 8 ,其中 OpenJDKOracle JDK 都是可兼容的。
  • Apache Hadoop v2.7.1 ,暫不清楚其他版本的適用情況。

使用指導

安裝原型

  1. 安裝 Apache Maven
  2. 前往 GitHub Packages 下載 *.pom*.jar在這裏插入圖片描述
  3. 將下載得到的 *.jar*.pom 放置於 $LOCAL_REPO/io/github/dragon1573/hadoop-quickstart-archetype/1.0-mapr271-jdk8/ 目錄下。其中, $LOCAL_REPO 目錄爲 Apache Maven 本地倉庫地址,安裝後默認爲 ~/.m2/repository
    在這裏插入圖片描述
  4. 修改 $LOCAL_REPO/archetype-catalog.xml ,將下載獲得的 Maven Archetype 嚴格按如下格式添加到目錄中。
<?xml version="1.0" encoding="UTF-8" ?>
<archetype-catalog xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0 http://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd" xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <archetypes>
    <!-- 添加以下內容 -->
    <archetype>
      <groupId>io.github.dragon1573</groupId>
      <artifactId>hadoop-quickstart-archetype</artifactId>
      <version>1.0-mapr271-jdk8</version>
      <description>Immediately generate an Apache Hadoop MapReduce Job</description>
      <repository>https://maven.pkg.github.com/Dragon1573/Maven-Hadoop</repository>
    </archetype>
    <!-- 添加以上內容 -->
  </archetypes>
</archetype-catalog>

使用原型

  1. 在任意目錄下輸入如下命令,嘗試使用原型創建項目(示例):
$ mvn -DarchetypeCatalog=local archetype:generate
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.1.2:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.1.2:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.1.2:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: local -> io.github.dragon1573:hadoop-quickstart-archetype (Immediately generate an Apache Hadoop MapReduce Job)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : 1
Define value for property 'groupId': com.example
Define value for property 'artifactId': hadoop-quickstart
Define value for property 'version' 1.0-SNAPSHOT: : 1.0
Define value for property 'package' com.example: : main
Confirm properties configuration:
groupId: com.example
artifactId: hadoop-quickstart
version: 1.0
package: main
 Y: : Y
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: hadoop-quickstart-archetype:1.0-mapr271-jdk8
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.example
[INFO] Parameter: artifactId, Value: hadoop-quickstart
[INFO] Parameter: version, Value: 1.0
[INFO] Parameter: package, Value: main
[INFO] Parameter: packageInPathFormat, Value: main
[INFO] Parameter: package, Value: main
[INFO] Parameter: groupId, Value: com.example
[INFO] Parameter: artifactId, Value: hadoop-quickstart
[INFO] Parameter: version, Value: 1.0
[WARNING] Don't override file D:\Program_Files_(x64)\Git\Repos\hadoop-quickstart\.idea\codeStyles\codeStyleConfig.xml
[WARNING] Don't override file D:\Program_Files_(x64)\Git\Repos\hadoop-quickstart\.idea\codeStyles\Project.xml
[WARNING] Don't override file D:\Program_Files_(x64)\Git\Repos\hadoop-quickstart\.idea\inspectionProfiles\Project_Default.xml
[WARNING] Don't override file D:\Program_Files_(x64)\Git\Repos\hadoop-quickstart\.idea\copyright\Apache_v2_0.xml
[INFO] Project created from Archetype in dir: D:\Program_Files_(x64)\Git\Repos\hadoop-quickstart
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  35.209 s
[INFO] Finished at: 2020-03-28T15:26:57+08:00
[INFO] ------------------------------------------------------------------------
  1. 檢查通過原型創建的項目目錄結構,如果您能夠正常生成具有以下目錄結構的項目,則表示原型安裝沒有任何問題,您可以正常地使用原型了。
$ cd hadoop-quickstart/

legen@Legend1949 MINGW64 /Repos/hadoop-quickstart
$ tree
.
├── LICENSE
├── README.md
├── pom.xml
└── src
    └── main
        ├── java
        │   ├── main
        │   │   └── DailyAccessCount.java
        │   └── mapreduce
        │       ├── MyMapper.java
        │       └── MyReducer.java
        └── resources
            └── user_login.txt

6 directories, 7 files

關於原型

  原型提供了一個簡單的 Apache Hadoop MapReduce 項目——編程實現按日期統計訪問次數,以下項目的任務描述:

  • 本項目的設計目標是統計用戶在2016年度每個自然日的總訪問次數。
  • 原始文件 src/main/resources/user_login.txt 中提供了用戶名稱與訪問日期。
  • 本項目任務的是指是要獲取以每個自然日爲單位的所有用戶訪問次數的累加值。
  1. 在項目配置文件 pom.xml 的同級目錄下,使用如下命令將項目打包生成 *.jar 程序包(示例)。
$ mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< com.example:hadoop-quickstart >--------------------
[INFO] Building hadoop-quickstart 1.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hadoop-quickstart ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ hadoop-quickstart ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 3 source files to D:\Program_Files_(x64)\Git\Repos\hadoop-quickstart\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ hadoop-quickstart ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\Program_Files_(x64)\Git\Repos\hadoop-quickstart\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ hadoop-quickstart ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ hadoop-quickstart ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ hadoop-quickstart ---
[INFO] Building jar: D:\Program_Files_(x64)\Git\Repos\hadoop-quickstart\target\hadoop-quickstart-1.0.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  6.744 s
[INFO] Finished at: 2020-03-28T15:44:42+08:00
[INFO] ------------------------------------------------------------------------
  1. 將項目提供的 src/main/resources/user_login.txt 上傳至 Apache Hadoop HDFS 分佈式文件系統,文件所在目錄記爲 $INPUT_DIR
  2. 使用命令 hadoop jar target/hadoop-quickstart-1.0.jar main.DailyAccessCount $INPUT_DIR $OUTPUT_DIRMapReduce 任務程序包提交至 Apache Hadoop 集羣運行。其中, $OUTPUT_DIRMapReduce 任務完成後輸出結果的 Apache Hadoop HDFS 分佈式文件系統目錄。
  3. 使用命令 hdfs dfs -cat "$OUTPUT_DIR/* | head -n 15" 查看前15項排序結果。

後記

  如果您在使用本原型的過程中遇到任何問題,歡迎在評論區或 Issues · Dragon1573/Maven-Hadoop 進行反饋,我會盡能力修復。
  感謝你們下載、安裝並使用本原型!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章