最近在学Hadoop,学习Hadoop第一步当然是搭建环境。因为刚开始接触Hadoop,加之对Linux命令行不熟悉。完全搭建好这个环境用了两天的时间。虽然搭建好这个环境只是第一步,但是我感觉还是收获很多,比如对Linux的操作,其中最让我头疼的是Linux权限问题。搭建过程中操作一般都是对的,因为开始用的是root用户,所以切换到普通用户老是报拒绝操作。所以我频换的切换用户进行权限更改,下次再搭建环境的时候一定要用普通用户操作,这样就少了很多不必要的麻烦。除非是Linux系统配置文件中只有root才能操作的文件。楼主的实验环境是用虚拟机虚拟出的三台主机,其中一台做为主节点(namenode)IP:192.168.30.50,两台做为从节点(datanode)IP:192.168.30.51/192.168.30.52
一、设置静态IP&修改主机名(对三台电脑都需要进行操作)
0.将三台电脑安装Linux系统
1.设置静态ip(便于机器之间的通信,防止路由器电脑重启后,ip变化,导致不能通信)
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为eth0
BOOTPROTO=static #这个修改更改为静态的
BROADCAST=192.168.0.255 #对应的子网广播地址
HWADDR=00:07:E9:05:E8:B4 #对应的网卡物理地址
#在文件最后面添加一下代码
IPADDR=192.168.80.100
NETMASK=255.255.255.0
NETWORK=192.168.0.1
里面的IPADDR地址设置你想要的,我这里是192.168.80.100。
设置好后,需要让IP地址生效,运行下面命令:
service network restart Shutting down interface
然后运行ifconfig就可以看到静态ip是否生效。
2.修改主机名(每台电脑都要修改,建议使用hadoop100,hadoop101,hadoop102,对应于ip地址最后面三位数)
vi /etc/sysconfig/network
hostname=hadoop100
重启一下网络service network restart
验证reboot -h now 立刻重启 然后hostname
3.建立hadoop运行帐号
最好不要使用root操作hadoop,root是超级管理员权限,不推荐各个机器之间使用root访问,
验证:service iptables status
Firewall is not running
关闭防火墙开机自动启动功能:
(1). 先查看 查看: chkconfig --list |grep iptables
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
(2). 关闭 chkconfig iptables off
验证:chkconfig --list |grep iptables
说明如果不关闭防火墙以后上传文件时会报异常
二、配置hosts文件(只需要对主机192.168.80.100(hadoop100)进行操作,然后通过scp命令将这些配置分发给其他电脑即可)
操作192.168.80.100机器
192.168.80.100 hadoop100
192.168.80.101 hadoop101
192.168.80.102 hadoop102
三、为hadoop账户配置ssh免密码连入
操作hadoop100,hadoop101,hadoop102机器
① ssh-keygen -t rsa会在~/.ssh/文件夹下生成id_rsa id_rsa.pub两个文件
[root@hadoop100 local]# cd /usr/local
[root@hadoop100 local]# ./jdk-6u30-linux-x64.bin解压jdk后,生成jdk1.6.0_30文件夹
export PATH=.:$JAVA_HOME/bin:$PATH
chgrp -R hadoop /usr/local/hadoop/
修改为
export JAVA_HOME=/usr/local/jdk1.6.0_30
export HADOOP_HOME=/usr/local/hadoop
export PATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop100:9000</value>#namenode的IP地址与端口
<description>change your own hostname</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
</configuration>
<property>
<name>dfs.replication</name>
<value>2</value>#表示数据备份份数
</property>
</configuration>
<property>
<name>mapred.job.tracker</name>#jobtracker的IP地址及端口
<value>hadoop100:9001</value>
<description>change your own hostname</description>
</property>
</configuration>
scp -r /etc/hosts root@hadoop102:/etc/
scp -r /usr/local/jdk1.6.0_30 root@hadoop102:/usr/local/
scp -r /etc/profile root@hadoop102:/etc/
分别验证: java -version
ping hadoop101
ping hadoop100
scp -r /usr/local/hadoop/ root@hadoop102:/usr/local/hadoop/
执行命令 hadoop namenode -format
32387 Jps
32283 JobTracker
32198 SecondaryNameNode
32021 NameNode
hadoop101和hadoop102上有
30770 TaskTracker
30866 Jps
30666 DataNode
说明运行成功,。,这时你可以运行个wordcount这个小例子体验一下、。
运行hadoop的时候两个错误
ERROR namenode.NameNode: java.io.IOException: Cannot create directory/home/hadoop/tmp
ERROR namenode.NameNode: java.io.IOException: Cannot remove current directory:/home/hadoop/tmp/hdfsconf/name/current
原因是 没有设置
/home/hadoop/tmp的权限没有设置, 将之改为:
chown –R hadoop100:hadoop100 /home/hadoop/tmp
sudo chmod -R a+w /home/hadoop/tmp
参考博客:http://www.cnblogs.com/arbitrary/p/3902780.html
http://blog.csdn.net/xumin07061133/article/details/8682424