前语:如果看官是个比较喜欢使用现成软件的,比较推荐使用quickhadoop,这个使用参照官方文档即可,是比较傻瓜式的,这里不做介绍。本文主要是针对自己部署分布式hadoop。
1.修改机器名
[[email protected] 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)
[[email protected] root]# vi /etc/hosts 末尾添加: 192.168.1.112 Hadoop00 192.168.1.113 Hadoop01 #IP变了,是因为回家了,家里的路由网关为192.168.1.1,所以把ip改了
每一台需要以机器名进行通讯的机器,都要在上面配置,所以一般来说,依然还是建议以IP来通讯,毕竟在有些特殊情况,机器名可能会存在失效的情况。
4.创建hadoop用户组,用户 (hadoop用户最好也建个密码)
[[email protected] root]# groupadd hadoop useradd -g hadoop -G hadoop hadoop [[email protected] root]# passwd hadoop Changing password for user hadoop. New password: BAD PASSWORD: it is based on a dictionary word Retype new password: passwd: all authentication tokens updated successfully.
5.SSH无密码登录(需要安装有ssh和rsync服务)
重点:在nameNode中生成公私钥对,然后把公钥发送到各个dataNode
故,在Master节点做如下内容:
[[email protected] root]# su - hadoop [[email protected] hadoop]$ ssh-keygen -t rsa -P ‘‘
此处,密钥文件生成的默认路径为/home/hadoop/.ssh
将id_rsa.pub追加到授权的key里面
[[email protected] hadoop]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
非常重要:对authorized_keys赋权,同时,以root用户修改/etc/ssh/sshd_config
[[email protected] hadoop]$ chmod 600 ~/.ssh/authorized_keys
回到root用户
[[email protected] hadoop]$ exit; [[email protected] hadoop]# vi /etc/ssh/sshd_config
将
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
前面注释去掉,变成
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
重启SSH
[[email protected] hadoop]# service sshd restart
验证本机:
[[email protected] root]# su - hadoop [[email protected] hadoop]$ ssh localhost The 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)? yes Warning: Permanently added ‘localhost‘ (RSA) to the list of known hosts. [[email protected] hadoop]$
ok,本机没问题,那就把公钥传到其他dataNode机器上
scp ~/.ssh/id_rsa.pub [email protected]:~/
上面的命令是复制文件"id_rsa.pub"到服务器IP为"192.168.1.113"的用户为"hadoop"的"/home/hadoop/"下面
由于到这步依然没有无密码登录功能,故依然是需要输入密码的,用dataNode的hadoop密码登录即可
[[email protected] hadoop]$ scp ~/.ssh/id_rsa.pub [email protected]:~/ [email protected]192.168.1.113‘s password: id_rsa.pub 100% |************************************************************| 238 00:00 [[email protected] hadoop]$
以下是对各个dataNode机器的配置,如有有多台dataNode机器的话,这里以192.168.1.113为例
[[email protected] hadoop]$ mkdir ~/.ssh [[email protected] hadoop]$ chmod 700 ~/.ssh [[email protected] hadoop]$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys [[email protected] 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 [email protected]192.168.1.112:~/
在nameNode:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys rm -r ~/id_rsa.pub
6.Hadoop集群安装
以nameNode为例,其余dataNode安装方法一样。
以root用户登录nameNode后,上传http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-1.2.1/
官网下载的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 tmp mkdir /usr/hadoop/data chmod 755 /usr/hadoop/data
7.配置hadoop
修改/usr/hadoop/conf目录下的hadoop-env.sh文件,末尾添加:
#set java environment export JAVA_HOME=/usr/java/jdk1.6.0_45
如果忘了,可以通过echo $JAVA_HOME先查看
修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS的地址和端口号:
<configuration> <property> <name>hadoop.tmp.dir</name> <value>/usr/hadoop/tmp</value> <description>A base for other temporary directories.</description> </property> <!-- file system properties --> <property> <name>fs.default.name</name> <value>hdfs://192.168.1.112:9000</value> </property> </configuration>
修改Hadoop中HDFS(hdfs-site.xml)的配置,配置的备份方式默认为3:
<configuration> <property> <name>dfs.data.dir</name> <value>/usr/hadoop/data</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <configuration>
修改Hadoop中MapReduce(mapred-site.xml)的配置文件,配置的是JobTracker的地址和端口:
<configuration> <property> <name>mapred.job.tracker</name> <value>http://192.168.1.112:9001</value> </property> </configuration>
配置masters文件:
vi masters
一般来说,用机器名或者ip都可以,但是推荐用ip。
[[email protected] conf]# vi masters 192.168.1.112
配置slaves文件(Master主机特有)
vi slaves
将dataNode节点的机器都加进来,一条一行。一般来说,用机器名或者ip都可以,但是推荐用ip。
[[email protected] conf]# vi slaves 192.168.1.113
将以上步骤在所有dataNode机器上装一遍,slaver的不用做。也可以直接将nameNode上的/usr/hadoop直接复制到dataNode机器上,再做配置。这里采用复制:
scp -r /usr/hadoop [email protected]:/usr/
root登录dataNode机器,更改其用户组
chown -R hadoop:hadoop hadoop
给各个dataNode添加hadoop环境变量
添加hadoop环境变量
修改/etc/profile文件,在末尾添加
# set hadoop path export HADOOP_HOME=/usr/hadoop export 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/tmp mkdir /usr/hadoop/tmp rm -rf /tmp/hadoop* hadoop namenode -format start-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-x
2015-01-10 14:59:49,121 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: All directories in dfs.data.dir are inval
id.
原来是权限问题:
chmod 755 /usr/hadoop/tmp/dfs/data
重启hadoop