theoforce 发表于 2015-11-11 13:17:52

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]
查看完整版本: Hadoop-------扫除运行障碍篇