美文网首页
Hadoop 踩坑笔记 - no.4 windows + IDE

Hadoop 踩坑笔记 - no.4 windows + IDE

作者: 冰小蓝 | 来源:发表于2018-09-05 23:41 被阅读0次

        先简述一下,作为一个android开发狗,刚刚入坑hadoop对后台的IDEA开发不是很熟悉,按各网站上的描述搭建环境各种被坑,于是决定写一篇傻瓜式的安装windows+IDEA+Hadoop环境搭载及运行的文章。(忽略hadoop本身的环境配置和运行)

        1.下载hadoop,IDEA,配置环境变量,hadoop的配置参数,添加winUtils.exe

                    1.1下载hadoop https://archive.apache.org/dist/hadoop/common/这个是hadoop的下载地址。选择自己的所在版本的下载地址笔者用的是2.5.0版本的文件。

    hadoop下载

                       注意是下载其中的.tar.gz文件不带src,src只是其中一小部分资源文件

    hadoop下载

                    
                    1.2下载IDEA,https://www.jetbrains.com/idea/download/#section=windows,笔者是下载IDEA专业版后用破解补丁破解的,毕竟社区版功能太少不够用的。顺便贴上破解教程地址https://mp.weixin.qq.com/s?__biz=MzI0OTc0MzAwNA==&mid=2247483806&idx=1&sn=5c60673c73fdd32b90776831123e9fd0&chksm=e98d926ddefa1b7b5dfd5bac3cb0d341a30afd3dac960059a97dca1a07f5701e0f78653281d4&scene=21#wechat_redirect

                    1.3.配置Hadoop环境变量,java的环境变量就不说了,毕竟学hadoop java基础肯定都是有的。将下载的压缩包用压缩工具解压到指定目录然后和java一样将hadoop的安装目录以HADOOP_HOME的形式配置到环境变量中,

    HADOOP_HOME PATH的配置

                    1.4.1配置环境参数,现在cmd命令行中输入hadoop,如果出现Error: JAVA_HOME is incorrectly set. Please update F:\hadoop\conf\hadoop-env.cmd类似的字样,请修改安装目录下的hadoop-env.cmd(关于路径如果这个文件在etc下,那便改etc目录的这个文件)为

    后面的路径填自己的jdk的路径,目录不能包含空格,如果在Program Files文件夹下请用PROGRA~1替代

                            1.1.5因为我们将hadoop运行在windows上需要提供兼容,所以要添加winutils.exe文件到hadoop的bin目录下,这个是winutils.exe的下载地址     https://pan.baidu.com/s/1MLs2ic4KKeuQbjTgHG6P_w  密码:ihgu

    复制到hadoop/bin下

        2.创建MAVE项目,导入相应的依赖,配置Aritifact

                    2.1打开IDEA创建MAVEN项目

    打开IDEA 创建MAVEN项目,SDK使用自己版本的JDK groupId团队id,一般是com.所属团队英文名,artifactId产品ID一般为产品英文名

                    2.2导入hadoop相关的依赖

                     可以直接从hadoop的安装目录中的share包依赖所有jar

    添加hadoop的share依赖

                        也可以通过maven直接添加

                        maven 依赖- 代码链接

                        不过即使依赖了share包,也需要在maven中依赖 log4j和slf4j库(在上面的代码链接中已给出,两个库是用来做hadoop的日志打         印的,如果没有依赖则运行时会报ClassNotFound异常)

                        然后在项目的resource目录下新建log4j.properties文件 进行如下配置


            
    log4j.rootLogger = debug,stdout

    ### 输出信息到控制台 ###

    log4j.appender.stdout = org.apache.log4j.ConsoleAppender

    log4j.appender.stdout.Target = System.out

    log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

    log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n


             2.3配置artifact

                    如果没有配置artifact你运行mapreduce时,会在terminated中发现报MapClass,ReducerClass的not found异常,主要原因是要Hadoop运行mapreduce的时候是在指定jar包寻找mapClass和ReducerClass,所以我们需要在运行前先把代码打成jar,然后再运行

                    PS:配置artifact和打成jar,用hadoop命令运行不一样。继续往下看

    配置artifacts

                    如上图所示,打开project structure,选择artifacts选项,点击加号,选择从现有的hadoop_module中导入生成的jar包配置

    配置module和main class

                            配置你运行mapreduce的main class和module

                            点击OK

    选中 include in project builde

                            选中 include in project builde,这样就可以让你在run main class的时候,自动生成jar测试运行。

                            点击OK

                            然后在mapreduce类中加入如下代码


    ((JobConf)job.getConfiguration()).setJar("artifacts配置的jar包路径");


        3.编写MapReducer类,笔者遇坑列举

                            3.1编写mapreducer类,关于mapreducer类,笔者在此不多缀述。

                            3.2笔者遇坑介绍

                                    /bin/bash: line 0: fg: no job control当运行hadoop的时候出现这个错误,并且在historyserver上出现 mapreduce.Job: Job job_1386170530016_0001 failed with state FAILED due to: Application application_1386170530016_0001 failed 2 times due to AM Container for appattempt_1386170530016_0001_000002 exited with exitCode: 1 due to: Exception from container-launch: 这样的错误,

                                     或者是遇到 hadoop_home_dir的not found 异常 (笔者原本以为这三个异常相互独立,后来才发现造成的原因一样)        主要原因是因为mapreduce运行时无法解析%JAVA_HOME%,%HADOOP_HOME%这样的环境参数所导致的,原本在2.2.0和2.3.0的版本解决方法为修改源码,但是2.5.0及以上版本,直接在创建job对象之后添加如下代码


    conf.set("mapreduce.app-submission.cross-platform","true");


                                       底层就会自动将%JAVA_HOME%,%HADOOP_HOME%转换成$JAVA_HOME,$HADOOP_HOME这样liunx环境下可读的环境变量

    相关文章

      网友评论

          本文标题:Hadoop 踩坑笔记 - no.4 windows + IDE

          本文链接:https://www.haomeiwen.com/subject/xcczwftx.html