基于 IDEA 开发 Hadoop 程序

设置字体大小:

安装好 Hadoop 之后我们搞 Hadoop 开发总不能只用 vim 吧 :(不高兴) 选择一个顺手的 IDE 是最好的选择,Java 的 IDE 有名的当然是 Eclipse 和 IntelliJ IDEA 了。前者是免费的,而后者呢,虽然专业版是收费的,但是有开源的社区版。对于高级一点的 Java 开发, IDEA 是首选,关于 IDEA 的 专业版,我们可以通过学生邮箱认证来免费使用(关于我们学校申请学生邮箱的文章和学生优惠信息在我之前的问文章里:喜大普奔,HAUT学生邮箱开放注册(内附一些学生优惠)Github Student Pack的申请方法(无需edu邮箱)[内含福利]

这里我已经用学生邮箱申请了一个 JetBrains 账号,凭借着这个账号就可以免费使用 JetBrains 旗下的所有 IDE,每一有效期一年,可以续期,优惠还是挺大的。好了,不打广告了,下面开始正题:基于 IDEA 开发 Hadoop 程序(多图预警 :(滑稽) )。

IDEA 的强大很难让人一下子去很好的使用它, 这里附上 Github 上的一个 IDEA 使用教程:IntelliJ-IDEA-Tutorial

本篇教程以安装好 IDEA 开始。

这里再插一句,我是先录制了一个视频演示,大致演示了如何用 IDEA 来开发一个简单的 HDFS 文件读写程序,以下的教程也是根据这个程序来讲的,后面我会给出程序源代码,也可以到我的下载站里去下载源码:WriteFileAndOutputFile.java

一、新建 Project

打开 IDEA 后点击图中的 “Create New Project”,如果已经默认打开了一个工程,那就在顶部的“File”菜单中选择“New”->“Project”。

新建工程
新建Java 工程,一定要选中 Java 工程,并且选择 JDK 的时候要和 Hadoop 环境中的 JDK 版本一致,即上图中的“SDK”

接下来的看视频里演示的就行了,也就是不选择任何模版文件->编辑工程名和 Module 名(并选择工程的路径),然后就新建工程成功了。我们下一步是导入 Hadoop 的相关 Jar 包

右键点击工程名,选择”new”->”Directory”

二、导入Hadoop 的 Jar 包

要开发 Hadoop 程序肯定要用到 Hadoop 给我们的 Java API,这些都在 Hadoop 的 Jar 包中,我们要将这些包导入到我们的工程中并作为一个库。那么这些 Jar 包在哪找呢?就在我们安装的 Hadoop 目录中,即“${HADOOP_HOME}/share/hadoop/” 目录下,这个目录下有很多子目录,分别寻访这 Hadoop 不同模块的 Jar 包。我们将需要用到的包弄出来就可以了。

先在我们刚刚新建的工程目录下新建一个目录 libs:

右键点击工程名,选择”new”->”Directory”

接着我们就可以将 Hadoop 的相关 Jar 包复制到我们刚才新建的目录中了。

这里说几个基本的包的路径(省略了 ${HADOOP_HOME}/):

share/hadoop/common/hadoop-common-x.x.x.jar
share/hadoop/hdfs/hadoop-hdfs-x.x.x.jar
share/hadoop/hdfs/hadoop-hdfs-client-x.x.x.jar
share/hadoop/mapreduce/hadoop-mapreduce-client-common-x.x.x.jar
share/hadoop/mapreduce/hadoop-mapreduce-client-core-x.x.x.jar

后面的 x x x 指的是不同的版本,这里要根据你安装的 Hadoop 的版本来找到相应的包。把这些包都复制到我们刚才新建的那个目录中,在 IDEA 里右键点击 “libs”目录,选择“Add As Library”,就可以直接将这个目录设置为“Library”,点了之后会让你给这个“Library”起一个名字,将其设置为工程库还是系统库,一般默认的工程库就可以了。

选择“add as library”
为库命名

“OK”之后,就会发现每一个 Jar 文件变成可以直接打开的 了,这就说明 Jar 已经导入成功了。当然还有其他方法导入 Jar 包,这里不再详细说明了。

三、编写程序

包导入之后我们就可以用 Hadoop 的 API 来写程序了,这里我给出的是一个简单的读写 HDFS 文件的程序,我们在 IDEA 中右键点击工程中的“src”目录,选择“new”->”java class”,将下面的代码复制过去:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;

/**
 * User: sunriseydy
 * 2018-4-8 15:07
 */
public class WriteFileAndOutputFile {
    public static void main(String[] args) throws Exception {
//判断 Main 方法的参数数目,如果不等于2,则输出使用帮助并退出程序
        if (args.length != 2) {
            System.out.println("Usage: hadoop jar WriteFileAndOutputFileDemo.jar  [HDFS_File_Path] [String]");
            System.exit(-1);
        }
//第一个参数为文件的路径
        String path = args[0];
//创建一个 Configuration 对象实例
        Configuration conf = new Configuration();
//根据 Hadoop 的配置来创建一个 FileSystem 对象
        FileSystem fs = FileSystem.get(conf);
//根据输入的路径来创建一个文件输出流,并设置为强制覆盖源文件
        FSDataOutputStream outputStream = fs.create(new Path(path),true);
        String str = args[1]+"\n";
//将第二个参数转换成 UTF-8 格式的字节数组,写入到文件中
        outputStream.write(str.getBytes("UTF-8"));
//关闭输出流
        outputStream.close();
//创建一个输入流
        FSDataInputStream inputStream = null;
        try {
//将文件作为输入流的来源
            inputStream = fs.open(new Path(path));
//将文件的内容通过输入流拷贝到系统标准输出中
            IOUtils.copyBytes(inputStream, System.out,4096);
        } finally {
//不管有没有错误都关闭输入流
            IOUtils.closeStream(inputStream);
        }
    }
}

代码写完了,怎么运行呢?肯定不能像普通的 Java 文件那样直接 Run,而是要先打包成 Jar 文件,再用 Hadoop 来运行,因为 Hadoop 只能运行 Jar 包。下面开始打包。

四、打 Jar 包

其实我们可以直接用命令来打包,不过这样子有点麻烦,IDE 一键就搞定了我们为什么还要手敲命令呢 :(捂嘴笑)

那么在 IDEA 里我们怎么配置打 Jar 包呢?视频上演示的有,这里简单说一下。

点击“File”->”Project Structure”->“Artifacts”,点右边列表上方的加号,选择“Jar”->“From  modules with Dependencies”,如图:

接着选择 Main Class 为当前工程中的主类名,可以直接点击右边的三个店来浏览当前存在的类名。注意,这一步不能选错。这里还要注意 META_INFO 的路径,默认是在“src”目录下,如果这个目录下已经有一个 “META_INFO” 目录,在新建时会出错。

META_INFO

在“OK”之后,就会出现这个 Jar 包的配置信息,这里它会自动将我们之前导入的 Hadoop Jar 包也添加到这个 Jar 包的输出中,但是我们在 Hadoop 环境中运行 Jar 包是不需要这些导入的额外的 Jar 包,因此我们要将它们删去。选中要删除的 Jar 包,点击上面的减号就删掉了。注意,不要手抖把“compile output”也删掉了,否则 Jar 包中没有编译后的 .class 文件。在这里,我们也要注意一下 jar 包的输出路径,默认是在工程目录下的 out/Artifacts/工程名_jar/工程名.jar。

删除不需要的文件

都搞定后就可以点“OK”,开始 Build。

在 IDEA 顶部菜单的 “Build”下选择“Build Artifacts”,接着在出现的菜单中选择“Build”,如果是第二次就选择“rebuild”,等待构建完就可以在 Jar 的输出路径下看到 Jar 包了。如图

选择 Build Artifacts
第一次选择“build”,之后就选择“rebuild”
Jar 包已经打好

好啦,接下来就是把 Jar 包放到 Hadoop 里跑了

五、运行程序

用某种方法将上一步打好的 Jar 包复制到 Hadoop 环境中,我这里是在虚拟机中安装的 Hadoop ,将 Jar 包复制到 Hadoop 安装目录下的 jar 目录(自己新建的)中:

hadoop@Hadoop-Server-3:/usr/local/hadoop/jar$ ls
Hadoop.jar  WriteFileAndOutputFileDemo.jar

我打包的 Jar 包就是第二个 WriteFileAndOutputFileDemo.jar

运行:

hadoop@Hadoop-Server-3:/usr/local/hadoop/jar$ hadoop jar WriteFileAndOutputFileDemo.jar 
Usage: hadoop jar WriteFileAndOutputFileDemo.jar  [HDFS_File_Path] [String]

如果运行时不加参数,会输出帮助信息,说明第一个参数是 HDFS 的文件路径,第二个是要写入的字符串。

我们加上参数来运行一次:

hadoop@Hadoop-Server-3:/usr/local/hadoop/jar$ hadoop jar WriteFileAndOutputFileDemo.jar /test.txt helloworld
helloworld

运行程序,将“helloworld”写入到“/test.txt”文件中,并输出内容。我们来验证一下是否成功新建文件和文件里的内容:

hadoop@Hadoop-Server-3:/usr/local/hadoop/jar$ hdfs dfs -ls /
Found 2 items
-rw-r--r--   1 hadoop supergroup         11 2018-04-09 03:40 /test.txt
drwxr-xr-x   - hadoop supergroup          0 2018-04-05 21:22 /user
hadoop@Hadoop-Server-3:/usr/local/hadoop/jar$ hdfs dfs -cat /test.txt
helloworld
hadoop@Hadoop-Server-3:/usr/local/hadoop/jar$ 

看来我们成功了呢 :(哈哈)

 

好啦,本篇教程到此结束啦,之后我会再写一些关于 Hadoop 的文章,喜欢的朋友可以扫描文章下面的二维码订阅我的公众号来第一时间获取博客更新,或者将本站收藏到书签中 :(小乖)

分享到:

赞 (0)   -->微信赞赏<--

微信扫描二维码或搜索“sunriseydy”关注我的公众号,便捷地阅读博客内容,订阅博客更新



版权说明:
文章内容如未说明均为原创,欢迎转载,但请注明原作者和出处。部分来自互联网的文章,如有侵权,请联系我,24小时内删除,谢谢
Email:i@mail.sunriseydy.top


知识共享许可协议
作品 sunriseydy 采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

“基于 IDEA 开发 Hadoop 程序”的2个回复

评论一下呗亲

电子邮件地址不会被公开。 必填项已用*标注

添加表情