Hadoop彻底分布式搭建

---记于2015年11月6日星期五 java

  1. 准备工做

    1. 软硬件环境

  • 主机操做系统:处理器:i5,主频:3.2G,内存:8G,Windows64
  • 虚拟机软件:VMware Workstation 10
  • 虚拟操做系统:CentOs-6.5 64位
  • JDk:1.8.0_65 64位
  • Hadoop:1.2.1
  1. 集群网络环境

集群包括3个节点,1个Namenode、2个Datanode,其中节点之间能够相互ping通。节点IP地址和主机名以下: node

 

序号linux

IP地址vim

机器名安全

类型服务器

用户名网络

ssh

192.168.1.127编辑器

Master.Hadoop 工具

Namenode

Hadoop 

192.168.1.128

Slave1.Hadoop

Datanode

Hadoop 

192.168.1.129

Slave2.Hadoop

Datanode

Hadoop 

 

全部节点均是CentOS系统,防火墙均禁用,全部节点上均建立了一个Hadoop用户,用户主目录是/home/Hadoop。全部节点上均建立了一个目录/usr/hadoop,而且拥有者是hadoop用户。由于该目录用于安装hadoop,用户对其必须有rwx权限。(通常作法是root用户下在/usr下建立hadoop目录,并修改该目录拥有者为hadoop(chown –R Hadoop: /usr/hadoop),不然经过SSH往其余机器分发Hadoop文件会出现权限不足的提示。

  1. 注意

因为Hadoop要求全部机器上Hadoop的部署目录结构要求相同(由于在启动时按与主节点相同的目录启动其它任务节点),而且都有一个相同的用户名帐户。参考各类文档上说的是全部机器都创建一个hadoop用户,使用这个帐户来实现无密码认证。这里为了方便,分别在三台机器上都从新创建一个hadoop用户。

  1. 环境搭建

    1. 操做系统安装

对于Datanode类型的系统,能够先安装一个系统,而后利用VMWare的克隆功能,克隆多个相同的系统。以下图所示。

 

 

    VMWare下安装CentOs系统的教程直接在网上找。特别注意的是:全部系统的网络选择为桥接模式,而且因为本机是在无线网络上进行上网的,故还要设置VMnet0的信息:在编辑->虚拟网络编辑器···以下图:

桥接网络是指本地物理网卡和虚拟网卡经过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位,那么物理网卡和虚拟网卡就至关于处于同一个网段,虚拟交换机就至关于一台现实网络中的交换机,因此两个网卡的IP地址也要设置为同一网段。

    在"桥接到"那一栏里选择所用的网卡类型。

  1. 本地环境配置

  1. 网络配置

采用桥接来链接网络(适合有路由、交换机用户),配置静态IP来实现上网,局域网内通讯。

vim /etc/sysconfig/network-scripts/ifcfg-eth0

 

DEVICE=eth0     #描述网卡对应的设备别名

   BOOTPROTO=static #设置网卡得到ip地址的方式,为static    

   HWADDR="00:23:54:DE:01:69"    

   ONBOOT="yes" #系统启动时是否设置此网络接口,设置为yes 

TYPE="Ethernet"    

   USERCTL=no    

   IPV6INIT=no    

   PEERDNS=yes    

   NETMASK=255.255.255.0    #网卡对应的网络掩码

   IPADDR=192.168.1.127     #只有网卡设置成static时,才须要此字段

   GATEWAY=192.168.1.1     #设置为路由器地址,通常都是这个

   DNS1=202.112.17.33 #设置为本网络对应的,或者8.8.8.8 #google域名服务器

 

本次操做的配置图以下所示:

 

 

(能够直接在Master机上设置好,而后经过scp命令将该文件传递给全部的Slave,而后在Slave中修改相应的IPADDR便可,其它不变)

注意:这里须要注意还要改一个东西,由于scp过去的硬件地址是同样的必须修改下:

第一:修改vim /etc//etc/udev/rules.d/ 70-persistent-net.rules

将其中的名为eth0的网卡删掉。同时将eth1的网卡名修改成eth0

第二:修改vim /etc/sysconfig/network-scripts/ifcfg-eth0

HWADDR修改成刚刚看见的eth1的地址。

 

  1. 配置hosts文件

"/etc/hosts"这个文件是用来配置主机将用的DNS服务器信息,是记载LAN内接续的各主机的对应[HostName IP]用的。当用户在进行网络链接时,首先查找该文件,寻找对应主机名对应的IP地址。

在进行Hadoop集群配置中,须要在"/etc/hosts"文件中添加集群中全部机器的IP与主机名,这样Master与全部的Slave机器之间不只能够经过IP进行通讯,并且还能够经过主机名进行通讯。

因此在全部的机器上的"/etc/hosts"文件中都要添加以下内容:

192.168.1.127 Master.Hadoop

192.168.1.128 Slave1.Hadoop

192.168.1.129 Slave2.Hadoop

 

(一样,能够直接在Master机上设置好,而后经过scp命令将该文件传递给全部的Slave)

  1. 操做系统设置

在Hadoop安装过程当中须要关闭防火墙和SElinux,不然会出现异常。

  1. 关闭防火墙
  • service iptables status 查看防火墙状态,以下所示表示iptables已经开启:

  • 关闭防火墙:chkconfig iptables off
  1. 关闭SElinux
  • 使用getenforce命令查看是否关闭
  • 修改/etc/selinux/config 文件

 

注意:修改后要重启系统,才能有效。

  1. SSH无密码验证配置

准备工做:

1. 在三个虚拟机上设定Hadoop用户:

adduser Hadoop #在root用户下

passwd Hadoop #输入两次密码

2. 在Hadoop用户下创建.ssh文件夹

mkdir ~/.ssh

 

Hadoop运行过程当中须要管理远端Hadoop守护进程,在Hadoop启动之后,NameNode是经过SSH(Secure Shell)来启动和中止各个DataNode上的各类守护进程的。这就必须在节点之间执行指令的时候是不须要输入密码的形式,故咱们须要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登陆并启动DataName进程,一样原理,DataNode上也能使用SSH无密码登陆到 NameNode。

SSH之因此可以保证安全,缘由在于它采用了公钥加密。过程以下:

(1)远程主机收到用户的登陆请求,把本身的公钥发给用户。

(2)用户使用这个公钥,将登陆密码加密后,发送回来。

(3)远程主机用本身的私钥,解密登陆密码,若是密码正确,就赞成用户登陆。

 

注意:若是你的Linux没有安装SSH,请首先安装SSH。

 

  1. 配置Master无密码登陆全部Salve

 

  1. 在Master节点上执行如下命令:

ssh-keygen –t rsa –P ''

 

 

运行后询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsa(私钥)和id_rsa.pub(公钥),默认存储在"/home/用户名/.ssh"目录下。

 

查看"/home/用户名/"下是否有".ssh"文件夹,且".ssh"文件下是否有两个刚生产的无密码密钥对。

 

  1. 接着在Master节点上作以下配置,把id_rsa.pub追加到受权的key里面去。

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

 

 

查看".ssh"文件夹:

 

查看下authorized_keys的权限。(很重要!)

若是权限不对则利用以下命令设置该文件的权限:

 

chmod 700 ~/.ssh #注意:这两条权限设置特别重要,决定成败。

chmod 600 ~/.ssh/authorized_keys

 

在Master机器上输入:ssh localhost 命令测试一下,看是否能无密码登陆本身。

 

  1. 将公钥发给Slave

在Master中将公钥id_rsa.pub经过scp命令发到每个Slave的同一个地方(即/home/Hadoop/.ssh文件夹下),而且设置权限(很是重要)

scp ~/.ssh/authorized_keys Hadoop@Slave1.Hadoop:~/.ssh/

scp ~/.ssh/authorized_keys Hadoop@Slave2.Hadoop:~/.ssh/

 

在Slave中设置权限(root用户下设置):

chown –R Hadoop:Hadoop /home/Hadoop/.ssh

chmod –R 700 /home/Hadoop/.ssh

chmod 600 /home/Hadoop/.ssh/authorized_keys

  1. 测试

在Master下输入:

ssh Slave1.Hadoop

若不用密码则表示成功!

 

重点:设置好权限!!!

  1. 软件安装及环境配置

如下的软件安装先在Master上安装,所有安装完后,再经过复制到Slave中便可。

  1. Java安装及其环境配置

全部的机器上都要安装JDK,而且版本要同样。如今就先在Master服务器安装,而后把安装好的文件传递给Slave便可。安装JDK以及配置环境变量,须要以"root"的身份进行。

  1. 首先用root身份登陆"Master.Hadoop"后在"/usr"下建立"java"文件夹,再将"jdk-8u25-linux-x64. gz"复制到"/usr/java"文件夹中,而后解压便可。

    tar -zxvf jdk-8u25-linux-x64. gz

 

查看"/usr/java"下面会发现多了一个名为"jdk1.8.0_65"文件夹,说明咱们的JDK安装结束,删除安装包便可,进入下一个"配置环境变量"环节。

  1. 配置环境变量。编辑"/etc/profile"文件,在后面添加Java的"JAVA_HOME"、"CLASSPATH"以及"PATH"内容以下:

    # set java environment

    export JAVA_HOME=/usr/java/ jdk1.8.0_65/

    export JRE_HOME=/usr/java/ jdk1.8.0_65/jre

export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$PATH

以下图所示:

 

保存并退出,执行下面命令使其配置当即生效。

source /etc/profile 或 . /etc/profile

重点说明:PATH变量要先把$JAVA_HOME放在第一位置,这样新安装的JDK能做为第一选择,不然,系统仍是以原来的JDK为选择。

  1. 验证

java –version

  1. Hadoop安装及其环境配置

  1. 首先用root用户登陆"Master.Hadoop"机器,将下载的"hadoop-1.2.1.tar.gz"复制到/usr目录下。而后进入"/usr"目录下,用下面命令把"hadoop-1.1.2.tar.gz"进行解压,并将其重命名为"hadoop",把该文件夹的读权限分配给普通用户hadoop,而后删除"hadoop-1.2.1.tar.gz"安装包。

    cd /usr

    tar –xzvf hadoop-1.2.1.tar.gz

    mv hadoop-1.2.1 hadoop

    chown –R hadoop:hadoop hadoop

    rm -rf hadoop-1.2.1.tar.gz

     

  2. 把Hadoop的安装路径添加到"/etc/profile"中。

    # set hadoop path

    export HADOOP_HOME=/usr/hadoop

    export PATH=$PATH: $HADOOP_HOME/bin

 

  1. 配置hadoop-env.sh,并确认生效

该"hadoop-env.sh"文件位于"/usr/hadoop/conf"目录下。

在文件中修改下面内容:

export JAVA_HOME=/usr/java/ jdk1.8.0_65/

(此处的JAVA_HOME跟以前Java中环境配置的同样)

 

source hadoop-env.sh

hadoop version

 

 

  1. 在/usr/hadoop目录下建立子目录

cd /usr/hadoop

mkdir tmp

mkdir hdfs

 

  1. 配置core-site.xml文件

修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS master(即namenode)的地址和端口号。

<configuration>

<property>

<name>hadoop.tmp.dir</name>

<value>/usr/hadoop/tmp</value>

(备注:请先在 /usr/hadoop 目录下创建 tmp 文件夹)

<description>A base for other temporary directories.</description>

</property>

<property>

<name>fs.default.name</name>

<value>hdfs://192.168.1.127:9000</value>

</property>

</configuration>

 

  1. 配置hdfs-site.xml文件

<configuration>

<property>

<name>dfs.replication</name>

<value>2</value>

</property>

<property>

<name>dfs.name.dir</name>

<value>/usr/local/hadoop/hdfs/name</value>

</property>

<property>

<name>dfs.data.dir</name>

<value>/usr/local/hadoop/hdfs/data</value>

</property>

</configuration>

 

 

  1. 配置mapred-site.xml文件

修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。

 

<configuration>

<property>

<name>mapred.job.tracker</name>

<value>http://192.168.1.127:9001</value>

</property>

</configuration>

 

 

  1. 配置masters文件

有两种方案:D

 

(1)第一种

修改localhost为Master.Hadoop

(2)第二种

去掉"localhost",加入Master机器的IP:192.168.1.127

为保险起见,启用第二种,由于万一忘记配置"/etc/hosts"局域网的DNS失效,这样就会出现意想不到的错误,可是一旦IP配对,网络畅通,就能经过IP找到相应主机。

    vim /usr/hadoop/conf/masters

 

 

  1. 配置slaves文件(Master主机特有)

    与配置masters文件相似:

    vim /usr/hadoop/conf/slaves

     

  1. Slave服务器上的文件安装及配置

在Master上装完JDK以及Hadoop以及配置好环境后,进行下步工做:

  1. 将/usr/java文件夹复制到其余Slave

     

    在Master中输入:

    scp –r /usr/java root@Slave1.Hadoop :/usr/

scp –r /usr/java root@Slave2.Hadoop :/usr/

 

  1. 将/etc/profile复制到其余Slave

     

    在Master中输入:

    scp /etc/profile root@Slave1.Hadoop :/etc/

    scp /etc/profile root@Slave2.Hadoop :/etc/

     

  2. 将/usr/hadoop文件夹复制到其余Slave

     

    在Master中输入:

    scp –r /usr/hadoop root@Slave1.Hadoop :/usr/

    scp –r /usr/hadoop root@Slave2.Hadoop :/usr/

     

  3. 改变权限

    将/usr/java,/usr/hadoop的用户组改成Hadoop用户,设置权限为755

    1. 启动及验证

      1. 启动

  4. 格式化HDFS文件系统

在"Master.Hadoop"上使用普通用户hadoop进行操做。(备注:只需一次,下次启动再也不须要格式化,只需 start-all.sh)

hadoop namenode –format

 

  1. 启动hadoop

在启动前关闭集群中全部机器的防火墙,否则会出现datanode开后又自动关闭。使用下面命令启动。

start-all.sh

 

  1. 关闭hadoop

    stop-all.sh

    1. 验证测试

  2. 用"jps"命令测试

在Master上用 java自带的小工具jps查看进程。

在Slave1上用 java自带的小工具jps查看进程。

注:上两幅图表示成功!

 

  1. 用"hadoop dfsadmin -report"查看集群状态

 

  1. 经过网页查看集群

访问JobTracker:http://192.168.1.127:50030

 

访问NameNode:http://192.168.1.127:50070

  1. 所遇到的问题及解决方法

    1. 关于 Warning: $HADOOP_HOME is deprecated.

hadoop安装完以后敲入hadoop命令时,总是提示这个警告:

Warning: $HADOOP_HOME is deprecated.

解决方案一:编辑"/etc/profile"文件,去掉HADOOP_HOME的变量设定,从新输入hadoop fs命令,警告消失。

解决方案二:编辑"/etc/profile"文件,添加一个环境变量,以后警告消失:

export HADOOP_HOME_WARN_SUPPRESS=1

  1. SSH设置不成功

颇有多是由于权限设置的不对!

  1. Datanode链接不上

有多是Master和Slave的防火墙没有关掉。

相关文章
相关标签/搜索