两台主机:
A 192.168.1.22 名字myserver1 配置为namenode
B 192.168.1.23 名字myserver2 配置为datanode
需要:
每台机子有一个单独的名字
互相可以ping通对方和自己的名字
每台机器上执行ping ,不能返回127.0.0.1,返回本机IP才可以:
ping myserver1
ping myserver2
查看和修改机器名字
#查看主机名 hostname #修改机器名字【机器重启完失效】 hostname myserver1 #修改永久生效 vi /etc/sysconfig/network HOSTNAME=myserver1
修改IP和主机映射
#查看本机IP ifconfig 192.168.1.22 #ping 主机名 ping myserver #若返回127.0.0.1,需作ip映射 vi /etc/hosts 192.168.1.22 myserver1 192.168.1.23 myserver2 ping myserver 192.168.1.22
2、两台机器添加hadoop组和账号,配免登录SSH
#两台机器上执行 groupadd hadoop useradd -g hadoop hadoop su - hadoop ssh-keygen -t rsa -P "" #将A机器上的.ssh/id_rsa.pub 复制到B机器上,在B机器上使用hadoop账号执行 #A为namenode节点,B为datanode节点,A需要免登录到B上 cat id_rsa.pub >> .ssh/authorized_keys chmod 644 .ssh/authorized_keys #在A上使用hadoop账号登录后测试ssh登上B su - hadoop ssh -p 22 192.168.1.23 如果登录成功,则配置完成
3、A配置hadoop2.3为namenode
在A主机上
创建tmp目录
mkdir tmp/hadoop
修改4个配置文件core-site.xml、mapred-site.xml、hdfs-site.xml、yarn-site.xml
<configuration> # vi etc/hadoop/core-site.xml <property> <name>hadoop.tmp.dir</name> <value>/xx/xx/tmp/hadoop</value> <description>A base for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://192.168.1.22:54310</value>本机IP:54310 </property> </configuration>
vi etc/hadoop/mapred-site.xml <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.cluster.temp.dir</name> <value>/xx/xx/tmp/hadoop/</value> </property> <property> <name>mapreduce.cluster.local.dir</name> <value>/xx/xx/tmp/hadoop/</value> </property> </configuration>
vi etc/hadoop/hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
vi etc/hadoop/yarn-site.xml <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>192.168.1.22:8031</value>本机IP:8031 </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>192.168.1.22:8030</value>本机IP:8030 </property> <property> <name>yarn.resourcemanager.address</name> <value>192.168.1.22:8032</value>本机IP:8032 </property> </configuration>
启动测试,查看日志,看是否运行成功
./bin/hadoop namenode -format
./sbin/start-hdfs.sh
运行成功后,测试端口54310是否可以连上
telnet 192.168.1.22 54310
连上测表示namenode启动成功。
关闭服务
./sbin/stop-hdfs.sh
4、配置主机B为datanode
在B主机上,解压hadoop2.3
创建tmp目录
mkdir tmp/hadoop
修改配置文件与A主机配置一样,只是resourceManager的IP要换成namenode的,即指向A主机
即
修改4个配置文件core-site.xml、mapred-site.xml、hdfs-site.xml、yarn-site.xml
<configuration> # vi etc/hadoop/core-site.xml <property> <name>hadoop.tmp.dir</name> <value>/xx/xx/tmp/hadoop</value> <description>A base for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://192.168.1.22:54310</value>namenode A主机:54310 </property> </configuration>
vi etc/hadoop/mapred-site.xml <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.cluster.temp.dir</name> <value>/xx/xx/tmp/hadoop/</value> </property> <property> <name>mapreduce.cluster.local.dir</name> <value>/xx/xx/tmp/hadoop/</value> </property> </configuration>
vi etc/hadoop/hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
vi etc/hadoop/yarn-site.xml <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>192.168.1.22:8031</value>namenode A主机:8031 </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>192.168.1.22:8030</value>namenode A主机:8030 </property> <property> <name>yarn.resourcemanager.address</name> <value>192.168.1.22:8032</value>namenode A主机:8032 </property> </configuration>
5、格式化和启动
两台主机上清空日志和测试文件
rm -fr logs/* rm -fr tmp/hadoop/*
A主机上
格式化namenode
./bin/hadoop namenode -format
A主机上启动
./sbin/start-dfs.sh; ./sbin/start-yarn.sh;
两台服务器日志是否正常,若全都正常
访问namenode的节点管理器: http://192.168.1.22:8088
可以看到两台主机
6、运行wordcount
上传一个文本文件到hdfs里,
#创建目录 ./bin/hadoop fs -mkdir input #上传文件,可以稍大点,我上传了一个900M的文件。 ./bin/hadoop fs -put ./word.txt input #执行 ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.3.0.jar wordcount input/words.txt out
访问namenode的节点管理器: http://192.168.1.22:8088查看执行状态
执行完成后,下载结果
http://192.168.1.22:50070/explorer.html
/user/hadoop/output/
删除执行结果
./bin/hadoop fs -rm -r output