当初一开始学hadoop的时候用的是强大的eclipse,hadoop-1.x在eclipse上的插件非常好用,但是好像hadoop-2.x这个插件失效了,所以现在就不愿意使用eclipse了。

本身我个人觉得IntelliJ的各种产品都是非常好用的,比起eclipse来讲,我更加倾向于使用IDEA,除了用起来舒服之外,IDEA的scala插件也非常的好用,比scala-ide好用的多(个人感觉而已)。

我自己的三大最重要的IDE都是IntelliJ的产品,搭建的是自己的家族认证服务器,至于如何搭建或者是使用别人的认证服务器,可以参照痛苦的信仰啊的文章:https://www.imsxm.com/jetbrains-license-server

postbird

hadoop即使在学习的时候,每次都打包成jar,然后传到linux上进行运行未免太麻烦,进行远程调试和开发显得尤为重要。

我使用的是 IntelliJ IDEA Community Edition 2016.2.4.

1、创建工程

配置实际上就是讲hadoop的用到的包和一些lib导入。

从创建工程开始说起:

【file】->【new project】->【java】->【选择自己的JDK】->【next】->【配置项目名称和路径】->【finish】

postbird

2、配置Modules

【右击项目名】->【Open Modules Settings】

postbird

【Modules】->【点击右边的+号,选择Library】->【new Library】->【java】

将hadoop-2.7.1-src的压缩包解压后放在一个目录中,我放在了 I:/bigdata/hadoop-2.7.1/中

选择上面文件夹./share/hadoop/的所有文件夹(也可以打开后单独选择每个要加入的jar包,可以有选择的加入)

选择OK,加入即可(记得重命名一下Library的名字),然后选择Add Selected就可以了

<img src="http://static.ptbird.cn/usr/uploads/2017/01/3453689274.png
" class="center-block" alt="postbird" />

postbird

3、配置Library

配置完Modules之后就可以配置Library了,一样的操作流程。

【点击+号】->【选择java】

这次选择的是,上面bigdata/hadoop-2.7.1/share/hadoop/common/lib/下的jar。

postbird

postbird

之后点击OK配置完成。

3、配置windows的可执行文件

windows下开发的可执行文件非常重要,也就是bigdata/hadoop-2.7.1/bin/下的windows可执行文件或者是dll。

postbird

如果版本不匹配或者是不兼容是不能用的,我之前配置的就是版本的问题导致不能用。

我在2.6.x和2.7.x用的hadoop的可执行包都压缩到了一个合集上传到了csdn上面,资源地址:http://download.csdn.net/detail/qq_20441521/9744649

解压后将相对应的版本都直接覆盖掉bin目录下就可以了。

4、写代码

使用hadoop filesystem api操作hdfs的文件的一个示例。

我这里是把hdfs://url 给写死了,图省事和方便,这样子可以直接在windows上远程开发和调试,至于更多的示例,我会在之后的文章中写。

    //hdfs当前活跃的namenode url
//    public static String hdfsUrl="hdfs://node1.hadoop.ptbird.cn:8020";
    public static String hdfsUrl="hdfs://node2.hadoop.ptbird.cn:8020";
    //获取hdfs的句柄
    public static FileSystem getHdfs()throws Exception{
        //获取配置文件信息
        Configuration conf=new Configuration();
        //获取文件系统
        FileSystem hdfs=FileSystem.get(URI.create(hdfsUrl),conf);
        return hdfs;
    }
    //读取文件信息
    public static void testRead(Path p) throws Exception{
        FileSystem hdfs=getHdfs();
        //打开文件流
        FSDataInputStream inStream=hdfs.open(p);
        //读取文件内容到控制台显示
        IOUtils.copyBytes(inStream, System.out,4096,false);
        //关闭文件流
        IOUtils.closeStream(inStream);
    }
效果: postbird 5、补充 ==== 如果提示 Name node is in safe mode.,说明namenode处于安全模式,应当退出,否则一直异常,无法操作。 stackoverflow关于这个异常的讨论:http://stackoverflow.com/questions/13729510/safemodeexception-name-node-is-in-safe-mode 命令是(./hadoop-2.7.1/bin/):
$ ./hadoop dfsadmin -safemode leave
[1]: https://www.imsxm.com/jetbrains-license-server [2]: http://download.csdn.net/detail/qq_20441521/9744649 [3]: http://stackoverflow.com/questions/13729510/safemodeexception-name-node-is-in-safe-mode