便于hadoop伪分布式在本地进行调试,采用Cygwin来进行hadoop开发是一种比较好的方式,因此该文章将介绍hadoop在Cygwin中的使用方法。
安装Hadoop伪分布,hadoop使用了ssh协议,ssh采用标准的公钥加密来生成一对用户验证密钥---一个公钥、一个私钥,并且使用NFS在集群中共享它,公钥被本地存储在集群的每个节点上,私钥则由主节点在视图访问远程节点时发送过来,默认情况下的Cygwin没有安装ssh,所以重新运行http://www.cygwin.com/setup.exe,在Select Packages的时候,在search输入ssh,选择openssh,继续安装cgywin,直到安装成功
配置SSH服务
1、在cygwin中输入:ssh-host-config
除了Do you want to use a different name? no 其他都是yes
2、输入密码时候最好和你本身linux密码一致,这样方便记忆
这样我们就设置ssh信任机制,让两台机器能够相互通信,在相互访问的时候不需要输入密码
3、执行 cygrunsrv -S sshd 启动ssh服务
查看服务是否启动:services.msc中查看cyg ,同时还可以修改密码,注意:如果需要重新安装sshd服务,可以用cygrunsrv -R sshd
4、生成SSH Key
ssh-keygen -t rsa(密码为空,路径默认)
cp .ssh/id_rsa.pub .ssh/authorized_keys
5、检查SSH
安装hadooop
因为我们用cygwin只是用来方便调式hadoop,并不是为了在上面搭建正式的服务器,因为我们没有必要选择有bug的hadoop版本进行安装,我们选择集成中没有bug的版本.020.2下载,解压并拷贝到Cygwin下的目录(JDK也一并安装)
http://archive.apache.org/dist/hadoop/core/hadoop-0.20.2/hadoop-0.20.2.tar.gz
官方说明1.x版本有BUG,参考,BUG修复请参考:
http://en.wikisource.org/wiki/User:Fkorning/Code/Hadoop-on-Cygwin
配置环境变量(.bashrc文件追加下面内容)
export JAVA_HOME=/usr/java/jdk1.6.0_20
export PATH=/usr/java/hadoop-0.20.2/bin:$JAVA_HOME/bin:$PATH
在hadoop-0.20.2/conf/hadoop-evn.sh中追加下面内容
export JAVA_HOME=/usr/java/jdk1.6.0_20
export HADOOP_LOG_DIR=/tmp/logs
创建连接符
由于默认情况下在cygwin中,hadoop的默认文件存放在根目录的tmp文件夹下,这样对统一目录不方便,因此采用连接符(在win下的cmd中执行)
mklink /D c:\tmp c:\cygwin\tmp
执行后,重新执行:ssh localhost,使其生效
配置HADOOP运行参数
我们这次将不采用指定存储目录,采用默认的存储目录,我们看看默认情况下文件存放情况(如果我们不指定,默认的文件存储配置存放在hadoop根目录下的hadoop-0.20.2-core.jar包的xxx-default.xml文件中的)
conf/core-site.xml
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
conf/hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
conf/mapred-site.xml
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>4</value>
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>4</value>
</property>
格式化名称节点并启动集群
使用命令:hadoop namenode –format
使用命令:start-all.sh,通过jps和ps的方式查看启动进程是否启动成功,我们可以看到下面通过jps只能看到启动了JobTracker、NameNode,和我们在linux下面启动的5个进程有区别(在linux下如果没有启动5个进程,表示有进程失败,需要通过日志查看启动失败的原因),但是我们发现通过ps命令确实已经启动了5个java进程,我们通过这5个进程的pid可以在我们hadoop产生的文件中查看到底是否hadoop相关进程成功启动
执行hadoop自带例子
创建一个文件yale.txt,存放在hadoop根目录下,并添加一些内容
执行:hadoop fs -put yale.txt input/yale.txt
查看:hadoop fs -cat input/yale.txt
执行:hadoop jar hadoop-0.20.2-examples.jar wordcount input output
具体查看:
hadoop fs -cat output/p*
还可以通过web方式查看,http://localhost:50070 可以查看
|