-
准备环境(以三台机器为例)
三台机器理想IP
master
169.254.19.4
Slave1
169.254.19.5
Slave2
169.254.19.6
-
准备三台Linux机器或虚拟机分别 创建相同的用户名,这点很重要如果用户名不一样的话后面配置ssh以后启动hadoop,hadoop利用ssh关联时默认用启动的本机的用户来试图登录,如果用户名不一样则会失败,此处我就用root用户在三台机器上分别创建hadoop用户
-
配置网络问题(针对拷贝或者克隆的Linux虚拟机):
-
启动虚拟机在setting的network配置中选NAT,如果有固定路由可以选桥接方式bridged,但不推荐
- 配置网卡:vi /etc/udev/rules.d/70persistend-net.rules 将最后一个的name改成eth0,并将这之前的网卡加"#"注释,如图:
-
配置网卡驱动:vi /etc/sysconfig/network-scripts/ifcfg-eth0 将DRIVE和NAME 改成eth0修改BOOTPORTO为static 修改IPADDR为指定ip,如169.254.19.4,修改网关GATEWAY和NETMASK为固定值如GATEWAY=169.254.19.1,NETMASK=255.255.255.0
-
修改网卡驱动配置可以通过 service network restart 来重新加载,但是修改网卡配置需要重启机器可以切换到root执行reboot或者init 6 来重启
- 配置localhost:配置localhost就相当于给一台机器取名,也相当于给一台机器的ip取别名我们分别取master和slave1和slave2,vi /etc/sysconfig/network,,将HOSTNAME修改成指定的名称,如:
- 配置hosts:hosts就相当于一个域服务器记录一些主机名和IP的对应关系,要让三台机器运行hadoop需要他们互相通信,需要分别配置好/etc/hosts,vi /etc/hosts 分别配置好IP和各自的HOSTNAME,但是第一行的127.0.0.1的localhost的配置不能去掉,如图:
-
-
配置ssh:
-
用root账户登录vi /etc/ssh/sshd_config将RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys的注释去掉,如图:
,如果使用普通用户登录执行上述vi命令则看不到任何内容
- 切换到hadoop用户,执行ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa则会在/home/hadoop/.ssh下生成id_rsa(私钥)和id_rsa.pub(公钥),执行cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 将生成的公钥追加重定向到authorized_keys中,并将公钥用scp命令传到另外的机器,执行scp ~/.ssh/id_rsa.pub hadoop@slave1:~/.ssh/id_master_rsa.pub和scp ~/.ssh/id_rsa.pub hadoop@slave2:~/.ssh/id_master_rsa.pub,给authorized_keys 赋权限,此处要点:各个节点的authorized_keys文件中都有自己和其他节点的公钥,修改.ssh目录的权限为700,authorized_keys文件的权限为644,cd ~/.ssh,chmod 644 authorized_keys,执行ssh localhost 如果不需要密码就能登录说明ssh配置成功了,另外两台机器分别执行生成私钥公钥命令,将公钥重定向追加到authorized_keys里面,并将id_rsa.pub用scp命令发送到另外两台机器上重命名为id_slave1_rsa.pub 和 id_slave2_rsa.pub,每台机器分别用追加重定向将另外两台机器发过来的公钥追加到authorized_keys 中,例如:master机器中一定有id_slave1_rsa.pub和id_slave2_rsa.pub,执行cat ~/.ssh/id_slave1_rsa.pub >> ~/.ssh/authorized_keys 和 cat ~/.ssh/id_slave2_rsa.pub >> ~/.ssh/authorized_keys,上述步骤完成后任意两台机器都拥有互相的公钥,因此都能互相无密码通信
-
-
安装JDK:登录root用户,将jdk的Linux版通过WInscp拷贝到/usr/soft,事先在/usr下执行mkdir soft,执行chmod -u+x jdk-6u25-linux-i586.bin 给软件赋执行权限,./jdk-6u25-linux-i586.bin 执行软件进行安装,安装完后配置环境变量,vi /etc/profile 加入JAVA_HOME=/usr/soft/jdk1.6.0_25
CLASS_PATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASS_PATH JAVA_HOME变量,执行source /etc/profile,执行java -version 就能看到安装好的JDK版本
-
安装hadoop用Winscp将hadoop-1.0.4.tar.gz拷贝到/usr/soft并解压,执行chown -R hadoop:hadoop soft 来将soft文件夹及其下面所有文件所属改成hadoop用户
-
-
配置hadoop环境
-
一般要配置conf目录下的core-site.xml文件,hdfs-site.xml文件mapred-site.xml文件,配置如下:
core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs:// 169.254.19.4:9000</value>
</property><property>
<name>hadoop.tmp.dir</name>
<value>/usr/soft/hadoop/tmp</value>
</property>
</configuration>hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>169.254.19.4:9001</value>
</property>
</configuration>
配置好后,通过scp命令将hadoop配置给每个机器都发一份
-
配置jdk环境变量
-
配置conf中的slaves和masters,slaves中配置的是datanode的ip,每个IP占一行masters是secondnamenode的ip, 从哪个机器启动hadoop则哪个是namenode,这里配置的是secondnamenode,本例子slaves配置如下:
169.254.19.5
169.254.19.6
Masters配置如下(这里和namenode同节点,实际生产不会这么配置):
169.254.19.4
-
在bin目录下先执行 ./hadoop namenode -format 没有问题的话执行 ./start-all.sh,hadoop就运行起来了,通过jps来查看运行状态
-
-
常见错误
IP配置问题,不能ping上:
-
可能是由于配置的网段没有和外面计算机的VMnet8保持同一网段
-
/etc/sysconfig/network-scripts/ifcfg-etho的mac地址配置不是/etc/udev/rules.d/70-persistend-net.rules中的ATTR(address),也没注释,而是无效的
Ssh配置问题:
-
可能是格台机器上 用户名不一样,注意这里登录的用户名和配置的HOSTNAME不是同一个概念注意,一般xxx@xxx 前面的表示登录的用户名,后面的表示localhost,也可以理解为一个IP很多地方这个后面的XXX用ip代替也是可行的
-
将私钥id_rsa追加到authorized_keys后面而没有将公钥id_rsa.pub追加到authorized_keys后面
-
没有将authorized_keys的权限改成600或者644
Hadoop启动出问题:
-
xml配置问题,可以从日志查看,并将错误在网上搜索,可能是slaves或者masters配置的有问题
-
没有执行./hadoop namenode -format
-
单个节点启动不了datanode进程,执行hadoop-daemon.sh start datanode 时启动后立马被stop了,此种问题可能是由于配置了单个节点的删除部署exclude文件但是没注释,应该将配置文件中的该节点注释掉或者删除,在执行hadoop-daemon.sh start datanode来解决。
-
JAVA_HOME not set 时,配置conf目录下的hadoop-env.sh中的export JAVA_HOME
-
dataNode节点启动后自动关了且报错No route to host则可能是防火墙没关闭或者hostname和/etc/hosts配置不一样
-