Hadoop-------扫除运行障碍篇
Hadoop-------扫除运行障碍篇(一) 一个较完整的命令行和SDK中执行Hadoop的两种方式的配置方法
http://www.cnblogs.com/zbw911/archive/2011/9/30.html
(二) Cygwin运行Hadoop中处理 ssh的有效命令
1 ssh-host-config
错误: There are still ssh processes running. Please shut them down first.
解决: ps -ef | grep -v grep | grep ssh
kill -9 上条指令显示的相应进程号(空格分开)
2 ssh localhost
错误:connection closed by 127.0.0.1
解决:(1) mkpasswd -l -c > /etc/passwd
(2) mkgroup -l -d > /etc/group
(3) 再重新进入Cygwin,mkpasswd和mkgroup提示消失,再次配置ssh,并执行ssh localhost
(三) 出现类似如下:
…..
/cygdrive/d/dis/hadoop-0.20.2/bin/../conf/hadoop-env.sh: line 20: $'\r': command not found
/cygdrive/d/dis/hadoop-0.20.2/bin/../conf/hadoop-env.sh: line 30: $'\r': command not found
/cygdrive/d/dis/hadoop-0.20.2/bin/../conf/hadoop-env.sh: line 33: $'\r': command not found
/cygdrive/d/dis/hadoop-0.20.2/bin/../conf/hadoop-env.sh: line 36: $'\r': command not found
……
进入hadoop根目录下的conf目录,然后对hadoop-env.sh文件执行dos2unix,即
Dos2unix hadoop-env.sh
(四) 无法连接服务期错误。该类错误产生的原因很多,但是主要都和conf下的配置文件相关,例如ip 配置错误、运行时候没有设置临时文件夹等等,不一而足。根据提示和端口号(mapred还是hdfs)进行相应处理。
出现类似如下:
……………
12/03/13 15:42:43 INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 0 time(s).
12/03/13 15:42:45 INFO ipc.Client: Retrying connect to server:
12/03/13 15:42:49 INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 3 time(s)
……………………………………
如果是由于格式化之后u没有重qi重新启动hadoop,再连接,即在hadoop主目录下执行:
Bin/stop-all.sh
Bin/start-all.sh
(五) Objectheap和 Java virtual machine 相关处理
1.Could not create the java virtual machine
/hadoop/conf/hadoop-env.sh中的
# The maximum amount of heap to use, in MB. Default is 1000.
# export HADOOP_HEAPSIZE=2000
2. 根本解决
(引用出自http://javoft.net/2011/06/hadoop-unrecognized-option-jvm-could-not-create-the-java-virtual-machine/)
hadoop/bin/hadoop中有如下一段shell:
?
1
2
3
4
5
6
CLASS='org.apache.hadoop.hdfs.server.datanode.DataNode'
if [[ $EUID -eq 0 ]]; then
HADOOP_OPTS="$HADOOP_OPTS -jvm server $HADOOP_DATANODE_OPTS"
else
HADOOP_OPTS="$HADOOP_OPTS -server $HADOOP_DATANODE_OPTS"
fi
其中的
?
1
2
if [[ $EUID -eq 0 ]]; then
HADOOP_OPTS="$HADOOP_OPTS -jvm server $HADOOP_DATANODE_OPTS"
如果 $EUID 为 0,什么意思呢?
有效用户标识号(EUID):该标识号负责标识以什么用户身份来给新创建的进程赋所有权、检查文件的存取权限和检查通过系统调用kill向进程发送软 中断信号的许可权限。
在root用户下echo $EUID,echo结果为 0
ok,在root下会有-jvm选项添加上去,上面说的Unrecognized option: -jvm难道就是这里产生的。
两个想法。一个想法是自己改了这shell代码,去掉里面的-jvm。另外一个想法是 既然这里要求 $EUID -eq 0,那别用$EUID不为0的(root用户)用户运行即可。果断试试,换上普通用户根据文档提示做。ok,成功。好奇的再试试第一个想法,其实暂时还是不太想动源码。但是这shell动动也没妨,果断去掉上面的-jvm,直接把上面的if else 结构直接去掉改为
?
1
HADOOP_OPTS="$HADOOP_OPTS -server $HADOOP_DATANODE_OPTS",
同样运行成功。
如上几个尝试最终证明问题就出现在与-jvm这个参数选项
(六) javac could not find问题
用户变量和系统变量都要配置PATH中的java/bin和jdk。
(七) 关于版本的问题
不是最难的、却可以是最关键和最耗时的。采用了最笨的方法,下了数个hadoop和eclipse不同版本进行交叉匹配解决这个问题,呵呵,得出,eclipse 要3.6(注意后面没有3.6.*)或以下版本,hadoop-0.20.2或以下,终于解决了这个问题…
版权声明:本文为博主原创文章,未经博主允许不得转载。
页:
[1]