前语:如果看官是个比较喜欢使用现成软件的,比较推荐使用,这个使用参照官方文档即可,是比较傻瓜式的,这里不做介绍。本文主要是针对自己部署分布式hadoop。
1.修改机器名
[root@localhost root]# vi /etc/sysconfig/network
将HOSTNAME=*** 一栏改成适当的名称,笔者两台机器采用HOSTNAME=Hadoop00,HOSTNAME=Hadoop01这种方式。
2.修改IP,网关,掩码等
vim /etc/sysconfig/network-scripts/ifcgf-eth0#NETMASK 网络掩码#IPADDR IP地址#GATEWAY 默认网关IP地址
按照实际情况,配置两台机器的网络信息。
3.修改hosts文件,便于通过名字发现(可以认为是本地DNS)
[root@localhost root]# vi /etc/hosts末尾添加:192.168.1.112 Hadoop00192.168.1.113 Hadoop01#IP变了,是因为回家了,家里的路由网关为192.168.1.1,所以把ip改了
每一台需要以机器名进行通讯的机器,都要在上面配置,所以一般来说,依然还是建议以IP来通讯,毕竟在有些特殊情况,机器名可能会存在失效的情况。
4.创建hadoop用户组,用户 (hadoop用户最好也建个密码)
[root@localhost root]# groupadd hadoop useradd -g hadoop -G hadoop hadoop[root@localhost root]# passwd hadoopChanging password for user hadoop.New password: BAD PASSWORD: it is based on a dictionary wordRetype new password: passwd: all authentication tokens updated successfully.
5.SSH无密码登录(需要安装有ssh和rsync服务)
重点:在nameNode中生成公私钥对,然后把公钥发送到各个dataNode
故,在Master节点做如下内容:[root@localhost root]# su - hadoop[hadoop@localhost hadoop]$ ssh-keygen -t rsa -P ''
此处,密钥文件生成的默认路径为/home/hadoop/.ssh
将id_rsa.pub追加到授权的key里面[hadoop@localhost hadoop]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
非常重要:对authorized_keys赋权,同时,以root用户修改/etc/ssh/sshd_config
[hadoop@localhost hadoop]$ chmod 600 ~/.ssh/authorized_keys
回到root用户
[hadoop@localhost hadoop]$ exit;[root@localhost hadoop]# vi /etc/ssh/sshd_config
将
#RSAAuthentication yes#PubkeyAuthentication yes#AuthorizedKeysFile .ssh/authorized_keys前面注释去掉,变成RSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys重启SSH[root@localhost hadoop]# service sshd restart
验证本机:
[root@localhost root]# su - hadoop[hadoop@localhost hadoop]$ ssh localhostThe authenticity of host 'localhost (127.0.0.1)' can't be established.RSA key fingerprint is 82:5a:c0:ab:00:be:1d:ad:92:66:29:e9:cc:81:6d:2f.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added 'localhost' (RSA) to the list of known hosts.[hadoop@localhost hadoop]$
ok,本机没问题,那就把公钥传到其他dataNode机器上
scp ~/.ssh/id_rsa.pub hadoop@192.168.1.113:~/
上面的命令是复制文件"id_rsa.pub"到服务器IP为"192.168.1.113"的用户为"hadoop"的"/home/hadoop/"下面
由于到这步依然没有无密码登录功能,故依然是需要输入密码的,用dataNode的hadoop密码登录即可[hadoop@localhost hadoop]$ scp ~/.ssh/id_rsa.pub hadoop@192.168.1.113:~/hadoop@192.168.1.113's password: id_rsa.pub 100% |************************************************************| 238 00:00 [hadoop@localhost hadoop]$
以下是对各个dataNode机器的配置,如有有多台dataNode机器的话,这里以192.168.1.113为例
[hadoop@localhost hadoop]$ mkdir ~/.ssh [hadoop@localhost hadoop]$ chmod 700 ~/.ssh [hadoop@localhost hadoop]$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys [hadoop@localhost hadoop]$ chmod 600 ~/.ssh/authorized_keys
依旧以root用户修改/etc/ssh/sshd_config,参照前面对nameNode的操作,包括重启SSH
将所有dataNode配置完后,记得删掉id_rsa.pub文件
rm -r ~/id_rsa.pub
现在,从nameNode可以无密码登录到各个dataNode了,但是dataNode登录nameNode依然需要密码,有时间可以将上面的步骤再做一遍,把各个dataNode也做成无密码
登录nameNode,练手。 步骤为: 在dataNode:
su - hadoop ssh-keygen -t rsa -P '' cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys scp ~/.ssh/id_rsa.pub hadoop@192.168.1.112:~/
在nameNode:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys rm -r ~/id_rsa.pub
6.Hadoop集群安装
以nameNode为例,其余dataNode安装方法一样。
以root用户登录nameNode后,上传官网下载的hadoop-1.2.1.tar.gz包至/home/hadoop;cp /home/hadoop/hadoop-1.2.1.tar.gz /usr #把"hadoop-1.2.1.tar.gz"复制到"/usr"目录下面cd /usr #进入"/usr"目录tar -zxvf hadoop-1.2.1.tar.gz #解压"hadoop-1.0.0.tar.gz"安装包mv hadoop-1.2.1 hadoop #将"hadoop-1.0.0"文件夹重命名"hadoop"chown -R hadoop:hadoop hadoop #将文件夹"hadoop"读权限分配给hadoop用户rm -rf hadoop-1.2.1.tar.gz #删除"hadoop-1.0.0.tar.gz"安装包
添加hadoop环境变量 修改/etc/profile文件,在末尾添加
# set hadoop path export HADOOP_HOME=/usr/hadoop export PATH=$PATH:$HADOOP_HOME/bin
重启生效: source /etc/profile(也可以参照前面jdk安装的. /etc/profile)
mkdir /usr/hadoop/tmp chown -R hadoop:hadoop tmpmkdir /usr/hadoop/data chmod 755 /usr/hadoop/data
7.配置hadoop
修改/usr/hadoop/conf目录下的hadoop-env.sh文件,末尾添加:
#set java environmentexport JAVA_HOME=/usr/java/jdk1.6.0_45
如果忘了,可以通过echo $JAVA_HOME先查看
修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS的地址和端口号:
hadoop.tmp.dir /usr/hadoop/tmp A base for other temporary directories. fs.default.name hdfs://192.168.1.112:9000
修改Hadoop中HDFS(hdfs-site.xml)的配置,配置的备份方式默认为3:
dfs.data.dir /usr/hadoop/data dfs.replication 1
修改Hadoop中MapReduce(mapred-site.xml)的配置文件,配置的是JobTracker的地址和端口:
mapred.job.tracker http://192.168.1.112:9001
配置masters文件:
vi masters一般来说,用机器名或者ip都可以,但是推荐用ip。[root@localhost conf]# vi masters 192.168.1.112
配置slaves文件(Master主机特有)
vi slaves将dataNode节点的机器都加进来,一条一行。一般来说,用机器名或者ip都可以,但是推荐用ip。[root@localhost conf]# vi slaves192.168.1.113
将以上步骤在所有dataNode机器上装一遍,slaver的不用做。也可以直接将nameNode上的/usr/hadoop直接复制到dataNode机器上,再做配置。这里采用复制:
scp -r /usr/hadoop root@192.168.1.113:/usr/
root登录dataNode机器,更改其用户组
chown -R hadoop:hadoop hadoop
给各个dataNode添加hadoop环境变量
添加hadoop环境变量修改/etc/profile文件,在末尾添加# set hadoop pathexport HADOOP_HOME=/usr/hadoopexport PATH=$PATH:$HADOOP_HOME/bin
重启生效
source /etc/profile(也可以参照前面jdk安装的. /etc/profile)8.启动验证
首先,关闭所有机器防火墙
service iptables stop
以hadoop用户登录,格式化DHFS文件系统
hadoop namenode -format(备注:只需一次,下次启动不再需要格式化,只需 start-all.sh)
有告警:
Warning: $HADOOP_HOME is deprecated.可以编辑/etc/profile,添加(所有机器都要添加)export HADOOP_HOME_WARN_SUPPRESS=1重启生效。依然有错误:
15/01/10 14:19:52 ERROR namenode.NameNode: java.io.IOException: Cannot create directory /usr/hadoop/tmp/dfs/name/current原来是tmp属于root用户组,更改tmp的所属用户组。启动:start-all.sh停止:
stop-all.sh修改dataNode,以下目录中的VERSION文件,将namespaceID=1505787769更改成与nameNode一致/usr/hadoop/tmp/dfs/name/current或者清除nameNode的tmp数据,重新format:cd ~rm -rf /usr/hadoop/tmpmkdir /usr/hadoop/tmprm -rf /tmp/hadoop*hadoop namenode -formatstart-all.sh
jps查看是否启用,发现dataNode节点没起来,查看日志:
2015-01-10 14:59:49,121 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Invalid directory in dfs.data.dir: Incorrect permission for /usr/hadoop/tmp/dfs/data, expected: rwxr-xr-x, while actual: rwxrwxr-x2015-01-10 14:59:49,121 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: All directories in dfs.data.dir are invalid.原来是权限问题:chmod 755 /usr/hadoop/tmp/dfs/data
重启hadoop