视频演示:http://v.youku.com/v_show/id_XNTY4NDM3NDQ4.html
Hadoop的单击版和伪分布式版环境都好搭建(具体方法参见:hadoop单击版与伪分布式安装方法),这个全分布式还真是费了我不少时间。下面说说我的步骤:
(一)准备工作
1.准备3台装有linux的机器,具有相同的用户名(这个是必须的,我这里都是liujiacai)
三台机器的ip与主机名
192.168.6.38 master 192.168.6.21 node1 192.168.6.24 node2
2.确保所有机器在一个局域网内,并且能够相互ping同(如果不通把防火墙关闭试试)
3.配置ssh免密码登录
在master主机上输入
ssh-keygen -t rsa
之后一直按回车键即可。
然后,在集群内分配密钥
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
使用ssh-copy-id不仅可以将公钥添加到authorized_keys中去,而且也设置了正确的权限(文件夹.ssh为700,authorized_keys为600)
参考文章:http://www.thegeekstuff.com/2008/11/3-steps-to-perform-ssh-login-without-password-using-ssh-keygen-ssh-copy-id/
ssh免密码登录原理可参考:http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html
这样在master主机上ssh 192.168.6.21与ssh 192.168.6.24主机时应该就不用输入密码了
如果出现Agent admitted failure to sign using the key这个问题
解決方式 使用 ssh-add 指令将私钥 加进来
ssh-add ~/.ssh/id_rsa
4.配置hosts文件
在master上配置好通过scp命令分发即可。
hosts文件配置内容如下:
127.0.0.1 localhost 192.168.6.38 master 192.168.6.21 node1 192.168.6.24 node2
(二)修改hadoop的配置文件
1.这里我们需要修改5个文件:
conf/core-site.xml
<configuration> <property> <name>fs.default.name</name> <value>hdfs://master:9000</value> </property>
<property> <name>fs.trash.interval</name> <value>1440</value> <description>Number of minutes between trash checkpoints. If zero, the trash feature is disabled. </description> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/liujiacai/hadoop/logs</value> </property> </configuration>
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
<configuration> <property> <name>mapred.job.tracker</name> <value>master:9001</value> </property> </configuration>
masters
master
node1 node2
这样,hadoop到全分布式就配置完成了,下面运行wordcount程序,运行方法与伪分布式相同,这里不再赘述。
为了解hadoop系统的运行状态,hadoop为我们提供了基于网页的查看方式,非常方便。
1.查看Map/Reduce的运行状态:http://localhost:50030
2.查看HDFS的运行状态:http://localhost:50070
PS:
在全分布式中,各个机器的hadoop配置必须一致,我们可以在master机器上填写好相关信息,然后通过ssh相关命令把hadoop文件夹分配到各个子结点上即可。
ssh传送文件到相关命令:
1、从服务器上下载文件
scp username@serverip:/path/filename
例如scp [email protected]:/var/www/test.txt 把192.168.0.101上的/var/www/test.txt 的文件下载到当前目录
2、上传本地文件到服务器
scp /path/filename username@serverip:/path
例如scp /var/www/test.php [email protected]:/var/www/ 把本机/var/www/目录下的test.php文件上传到192.168.0.101这台服务器上的/var/www/目录中
3、从服务器下载整个目录
scp -r username@serverip:/var/www/local_dir/
例如:scp -r [email protected]:/var/www/test /var/www/
4、上传目录到服务器
scp -r local_dir username@serverip:remote_dir
例如:scp -r test [email protected]:/var/www/ 把当前目录下的test目录上传到服务器的/var/www/ 目录con