使用Maven构建Hadoop工程并实现词频统计案例(详细篇)

简介: 使用Maven构建Hadoop工程并实现词频统计案例(详细篇)

使用Maven构建Hadoop工程并实现词频统计案例(详细篇)


3ba048ffa5674f2bac0dd22e93a6290d.jpeg



一、实验环境:


  • Hadoop3.1.3
  • IDEA
  • CentOS7.5
  • Maven3.6.3
  • 伪分布式


二、使用Maven构建Hadoop工程


1.解压Maven到自己的安装目录


tar -zxvf ./apache-maven-3.6.3-bin.tar.gz -C /opt/module/


2.配置Maven环境变量


vim /etc/profile.d/my_env.sh
# JDK_HOMEexportJAVA_HOME=/opt/module/jdk1.8.0_212
exportCLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
exportPATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOMEexportHADOOP_HOME=/opt/module/hadoop-3.1.3
exportPATH=$PATH:$HADOOP_HOME/bin
exportPATH=$PATH:$HADOOP_HOME/sbin
# Set Maven EnvironmentexportMAVEN_HOME=/opt/module/maven-3.6.3
exportPATH=$PATH:$MAVEN_HOME/bin

3.查看maven版本信息


mvn -version


4.使用IDEA创建一个空项目(提前在IDEA中配置Maven)


如图:(借用尚硅谷的图)


1.png


5.Maven安装目录和仓库地址的设置

2.png


# 先进入到maven的安装目录# 修改 settings.xml(核心配置文件)vim ./conf/settings.xml


# 本地仓库地址更改到/home/zhangsan/LocalRepository,默认在xxx\.m2\repository<localRepository>/home/zhangsan/LocalRepository</localRepository>


# 配置阿里云镜像(下载速度快)<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>


  • Maven home directory:可以指定本地 Maven 的安装目录所在。这里不建议使用IDEA默认的。


  • User settings file / Local repository:我们还可以指定 Maven 的 settings.xml 位置和本地仓库位置。


三、词频统计案例


配置文件:


<?xmlversion="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zhangsan</groupId><artifactId>MapReduce</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.1.3</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.2</version><scope>test</scope></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>2.12.0</version></dependency></dependencies></project>


WordCount案例代码:


Mapper类

3.png


Reducer类


4.png


Driver类

5.png


执行Jar包之前要先在HDFS上创建一个文本文件作为词频统计的输入文件


hdfs dfs -mkdir /wcinput


/

6.png


并创建一个文本文件:word.txt(内容如下)


hello java

hello hadoop

hello mapreduce


7.png


在Hadoop安装目录下执行Jar包(MR的Jar放置在hadoop安装目录下)


hadoop jar ./MapReduce-1.0-SNAPSHOT.jar WordCountDirver /wcinput /wcoutput


执行Jar包的成功运行结果:


8.png


Web端可以查看到成功运行:

9.png


命令行查看/wcoutput的词频统计结果


10.png


四、报错解决


1.Hadoop:找不到或无法加载主类org.apache.hadoop.mapreduce.v2.app.MRAppMaster

11.png


解决方案:


# 输入命令 hadoop classpath


<!--先输出的结果复制到yarn-site.xml--><property><name>yarn.application.classpath</name><value>/opt/module/hadoop-3.1.3/etc/hadoop:/opt/module/hadoop-3.1.3/share/hadoop/common/lib/*:/opt/module/hadoop-3.1.3/share/hadoop/common/*:/opt/module/hadoop-3.1.3/share/hadoop/hdfs:/opt/module/hadoop-3.1.3/share/hadoop/hdfs/lib/*:/opt/module/hadoop-3.1.3/share/hadoop/hdfs/*:/opt/module/hadoop-3.1.3/share/hadoop/mapreduce/lib/*:/opt/module/hadoop-3.1.3/share/hadoop/mapreduce/*:/opt/module/hadoop-3.1.3/share/hadoop/yarn:/opt/module/hadoop-3.1.3/share/hadoop/yarn/lib/*:/opt/module/hadoop-3.1.3/share/hadoop/yarn/*
</value></property>



2.INFO ipc.Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8032. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)

12.png


原因 是:本人机器采用 伪分布式 ,且 选择启动Yarn为MapReduce作业进行资源管理和任务调度 ,然后机器有没有启动Yarn,从而出错。


解决方案

start-yarn.sh


Yarn对于分布式模式(真正由多台机器构成的集群环境)才有意义,在伪分布式环境下,Yarn其实是无法真正发挥作用的,因此,在伪分布式环境下不需要借助于Yarn为MapReduce作业进行资源管理和任务调度,而是可以直接借助于Hadoop自身内置的 mapred.LocalJobRunner 来为mapReduce作业进行资源管理和任务调度。也就是说,不启动Yarn照样可以运行MapReduce程序。


选择启动Yarn为MapReduce作业进行资源管理和任务调度的设置方式可以参考这一篇文章 


解决方案

start-yarn.sh


Yarn对于分布式模式(真正由多台机器构成的集群环境)才有意义,在伪分布式环境下,Yarn其实是无法真正发挥作用的,因此,在伪分布式环境下不需要借助于Yarn为MapReduce作业进行资源管理和任务调度,而是可以直接借助于Hadoop自身内置的 `mapred.LocalJobRunner`来为mapReduce作业进行资源管理和任务调度。也就是说,不启动Yarn照样可以运行MapReduce程序。


目录
相关文章
|
7天前
|
Java Maven
Maven 自动化构建
Maven自动化构建确保依赖稳定性:当`bus-core-api`(1.0-SNAPSHOT)构建后,自动触发`app-web-ui`和`app-desktop-ui`(均依赖1.0版本)的构建,保证依赖更新时项目协同。
|
8天前
|
Java Maven
Maven 构建 Java 项目
使用 Maven 的 archetype:generate 命令创建 Java 项目,如 `mvn archetype:generate` -DgroupId=com.companyname.bank -DartifactId=consumerBanking -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false,在 C:\MVN 下生成基于 maven 的 consumerBanking 项目。
|
1天前
|
Java 测试技术 Maven
Maven 构建生命周期
Maven构建生命周期包括验证、编译、测试、打包、检查、安装和部署等阶段,用于项目构建与发布。它有三个标准生命周期:Clean(清除目标目录)、Default(验证、编译、测试、打包、验证质量、安装和部署)和Site(生成项目文档和站点)。这些阶段按顺序执行,确保项目从干净状态开始,经过编译测试,最终部署到远程仓库供共享。
|
1天前
|
Java API Maven
Maven 自动化构建
Maven自动化构建确保依赖稳定性。当`bus-core-api`(1.0-SNAPSHOT)构建后,它自动触发`app-web-ui`和`app-desktop-ui`的构建,这两个项目分别依赖此API的相同版本。这样保证了依赖项的更新同步。
|
3天前
|
Java 测试技术 Maven
Maven 构建生命周期
Maven的构建生命周期包括验证、编译、测试、打包、检查、安装和部署等阶段,确保项目正确、可分发和质量达标。标准生命周期有Clean(清除目标文件)、Default(验证、编译、测试、打包、验证质量、安装到本地仓库、部署到远程仓库)和Site(生成项目文档和站点)。
|
4天前
|
Java Maven
Maven 自动化构建
Maven自动化构建确保依赖稳定性:当`bus-core-api`构建完成后,依赖它的`app-web-ui`和`app-desktop-ui`项目自动构建。`app-web-ui`与`app-desktop-ui`都引用`bus-core-api`的1.0-SNAPSHOT版本。
|
5天前
|
XML Java 测试技术
Maven 构建配置文件
Maven构建配置文件用于定制不同环境下的构建方式,如pom.xml中的activeProfiles或profiles元素。配置文件分为项目级、用户级和全局级,通过命令行、Maven设置、环境变量或文件存在与否激活。示例中,env.properties是默认配置,env.test.properties和env.prod.properties用于测试和生产环境。这些文件并非构建配置文件,而是测试用例。例子使用AntRun插件展示配置文件的运用。
|
6天前
|
Java 测试技术 Maven
Maven 构建生命周期
Maven构建生命周期包括验证、编译、测试、打包、检查、安装和部署等阶段,用于项目构建与发布。它有三个标准生命周期:Clean(清除目标目录)、Default(验证、编译、测试、打包、验证质量、安装和部署)和Site(生成项目文档和站点)。这些阶段按顺序执行,确保项目从构建到部署的完整流程。
|
7天前
|
XML Java 测试技术
Maven 构建 & 项目测试
本节介绍了如何使用Maven进行Java应用的构建和测试。在`C:\MVN\consumerBanking`项目中,`pom.xml`配置了JUnit测试框架。执行`mvn clean package`命令,Maven会清理目标目录、编译源码和测试代码,运行测试,并生成`consumerBanking-1.0-SNAPSHOT.jar`。测试报告位于`surefire-reports`目录。
|
9天前
|
XML Java Maven
Maven 构建配置文件
Maven构建配置文件用于定制不同环境下的构建方式,如pom.xml中的activeProfiles或profiles元素。配置文件分为项目级、用户级和全局级,影响如数据库服务器地址等参数。激活配置文件可通过命令行、Maven设置、环境变量、操作系统设置或文件存在与否。示例中,env.properties、env.test.properties和env.prod.properties用于模拟测试,AntRun插件展示配置应用。

相关实验场景

更多