zoukankan      html  css  js  c++  java
  • Eclipse里编写第一个Hadoop程序

    Hadoop分布式安装: http://www.cnblogs.com/BennyTian/archive/2013/03/05/2944868.html

    Hadoop Eclipse插件: http://www.cnblogs.com/BennyTian/archive/2013/03/05/2944899.html

    Eclipse 新建一个 MapReduce项目

    然后按照 hadoop 安装包里的 WordCount 例子源码 手敲一遍,对,是手动敲,不要复制.

    在写代码的时候,会出现各种问题.最主要的是 新/老 AIP不兼容的问题.

    比如 :

    FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
    FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));

    新老包导错了会编译不过去...

    然后运行.在Main方法类里右键,Run As -> Run Configurations -> Arguments 

        配置一下运行参数,主要有2个. 一个是 hdfs的 输入, 一个是输出.(输出文件夹必须是不存在的)

        我的是: hdfs://centos1:9000//user/hadoop/input hdfs://centos1:9000//user/hadoop/output

    可能出现的异常:

      

    1.

    Hadoop Failed to set permissions of path

    这个是Windows下文件权限问题,在Linux下可以正常运行,不存在这样的问题。

    解决方法是,修改/hadoop-xxx/src/core/org/apache/hadoop/fs/FileUtil.java里面的checkReturnValue,注释掉生成class文件替换安装目录下的 hadoop-core-x.xx.xxx.x.jar 

    2.

    org.apache.hadoop.security.AccessControlException: Permission denied: user=BennyTian, access=WRITE, inode="hadoop":hadoop:supergroup:rwxr-xr-x

    这个主要是hdfs权限问题.因为Eclipse使用hadoop插件提交作业时,会默认以 你开发的PC 身份去将作业写入hdfs文件系统中,对应的也就是 HDFS 上的/user/xxx , 我的为/user/hadoop ,   由于 PC 用户对hadoop目录并没有写入权限,所以导致异常的发生。

    解决办法1:  到 hdfs-site.xml 里添加这个节点(如果存在就将值改为flase):

    <property>
        <name>dfs.permissions</name>
        <value>false</value>
        <description>
            If "true", enable permission checking in HDFS.
            If "false", permission checking is turned off,
            but all other behavior is unchanged.
            Switching from one parameter value to the other does not             change the mode,
            owner or group of files or directories.
    </description>
    </property>            

    解决办法2: 放开 hadoop 目录的权限 , 命令如下 :$ hadoop fs -chmod 777 /user/hadoop  

    3:

    org.apache.hadoop.ipc.RemoteException: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /user/hadoop/output2/_temporary. Name node is in safe mode.

    以正常情况来说,启动Hadoop后会停留在safe mode几秒中!(所谓的safe mode是指等待各节点传送状态资料到主节点时HDFS的只读模式) 但当遇到因为不正常的关闭Hadoop,节点出现错误,也会导致name node一直停留在safe mode
    这时只能通过命令强迫离开 safe mode了

    bin/hadoop dfsadmin -safemode leave

    -safemodel 其他参数:

      leave  : 离开安全模式 
      enter  :进入安全模式
      get   :返回安全模式状态
      wait  :-一直等到安全模式结束

  • 相关阅读:
    Shell 中的 expect 命令
    #每日日报#7.11
    #每日日报#7.10
    #每日日报#7.09
    #每日日报#7月8日
    每日日报2020.7.17
    每日日报2020.7.16
    每日日报2020.7.15
    每日日报2020.7.14
    每日日报2020.7.13
  • 原文地址:https://www.cnblogs.com/BennyTian/p/2946367.html
Copyright © 2011-2022 走看看