hadoop-(3)hadoop问题汇总

来源:互联网 发布:南征北战抄袭知乎 编辑:程序博客网 时间:2024/05/16 14:52

问题1、虚拟机安装hadoop,windows通过主机名打不开hadoop的web页面
http://master:50070/无法访问。windows ping master也ping不通
方法windows本机C:\Windows\System32\drivers\etc\hosts文件下面加上linux hosts配置hadoop机器的主机名和ip地址加进去。
问题2、windows下eclipse运行hadoop程序,报用户不一致,没有权限
org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security .AccessControlException: Permission denied: user=sunzhaohua, access=WRITE, inode="szh":
方法  // 1、这种获取fs的方法可以指定访问hdfs的客户端身份
  fs = FileSystem.get(new URI("hdfs:master:9000/"), conf, "szh");
2、参考:http://www.huqiwen.com/2013/07/18/hdfs-permission-denied/
windows在系统的环境变量里面添加HADOOP_USER_NAME=szh,重启eclipse,即可。
问题3、运行hadoop fs -put命令报no root to host
方法发现是从节点的防火墙没有关闭,关闭防火墙即可
service iptables stop


问题4、运行./stop-all.sh命令,jps发现进程仍然存在,报错no tasktracker to stop ,no datanode to stop
方法1)kill -9 把这些进程杀死也可
netstat -nltp
2)问题的原因是hadoop在stop的时候依据的是datanode上的mapred和dfs进程号。而默认的进程号保存在/tmp下,linux默认会每隔一段时间(一般是一个月或者7天左右)去删除这个目录下的文件。因此删掉hadoop-hadoop-jobtracker.pid和hadoop-hadoop-namenode.pid两个文件后,namenode自然就找不到datanode上的这两个进程了。
在配置文件中$HADOOP_HOME/conf/hadoop-env.sh中export HADOOP_PID_DIR=${HADOOP_HOME}/pids可以解决这个问题

问题5、hadoop2.6.3 编写mapreduce程序,打jar包运行,报错java.io.IOException: Type mismatch
方法1)kill -9 把这些进程杀死也可
netstat -nltp
2) // wordcount.setMapOutputKeyClass(Text.class);
        // wordcount.setMapOutputKeyClass(LongWritable.class);
map的输出类型注释掉即可

问题6、本地模式运行mapreduce,Eclipse报错:ERROR [main] util.Shell (Shell.java:getWinUtilsPath(373)) - Failed to locate the winutils binary in the hadoop binary path java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

方法  javamain方法中代码设置:  System.setProperty("hadoop.home.dir", "E:/study/Hadoop/hadoop-2.6.3");

问题7、本地模式运行mapreduce,Eclipse报错:Exceptionin thread "main" java.lang.UnsatisfiedLinkError:org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray(II[BI[BIILjava/lang/String;JZ)V

    这是由于hadoop.dll 版本问题,2.4之前的和之后的需要的不一样

    需要选择正确的版本并且在 Hadoop/bin和 C:\windows\system32 上将其替换

下载windows64位平台的hadoop2.6插件包(hadoop.dll,winutils.exe)

在hadoop2.6.0源码的hadoop-common-project\hadoop-common\src\main\winutils下,有一个vs.net工程,编译这个工程可以得到这一堆文件,输出的文件中,

hadoop.dll、winutils.exe 这二个最有用,将winutils.exe复制到HADOOP\bin目录,将hadoop.dll复制到C:\Windows\System32目录 (主要是防止插件报各种莫名错误,比如空对象引用啥的)

注:如果不想编译,可直接下载编译好的文件 hadoop2.6(x64)V0.2.zip




 

0 0