zoukankan      html  css  js  c++  java
  • windows下Eclipse远程连接linux hadoop远程调试 经验(一)

    环境

    Windows 7 64bit

    JDK 1.6.0_45  (i586)

    JDK 1.7.0_51  (i586)

    Eclipse Kepler

    Eclipse -plugin-1.2.1.jar

    Hadoop 1.2.1 (32位的库)

    服务器 hadoop与 本机的hadoop版本完全一致。

    Note:我设置的Hadoop Master的 用户名是 root

    正确配置

    本机不需要 改windows用户名

     
    JDK编译器 1.6 和 1.7 应该都行。1.7目前没试过,推荐有兴趣的人试试,不一定要按网上博客所说的配置
     
    core-site.xml
    这个设置 就是 data 和 name所在的位置
     
    <property>
    
    <name>hadoop.tmp.dir</name>
           <value>/home/tmp</value>
            <description>A base for other temporary directories.</description>
    </property>
     
    注意:Hadoop的Eclipse插件的 设置界面的 用户名要改成root,也就是 集群的用户名
     
    我曾经尝试在 hdfs-site.xml中
    配置
    <name>dfs.namenode.name.dir</name>
    <name>dfs.datanode.data.dir</name>
    无效,不知为何。
     
    hdfs-site.xml似乎不需要设置 datanode 和 namenode。
     
     
    第一次运行出错
    12/04/24 15:32:44 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 
    12/04/24 15:32:44 ERROR security.UserGroupInformation: PriviledgedActionException as:dell cause:java.io.IOException: Failed to set permissions of path: mphadoop-rootmapredstaging oot-519341271.staging to 0700 
    Exception in thread "main" java.io.IOException: Failed to set permissions of path: mphadoop-rootmapredstaging oot-519341271.staging to 0700
     
    1.在解决问题的过程中 我尝试改过 /home/tmp的权限
    chmod -R 777 tmp
    这样导致 datanode 无法启动。
     
    最后还原成  drwxr-xr-x 就好了。所以 这个目录权限不要修改。
     
    2.在 Map/Reduce程序 中我加入了三行
    		Configuration conf = new Configuration();
    		//conf.set("dfs.permissions", "false");
    		//conf.set("hadoop.job.user", "root");
    		//conf.set("mapred.job.tracker", "xxx.xxx.xxx:9001");
    结果出现:
     
    14/12/11 12:21:45 INFO mapred.JobClient: Task Id : attempt_201412101152_0004_m_000000_0, Status : FAILED
    java.lang.RuntimeException: java.lang.ClassNotFoundException: wdc.WordCount$TokenizerMapper
     at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:857)
     at org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:199)
     at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:718)
     at org.apache.hadoop.mapred.MapTask.run(MapTask.java:364)
     at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
     at java.security.AccessController.doPrivileged(Native Method)
     at javax.security.auth.Subject.doAs(Subject.java:396)
     at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
     
    研究了一晚上,无解。
    但是 此时我 怀疑过 JDK 1.7是不是不行,
    于是把Eclipse 的JDK 按照网上大神的博客改成 1.6问题依旧。
     
    Google了一晚上,网上有人说it is because the permission,又没具体说怎么解决。
    我又怀疑是 Windows 用户名 没有改成root,但是倔强的本人始终不愿意改。
     
    研究过程中 我在core-site.xml中加入
    <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>
     
    依然不行。但是这个改动 解决了一个 小问题,Eclipse插件不能创建目录和上传文件的问题。
     
    那么又来改 hadoop fs -chmod -R 777 /user
    改了之后 仍然不行。
     
    难道一定要改用户名?
    那么 我创建了一个 名为root的用户,运行Map/Reduce程序后出现
     
     
    org.apache.hadoop.security.AccessControlException:Permission denied:user=Administrator,access=WRITE,inode="tmp":root:supergroup:rwxr-xr-x 。

     

    百度了一下,这是 hadoop-core-1.2.1.jar的问题 Windows下 和 linux用户权限不一致的问题。在linux下没有这个问题。

    那么把 hadoop-1.2.1/src/core/org/apache/hadoop/fs/FileUtil.java里面的checkReturnValue方法,注释掉重新编译即可

     

    private staticvoid checkReturnValue(boolean rv, File p,
    
    FsPermission permission) throws IOException {
    
    // if (!rv){
    
    // throw newIOException("Failed to set permissions of path: " + p +
    
    // " to" +
    
    //String.format("%04o", permission.toShort()));
    
    // }
    
    }
    

    我懒得编译这个hadoop-core-1.2.1.jar于是百度 搜了一个 放在本地 hadoop的根目录下。

    这时候 我偶然去掉了 那三行。后 突然就正常了
    经过不断尝试 发现
     
    java.lang.RuntimeException: java.lang.ClassNotFoundException: 包名.WordCount$TokenizerMapper
     

    这个问题是

     
    conf.set("mapred.job.tracker", "x.x.x.x:9001"); 这句导致的。另外的两句无影响。
     
    去掉之后出现org.apache.hadoop.security.AccessControlException:Permission denied:user=Administrator,access=WRITE,inode="tmp":root:supergroup:rwxr-xr-x 。

    这个错误在之前就见过。说明 之前改的 dfs.permission 无效,而真正的解决方法是 重新编译 hadoop-core-1.2.1.jar

    那么 我又 切换到 Win7的 自己的账号下,依然可以运行 成功。

    证明 不需要改Win7的用户名。

     
    问题终于解决
     
  • 相关阅读:
    u-boot 用哪个lds链接脚本
    u-boot-2019.07 移植步骤
    u-boot-2016.09 make编译过程分析(二)
    grep 命令搜索 带空格的字符
    uboot if_changed函数
    2019保险规划 待完善
    MongoDB Capped集合
    并发编程——详解 AQS CLH 锁
    Spring容器中的Bean几种初始化方法和销毁方法的先后顺序
    观察者模式
  • 原文地址:https://www.cnblogs.com/slankka/p/9158575.html
Copyright © 2011-2022 走看看