一.
Cygwin可以在windows系统中模拟linux环境,可同时具备dos和linux上shell的功能。
安装时要选择安装Devel,Net中的openssh和openssl,Base中的sed,Editor里面的vim。为保险最好全部下载(把All旁边的default点一下,变成install),不然下载下来的可能功能不全。
问题1:不知道那些选项有决定性作用,经常下载下来后不能使用。
问题2:下载需要非常长的时间,建议全部下载下来之后再到各节点机器上安装,否则下载可能出现意外中断,或者下载后没办法使用。
在第一步询问“Should privilege separation be used?(yes/no)”时,输入no;(必须选no,否则可能会出问题)
在第二步询问“(Say "no" if it is alreadyinstalled as a service) (yes/no)”时,输入yes;
在第三步询问“Enter the value of CYGWIN for thedaemon: []”,直接回车。
看到“Host configuration finished. Have fun!”后此步即完成。
使用windows的管理工具中的服务管理,将“CYGWIN sshd”服务启动。
在cygwin中输入ssh-keygen,一路回车即可。
然后在cygwin下依次执行如下命令:
cd ~/.ssh
cp id_rsa.pub authorized_keys
之后ssh localhost,若看到水牛图样,则表示成功
【问题1】
#
/usr/local/sbin/sshd
Privilege separation user sshd does not exist
【解决方案】
没有sshd用户
sshd:x:74:74:Privilege-separated
SSH:/var/empty/sshd:/sbin/nologin
scp
scp
scp
【问题2】
在windows服务管理器中启动sshd服务失败。通过win7的服务管理器查看,cygwin sshd服务确实安装上了,但是没有启动。所以,点击启动,但是启动失败。
【解决方案】
chown root empty
chown SYSTEM.None empty
启动服务
$
$
$
$
$
(或者net start sshd)
注:配置ssh中可能会出现很多问题,遇到其他问题只能继续求助搜索引擎。
二.
这边安装的是jdk-6u16。
安装完后在环境变量中添加JAVA_HOME,值为c:/java/jdk 1.6.0(这边为安装目录)。
添加变量CLASSPATH,值为%JAVA_HOME%lib;%JAVA_HOME%jrelib;%JAVA_HOME%lib ools.jar;
三.
这边下载的是hadoop-1.0.4.tar.gz
进行项目部署
把hadoop-1.0.4.tar.gz文件解压后的文件放在deploy目录下
在hadoop-1.0.4/conf中,配置hadoop配置文件
1.
修改hadoop-env.sh文件,里面有个关于JAVA_HOME的配置,默认是被注释掉的(用#号放再开头),将#删掉,并修改为本地实际的JAVA_HOME即可
export JAVA_HOME=/cygdrive/c/java/jdk1.6.0
注:如果JAVA_HOME有空格,必须用引号把这个路径引起来。
2.
拷贝hadoop-1.0.4srccorecore-default.xml文件到hadoop-1.0.4conf目录下,并重命名为core-site.xml。
* 修改临时文件存放路径
* 修改文件系统的默认名称
3.
* 修改DFS文件系统namenode存放name表的目录
*
*
4.
*
*
*
*
5.
先进入河马图样(ssh localhost), 从cygwin中进入hadoop安装目录的bin目录,执行格式化指令,具体过程如下:
cd /cygdrive/d/hadoop/deploy/hadoop-1.0.4/bin
./hadoop namenode-format
6.
执行./start-all.sh开始启动hadoop
若需要关闭hadoop了,执行./stop-all.sh即可。
【问题1】
进入hadoop的bin目录 cd/cygdrive/d/hadoop/deploy/hadoop-1.0.4/bin
执行./hadoop namenode -format 对namenode进行格式化时出现如下错误
Error: JAVA_HOME is not set.
【解决方案】
hadoop/conf/下有个hadoop-env.sh文件,里面有个关于JAVA_HOME的配置,默认是被注释掉的(用#号放再开头),将#删掉,并修改为本地实际的JAVA_HOME即可
export JAVA_HOME=/cygdrive/c/java/jdk1.6.0
注:如果JAVA_HOME有空格,必须用引号把这个路径引起来。
【问题2】
进入hadoop的bin目录 cd/cygdrive/d/hadoop/deploy/hadoop-1.0.4/bin
执行./hadoop namenode -format 对namenode进行格式化时出现如下错误
【解决方案】
1. 可能是./hadoop namenode –format中,-format跟namenode连在一起,中间隔个空格就行。因为format是一个参数
四.
这一块问题还未解决
1.
在hadoop本地文件夹data下建立一个data_in文件夹,并在此文件夹下创建两个数据文件,分别是file1.txt和file2.txt。
file1.txt中保存一个句子:hello world bye world
file2.txt中保存一个句子:hello hadoop bye hadoop
2.
进入cygwin环境
进入hadoop的bin目录:cd /cygdrive/d/hadoop/deploy/hadoop-1.0.4/bin
启动hadoop环境:./start-all.sh
在hdfs上建立input目录:./hadoop dfs –mkdir input
上传数据文件:./hadoop dfs -put /hadoop/code/data/data_in/*.txt input
查看文件是否上传成功:./hadoop dfs -ls input
(若要删除文件夹用 ./haoop dfs –rmr input)
3.
在hadoop的bin目录下执行:
./hadoop jar ./../hadoop-examples-1.0.4.jar wordcount input output
【问题】
Jobtracker没启动。
【解决方案】
查看配置文件是否正确。
查看配置文件发现java.net.URISyntaxException: Relative path in absolute URI: localhost:9001即出现了不允许出现的字符,到配置文件中检查,看是否哪里有配置错误。不然就删掉配置文件重新进行配置。
【问题】
在运行./hadoop dfs -put /hadoop/code/data/data_in/*.txt input时运行出错
查找datanode的log 发现错误
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in D:hadoopsysdata1.0.4data: namenode namespaceID = 680713889; datanode namespaceID = 1704827890
【解决方案】
这是由于namenode多次格式化,导致namenode和datanode的ID不同,需修改ID使其一致。 修改datanode的namespaceID(位于sysdata/1.0.4/data/current/VERSION中)
【问题】
卡死在 map 0% reduce 0%
查log发现遇到“Failed to set permissions of path”错误
【未解决】
网上说hadoop中存在bug,在windows系统中不能兼容文件权限操作。其他系统还未验证。
需要修改hadoop的FileUtil类中checkReturnValue函数,把其内容全部注释掉。因为其内容为文件权限检查。修改后重新编译打包jar文件得到hadoop-core-1.0.4.jar,再覆盖掉hadoop中这个文件。
但是我用eclipse重新编译这个文件,出现很多错误,现在还未解决。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12891383/viewspace-1120062/ ,如需转载,请注明出处,否则将追究法律责任。