完全分布式Hadoop集群的安装搭建和配置(4节点)

Hadoop版本:hadoop-2.5.1-x64.tar.gz

学习参考了给力星http://www.powerxing.com/install-hadoop-cluster/的两个节点的hadoop搭建过程,我用VirtualBox开了四个Ubuntu(版本15.10)虚拟机,搭建了四个节点的Hadoop分布式集群,并配置了HA,适合首次搭建的同学参考,节点设计如下:

完全分布式Hadoop集群的安装搭建和配置(4节点)_第1张图片

一、准备工作

在Master节点完成基本工作,包括配置Hadoop用户,安装配置ssh,安装配置java环境,这个阶段给力星同学写得很详细,每一步都有解释。

1、新建hadoop用户

建议安装虚拟机时使用hadoop用户名,如果不是,新增一个hadoop用户:
sudo useradd -m hadoop -s /bin/bash

hadoop用户设置密码,建议所有密码都设置为hadoop

sudo passwd hadoop
hadoop用户增加管理员权限:
sudo adduser hadoop sudo

最后注销当前用户(点击屏幕右上角的齿轮,选择注销),在登陆界面使用刚创建的 hadoop用户进行登陆。用 hadoop 用户登录后,我们先更新一下 apt,方便后续安装软件:

sudo apt-get update

安装Vim进行文本编辑:

sudo apt-get install vim

2、安装配置ssh

集群、单节点模式都需要用到 SSH 登陆(类似于远程登陆,你可以登录某台 Linux 主机,并且在上面运行命令),Ubuntu 默认已安装了 SSH client,此外还需要安装 SSH server:

sudo apt-get install openssh-server

配置ssh无密码登录的步骤我们后边再做。

3、安装配置java环境

直接通过命令安装 OpenJDK7:

sudo apt-get install openjdk-7-jre openjdk-7-jdk

安装好 OpenJDK 后,需要找到相应的安装路径,这个路径是用于配置 JAVA_HOME 环境变量的。执行如下命令:

dpkg -L openjdk-7-jdk | grep '/bin/javac'

该命令会输出一个路径,除去路径末尾的 “/bin/javac”,剩下的就是正确的路径了。如输出路径为/usr/lib/jvm/java-7-openjdk-amd64/bin/javac,则我们需要的路径为/usr/lib/jvm/java-7-openjdk-amd64。接着配置 JAVA_HOME 环境变量,为方便,我们在 ~/.bashrc 中进行设置:

vim ~/.bashrc

在文件最前面添加如下单独一行(注意 = 号前后不能有空格),将“JDK安装路径”改为上述命令得到的路径,并保存:

export JAVA_HOME=JDK安装路径

接着还需要让该环境变量生效,执行如下代码:

source ~/.bashrc    # 使变量设置生效

Linux系统中,~代表的是用户的主文件夹,即“/home/用户名这个目录,如你的用户名为hadoop,则 ~就代表 “/home/hadoop/”

4、克隆节点

我把Master节点在Virtualbox中克隆了3次,分别命名Slave1,Slave2和Slave3,网络连接方式改为桥接,在所有节点上都要做如下2件事:

修改主机名,和我们设定的节点名称对应(重启系统生效):
vim /etc/hostname

把你的所有主机名和对应的ip地址加进去(ifconfig查看本机ip)

vim /etc/hosts

所有节点都完成后,测试一下能不能ping通。

ping Slave1 -c 3   # ping Slave1节点,-c3表示只ping 3次,按Ctrl+c中断命令

5、配置ssh无密码登录

在Master节点执行:
cd ~/.ssh/                     # 若没有该目录,请先执行一次ssh localhost,然后使用exit退出
ssh-keygen -t rsa              # 会有提示,都按回车就可以
cat ./id_rsa.pub >> ./authorized_keys  # 加入授权
此时再用 ssh localhost 命令,无需输入密码就可以直接登陆了。
接着在 Master 节点将公匙传输到 Slave1 节点:

scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/

然后在Slave1节点上操作,将 ssh 公匙加入授权:

mkdir ~/.ssh       # 如果不存在该文件夹需先创建,若已存在则忽略
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub    # 用完就可以删掉了

在别的Slave节点上也要做传输和授权公钥的步骤!

这样,在 Master 节点上就可以无密码 SSH 到各个 Slave 节点了。

【scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件,类似于 cp 命令,不过 cp 只能在本机中拷贝。如果在scp传文件时报错,出现permission denied,到目标文件修改权限就行了:

sudo chown –R hadoop 路径

如果修改权限时报错:/etc/sudoers属于用户id1000应为0或没有找到有效的sudoers资源,把上述命令中的sudo去掉就行了】

二、安装配置Hadoop

1、主节点安装和配置hadoop

我使用的是2.5.1的64位版本,安装包放在了“~/下载”这个路径下,Master节点下执行:

sudo tar -zxf ~/下载/hadoop-2.6.0.tar.gz -C /usr/local    # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.6.0/ ./hadoop            # 将文件夹名改为hadoop
sudo chown -R hadoop ./hadoop       # 修改文件权限
【./为当前的路径下的文件,而/为根目录,比如我在/usr/local/hadoop路径下执行cd ./bin就是进入/usr/local/hadoop/bin/hadoop目录。Ps:cd ..是回上一层目录】
装完后要改配置文件,Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,在主节点Master上述目录下修改core-site.xml和hdfs-site.xml和slaves这三个配置文件:

vim core-site.xml
添加如下内容(myhadoop这一项是自己随便取的,叫什么都可以):


  fs.defaultFS
  hdfs://myhadoop


   ha.zookeeper.quorum
   Master:2181,Slave1:2181,Slave2:2181
 

                    hadoop.tmp.dir
                    /opt/hadoop2


然后修改另一个:
vim hdfs-site.xml

添加如下内容:


            
                    dfs.nameservices
                     myhadoop 
            

            
                    dfs.ha.namenodes. myhadoop 
                    nn1,nn2
            
            
                    dfs.namenode.rpc-address.myhadoop.nn1
                    Master:8020
            
            
                    dfs.namenode.rpc-address.myhadoop.nn2
                    Slave1:8020
            
            
                    dfs.namenode.http-address. myhadoop.nn1
                    Master:50070
            

                    dfs.namenode.http-address. myhadoop.nn2
                    Slave1:50070
            

  dfs.namenode.shared.edits.dir
  qjournal://Slave1:8485;Slave2:8485;Slave3:8485/ myhadoop 



  dfs.client.failover.proxy.provider. myhadoop 
  org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider



  dfs.ha.fencing.methods
  sshfence


  dfs.ha.fencing.ssh.private-key-files
  /home/hadoop/.ssh/id_rsa



  dfs.journalnode.edits.dir
  /opt/jn/data



   dfs.ha.automatic-failover.enabled
   true
 

最后修改这个:

vim slaves

添加如下内容(标示DataNode节点):

Slave1
Slave2
Slave3

2、把配好的hadoop传给别的节点

cd /usr/local
sudo rm -r ./hadoop/tmp     # 删除 Hadoop 临时文件
sudo rm -r ./hadoop/logs/*   # 删除日志文件
tar -zcf ~/hadoop.master.tar.gz ./hadoop     # 先压缩再复制
cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop
scp ./hadoop.master.tar.gz Slave2:/home/hadoop
scp ./hadoop.master.tar.gz Slave3:/home/hadoop

然后在所有Slave节点执行:

sudo rm -r /usr/local/hadoop    # 删掉旧的(如果存在)
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop

三、配置HA和启动

1、zookeeper

下载zookeeper包(我用的3.4.6版本)解压到/user/local并改成简单的名子zookeeper(这个过程的操作和装Hadoop包那一步是一样的),复制这个目录下的conf目录里的zoo_sample.cfg文件,重命名为zoo.cfg保存在同目录,命令如下:

cp -a zoo_sample.cfg zoo.cfg

然后修改zoo.cfg,命令如下:

vim zoo.cfg

修改dataDir后的路径为/opt/zookeeper(这是在opt目录创建一个zookeeper的文件),接着在最后添加如下三行(就是在这三个节点上配置zookeeper):

server.1=Master:2888:3888
server.2=Slave1:2888:3888
server.3=Slave2:2888:3888

然后在opt目录下创建zookeeper文件,在文件内新建一个myid文件并修改:

mkdir /opt/zookeeper
cd /opt/zookeeper/
vim myid

添加一个数字1就行,然后把zookeeper目录传到别的zk节点(即slave1和2)的相同目录(和传ssh公钥的操作相同),并修改myid.(Slave1修改为2,Slave2修改为3)

然后给zk添加Path变量(这一步各个zk节点都要做,也就是要做3次):

vim /etc/profile

添加这么一行:

export PATH=$PATH:/usr/local/zookeeper/bin

然后使之生效:

source /etc/profile

然后就能在任意目录下启动zk了(这也就是给zk添加PATH变量的原因):

zkServer.sh start

输入jps命令查看一下,有QuorumPeerMain就说明zookeeper启动成功了。

【如果防火墙没关,可能会报错,关防火墙指令:service iptables stop

2、JournalNode

可在所有Slave节点上启动journalnode:

hadoop-daemon.sh start journalnode

3、配置Hadoop的PATH路径

因为hadoop很多命令都是在安装目录下执行的,所以我们可以将 Hadoop 安装目录加入 PATH 变量中,这样就可以在任意目录中直接使用hdfs等命令了,如果还没有配置的,需要在 Master 节点上进行配置。首先执行 vim ~/.bashrc,加入一行:

export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

保存后执行 source ~/.bashrc 使配置生效。

4、主备NameNode

首次启动hadoop需要先在 Master 节点执行 NameNode 的格式化:

hdfs namenode -format       # 首次运行需要执行初始化,之后不需要

因为Slave1是备用的NameNode节点,它要复制主节点的元数据(存储在Master的/opt/hadoop2/dfs/name/current中),在复制之前,要先开启Master节点的NameNode:

hadoop-daemon.sh start namenode

然后再Slave1节点执行:

hdfs namenode -bootstrapStandby
然后Slave1可以启动NameNode了。

5、zkfc

启动前要先格式化:

hdfs zkfc -formatZK

没有error就行,然后可以把所有的都启动起来了:

start-dfs.sh

各个节点执行jps,Master节点应该有jps、NameNode、QuorumPeerMain、DFSZKFailoverConteroller四个服务,Slave1节点应该有前边4个外加DataNode和journalnode共6个,Slave2节点应该有jps、QuorumPeerMain、DataNode和journalnode四个服务,Slave3节点应该有jps、DataNode和journalnode三个服务。

【如果出现所有的datanode节点没有启动,别的正常启动的情况,把你的每个Slave节点的/opt/hadoop2/dfs/目录下的data文件删除,然后再开启试试。】

6、上传文件

hdfs dfs -mkdir -p /usr/file  #新建hdfs一个目录
hdfs dfs -put /home/hadoop/test /usr/file  #put上传
可在浏览器中查看,地址为http://Master:50070或者http://Slave1:50070

四、配置YARN

这里和给力星的配置有差别,建议用我下边的配置,不然可能会有节点掉线的情况。
找到mapred-site.xml文件(和core-site.xml文件在一个目录),添加如下内容:


   mapreduce.framework.name
   yarn
 

再找到yarn-site.xml文件(和core-site.xml文件在一个目录),添加如下内容:



   yarn.resourcemanager.hostname 
   master
 

   yarn.nodemanager.aux-services
   mapreduce_shuffle
 

    yarn.nodemanager.aux-services.mapreduce.shuffle.class 
   org.apache.hadoop.mapred.ShuffleHandler
 

你可能感兴趣的:(Hadoop)