您的位置:首页 > 运维架构

Hadoop学习笔记三:分布式hadoop部署

2015-01-20 20:44 453 查看
  前语:如果看官是个比较喜欢使用现成软件的,比较推荐使用quickhadoop,这个使用参照官方文档即可,是比较傻瓜式的,这里不做介绍。本文主要是针对自己部署分布式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 Hadoop00
192.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 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节点做如下内容:

[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 yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
重启SSH

[root@localhost hadoop]# service sshd restart


验证本机:

[root@localhost root]# su - hadoop
[hadoop@localhost 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.
[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后,上传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。

[root@localhost conf]# vi masters
192.168.1.112


配置slaves文件(Master主机特有)
vi slaves
将dataNode节点的机器都加进来,一条一行。一般来说,用机器名或者ip都可以,但是推荐用ip。

[root@localhost conf]# vi slaves
192.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 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: