eclipse中添加jar包后运行时提示noclassdeffounderror_老师,IDEA如何在本地运行和调试Hadoop程序?...

作者:Tong ZHAN来源:https://www.polarxiong.com/

前言

Hadoop可以运行在三种模式下:

  1. 单机模式
  2. 伪分布模式
  3. 完全分布式模式

相信初学者入门Hadoop的第一堂课就是伪分布模式Hadoop系统的安装,相信一定是血泪史各种翻教程各种重装。而实际上,基于Hadoop的MapReduce程序在单机上运行,并不一定需要安装伪分布模式Hadoop系统,甚至,并不一定需要安装Hadoop。

运行和调试MapReduce程序只需要有相应的Hadoop依赖包就行,可以完全当成一个普通的JAVA程序。本文就将介绍这种简单方便的方法。

简介

正如上文所说,在单机模式下,可以将MapReduce程序当成一个普通的JAVA程序;对比伪分布模式,其主要不足就在于没有Hadoop的整个管理控制系统,如JobTracker面板,而只是用来运行和调试程序;而其优点就在于开发调试方便,编写的程序通常不需要修改即可在真实的分布式Hadoop集群下运行

Maven

Maven是一个项目管理工具,我们这里主要用到的是它的依赖管理系统。通常我们在开发Hadoop MapReduce程序时,首先要下载对应版本的镜像,然后加载镜像中的JAR依赖包,开始编写代码。这个步骤说起来容易但经常会碰到错综复杂的依赖关系,而利用Maven就能轻松解决这个问题。只需要在Maven配置文件中指定Hadoop依赖包名字和版本号,Maven就能自动搞定这些依赖,你只需要专心写代码就好了。

Intellij IDEA

为什么不用Eclipse呢?这里没有贬低Eclipse的意思,只是我认为Eclipse用户体验太差,而且各种操作过于繁琐。Intellij用起来更顺手,内置了Maven的支持,而且看起来似乎更有前景,就使用Intellij了。

环境要求

  1. JDK 1.7(1.8似乎也可以,但Hadoop官方推荐1.7)
  2. Intellij

不需要安装任何模式的Hadoop。

WordCount

这里以Hadoop的官方示例程序WordCount为例,演示如何一步步编写程序直到运行。

新建项目

在Intellij中点击File->New->Project,在弹出的对话框中选择Maven,JDK选择1.7,点击Next。

f8732160ef67463d683084ff70f7bcff.png

接下来填写Maven的GroupId和ArtifactId,随便填,点击Next。

2b4f972bfb6bc522aea0eb414171460c.png

然后是Project name,这里填写WordCount,点击Finish。

4f75497a25cb059beababf2a620ef919.png

这样就新建好了一个空的项目,别着急,还有一个地方可能需要修改。打开Intellij的Preference偏好设置,定位到Build, Execution, Deployment->Compiler->Java Compiler,将WordCount的Target bytecode version修改为1.7。

be5da03d0a41fd3be72b80e91b2fabd2.png

配置依赖

新建项目后,在Intellij左上方会有项目文件结构,双击以编辑pom.xml,这就是Maven的配置了。

添加源

pom.xml初始内容如下

6d898d8585c7f9e6f74fe05577751089.png

在project内尾部添加

apachehttp://maven.apache.org

添加apache源。

添加依赖

这里只需要用到基础依赖hadoop-core和hadoop-common;如果需要读写HDFS,则还需要依赖hadoop-hdfs和hadoop-client;如果需要读写HBase,则还需要依赖hbase-client。

在project内尾部添加

7a538232861fde03b968f0559709b345.png

这里hadoop-core的version一般为1.2.1,hadoop-common的version可以依照你的实际需要来。

修改pom.xml完成后,Intellij右上角会提示Maven projects need to be Imported,点击Import Changes以更新依赖

附上完整的pom.xml

18cfdfb2832b4aa47239ba89fedeffc1.png

WordCount

在src->main->java下新建一个WordCount类,添加内容

c7dc975741515c1148737b45f5b4606b.png
a6df14cd7dc7ff848fd0b326cb96dbac.png

此代码来自Hadoop官方教程,出处见参考。

配置输入文件

WordCount对输入文件字符进行计数,输出计数的结果。首先需要配置输入路径,这里在WordCount下(src同级目录)新建一个文件夹input,并添加一个或多个文本文件到input中,作为示例。

bb1f9cff9c3c702b442fc95300f084de.png

这里还有一件事情,点击File->Project Structure,在弹出来的对话框中选择Modules项,点击Sources选项卡,将Language level调整为7。(如果你用到版本控制的话,可以在这里将input文件夹标记为Excluded。

146428786d6fd680f705d024b8a6816a.png

配置运行参数

这里我们需要配置此程序运行时的Main class,以及WordCount需要的输入输出路径。

在Intellij菜单栏中选择Run->Edit Configurations,在弹出来的对话框中点击+,新建一个Application配置。配置Main class为WordCount(可以点击右边的...选择),Program arguments为input/ output/,即输入路径为刚才创建的input文件夹,输出为output。

106a028add11725a66e4fa5c5ef00188.png

运行和调试

运行

上述配置完成后,点击菜单栏Run->Run 'WordCount'即开始运行此MapReduce程序,Intellij下方会显示Hadoop的运行输出。待程序运行完毕后,Intellij左上方会出现新的文件夹output,其中的part-r-00000就是运行的结果了!

668054093f808a072cbab93747cbf7f5.png

由于Hadoop的设定,下次运行时务必删除output文件夹!

调试

断点调试也很容易,在需要设置的代码前单击加上断点,点击菜单栏Run->Debug 'WordCount'即开始调试,程序会在断点处停下。

13e3585c5e0c415822e9122b63a50032.png

Windows下的权限问题

Windows下运行可能会出错,提示

ERROR security.UserGroupInformation: PriviledgedActionException as ...

这是因为当前用户没有权限来设置路径权限(Linux无此问题),一个解决方法是给hadoop打补丁,参考Failed to set permissions of path: tmp,因为这里使用的Maven,此方法不太适合。另一个方法是将当前用户设置为超级管理员(“计算机管理”,“本地用户和组”中设置),或以超级管理员登录运行此程序。

不过我觉得最好的解决方法是在Linux或macOS上跑hadoop。

小结

上面描述的步骤有些多,但逻辑上都是很清晰的,有过一次经验以后就之后就容易多了,主要就是在pom.xml的配置和运行参数的配置上。删除WordCount程序的运行不需要任何的Hadoop开发环境,并且依赖问题全部交给Maven解决了,怎么样?是不是非常简单?

DEMO

本示例程序代码放在Github上,参见zhantong/Hadoop-WordCount。

https://github.com/zhantong/Hadoop-WordCount

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值