HiJ's notebook

完全分布式Hadoop安装配置

字数统计: 2.5k阅读时长: 11 min
2019/03/29 Share

分布式系统实验1

Ubuntu虚拟机上,配置一台master,两台slave

分布式系统实验1

参考了厦门大学数据库实验室和柯延杰的文章:

Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04

Hadoop集群安装配置教程_Hadoop2.6.0_Ubuntu/CentOS

分布式lab1:Ubuntu16.04上Hadoop环境安装

很多坑,尽量排干净


环境准备

  1. VMware WorkStation 14 新版本的也可以
  2. Ubuntu 16.04 LTS
  3. Hadoop 2.7.6 (只要是2.x.x的都可以)
  4. Oracle JDK8(JAVA)

将上面的三个文件都下载好

本教程共使用三台虚拟机,其中一个作为master节点,其余两个作为slave节点。

准备工作

用VMware安装好Ubuntu系统,这里只需安装一台,其他的两台虚拟机可以通过克隆虚拟机来完成,后面会介绍。

  • 安装完成Ubuntu后,对虚拟机进行网络设置

右键虚拟机选项卡,进入‘虚拟机设置’ 点击网络适配器选项,设置为NAT模式(N)。(可能默认已经是NAT了,那就不需要改)

  • 创建hadoop用户

进入Ubuntu系统,按ctrl+alt+t打开一个终端,输入如下命令创建一个新用户:

1
sudo useradd -m hadoop -s /bin/bash
  • 设置hadoop用户的密码,按提示输入两次密码:
1
sudo passwd hadoop

为hadoop用户增加管理员权限,方便操作。

1
sudo adduser hadoop sudo
  • 用户切换,可以使用如下命令切换不同的用户,所有的操作请务必使用hadoop用户,很多坑都是因为用户权限导致的。下面没有特别说明的操作切记用hadoop用户。
1
sudo su hadoop
  • 更新apt
1
sudo apt-get update
  • 因为Ubuntu没有默认安装vim(一个编辑器),输入如下命令可以安装。
1
sudo apt-get install vim
  • 安装ssh,通过ssh公私钥,hadoop各个节点之间才可以进行无密码的进行通信。先安装ssh server。
1
sudo apt-get install openssh-server
  • 安装完成后通过如下命令测试登录本机。此时会有提示,输入yes。然后输入hadoop帐户的密码,这样就能登录本机了。
1
ssh localhost
  • 这种方式每次都需要输入密码,下面配置成无密码登录
1
2
3
4
exit		#退出刚才的ssh localhost
cd ~/.ssh/ #若没有该目录,请先执行一次ssh localhost,或者直接mkdir ~./ssh
ssh-keygen -t rsa #会有提示,一直回车就行
cat ./id_rsa.pub >> ./authorized_keys

此时再用ssh localhost,无需密码就能登录了。

安装Java环境

将下载好的JDK解压到指定目录,(以jdk-8u201-linux-x64.tar.gz为例)

  • 创建目录
1
sudo mkdir /usr/lib/jvm
  • 解压到上述目录
1
sudo tar -zxvf jdk-8u201-linux-x64.tar.gz -C /usr/lib/jvm
  • 修改环境变量配置:
1
sudo vim ~/.bashrc
  • 在文末追加如下内容(注意:如果你的jdk目录不同的话要修改成自己的)
1
2
3
4
5
#set oracle jdk environment
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_201 ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
  • 使环境变量马上生效
1
source ~/.bashrc
  • 系统注册此jdk
1
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_201/bin/java 300
  • 查看java版本,如果提示版本信息就是安装成功了
1
java -version
  • 关闭防火墙
1
sudo ufw disable

克隆虚拟机

此前的操作都是一台虚拟机上操作,下面开始多台虚拟机操作,分别命名为master,slave01,slave02。操作的时候注意区别不同的虚拟机。

接下来开始克隆两台虚拟机:

  1. 打开运行着Ubuntu的VMware
  2. 对Unbuntu关机
  3. 点击 虚拟机->管理->克隆,进入克隆向导
  4. 点击 下一步 ,克隆自:虚拟机当前状态,克隆方法:创建完整克隆
  5. 最后对虚拟机命名为slave01,选择一个保存地址(单独建一个文件夹不要覆盖到之前那台虚拟机)。
  6. 创建第二台虚拟机:重复1-5步,命名为slave02

然后将三台虚拟机依次开机(这样IP分配会有一定顺序,方便操作)。

每次打开一台虚拟机进入桌面后,注意右上角是否联网,如果没有,那么点击联网就行,然后再打开后面两台虚拟机。

修改hostname与hosts

  1. 先修改主机名(hostname),分别将三台虚拟机命名为 master slave01 slave02
1
sudo vim /etc/hostname

上面这条命令,需要分别在三台机子上操作,打开hostname文件,分别填入 master slave01 slave02 ,不要有其他的内容。保存退出。(修改后不会立刻显示先sudo su root切换到root用户,再sudo su hadoop切换到hadoop用户,hadoop@ubuntu应该分别变成了hadoop@master,hadoop@slave01,hadoop@slave02

  1. 修改hosts
  • 先查看每台虚拟机的ip地址
1
ifconfig

找到inet addr:192.168.108.132就是当前虚拟机的ip了,记录下每个虚拟机的ip(你的ip和我的会不一样,不要照着写)。

这里假设你的三台虚拟机的主机分别为

192.168.108.132 master

192.168.108.133 slave01

192.168.108.134 slave02

  • 修改hosts文件(这个操作需要再三台虚拟机上都操作一次,改为相同的内容)
1
sudo vim /etc/hosts

将文件内容改为(#后面的为ipv6暂时不需要改动):

1
2
3
4
127.0.0.1		localhost
192.168.108.132 master
192.168.108.133 slave01
192.168.108.134 slave02
  • 测试下有没有成功:互相ping一下,ping slave01 ping slave02 ping master,这三个命令可以测试是否设置正确。

安装Hadoop

  1. 以下操作在master节点上完成,用户为hadoop。

  2. 在master节点下载hadoop-2.7.6.tar.tz, 207M的那个文件,另一个是源码

    不一定要此版本,理论上只要是2.x.x版本的都可以,下面以hadoop-2.7.6为例。

  3. 在/usr/local目录下建立hadoop目录

1
sudo mkdir /usr/local/hadoop
  1. 把hadoop-2.7.6,复制到/usr/local/hadoop目录下面。
1
2
3
4
cp <path>/hadoop-2.7.6.tar.gz /usr/local/hadoop
cd /usr/local/hadoop
tar –zxvf hadoop-2.7.6.tar.gz
cd hadoop-2.7.6
  1. 在/usr/local/hadoop目录下新建tmp文件夹和hdfs文件夹
1
2
sudo mkdir /usr/local/hadoop/tmp
sudo mkdir /usr/local/hadoop/hdfs
  1. 编辑/usr/local/hadoop/hadoop-2.7.6/etc/hadoop/hadoop-env.sh文件,修改其中的export JAVA_HOME=
1
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_201
  1. /usr/local/hadoop/hadoop-2.7.6/etc/hadoop/中修改masterslaves两个文件(如果没有也没关系,输入下面的命令会自动创建)
1
sudo vim slaves

将其中的内容修改为:

slave01

slave02

1
sudo vim master

将其中的内容修改为:

master

这两个文件中不要有其他的内容。

配置Hadoop

  1. 以下操作在master节点上完成,用户为hadoop

  2. /usr/local/hadoop/hadoop-2.7.6/etc/hadoop/中修改几个文件:core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml,将其中的configurration标签的内容替换。(这里是在配置Hadoop的各种参数,例如文件的备份数量,日志的输出目录,节点的web访问端口)

  3. sudo vim core-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <configuration>
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://master:9000</value>
    </property>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>file:/usr/local/hadoop/tmp</value>
    <description>Abase for other temporary directories.</description>
    </property>
    </configuration>
  4. sudo vim hdfs-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <configuration>
    <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>master:50090</value>
    </property>
    <property>
    <name>dfs.replication</name>
    <value>3</value>
    </property>
    <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/usr/local/hadoop/hdfs/name</value>
    </property>
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/usr/local/hadoop/hdfs/data</value>
    </property>
    </configuration>
  5. sudo vim mapred-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    <property>
    <name>mapreduce.jobhistory.address</name>
    <value>master:10020</value>
    </property>
    <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>master:19888</value>
    </property>
    </configuration>
  6. sudo vim yarn-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <configuration>
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>master</value>
    </property>
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    </configuration>

分发Hadoop

以下操作在master上完成,用户为hadoop

  1. 将配置好的hadoop复制到其他两个slave节点上:
1
2
3
4
5
6
cd /usr/local
sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件
tar -zcf ~/hadoop.master.tar.gz ./hadoop # 打包压缩
cd ~
scp ./hadoop.master.tar.gz slave01:/home/hadoop #传到slave节点
scp ./hadoop.master.tar.gz slave02:/home/hadoop
  1. 为了防止奇怪的事情发生,把hadoop的owner改一下
1
sudo chown hadoop:hadoop -R /usr/local/hadoop

检查方式ls -l查看文件,是否归属于hadoop用户,而非root用户。

以下操作分别在slave01,slave02上都执行一遍。

  1. 解压文件,修改owner
1
2
sudo tar -zxf /home/hadoop/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop:hadoop /usr/local/hadoop

回到master节点

  1. 修改hadoop的PATH,首先执行vim ~/.bashrc, 在末尾加入一行:
1
export PATH=$PATH:/usr/local/hadoop/hadoop-2.7.6/bin:/usr/local/hadoop/hadoop-2.7.6/sbin
  1. 在执行下列语句,使PATH配置生效
1
source ~/.bashrc

启动

  1. 先对namenode进行格式化,因为已经添加了PATH,所以不需要CD到目录也可以直接执行。
1
2
cd /usr/local/hadoop/hadoop-2.7.6/bin	#这里面可以看到有很多命令
hadoop namenode -format #格式化namenode
1
cd /usr/local/hadoop/hadoop-2.7.6/sbin	#sbin文件里面包含了很多操作脚本
  1. 启动所有服务,在master操作:
1
2
3
start-all.sh	#启动所有服务
mr-jobhistory-daemon.sh start historyserver #启动history服务器
#如果提示没有命令那是上面的PATH没有配置好,可以在sbin文件夹下用./start-all.sh替代
  1. 在三台虚拟机上,分别用命令jps可以查看节点启动的服务。

    正确的情况应该是:

    master节点:jps,NameNode,ResourceManager,SecondaryNameNode,JobHistoryServer

    slave01节点:jps,DataNode,NodeManager

    slave02节点:jps,DataNode,NodeManager

  2. 在namenode上查看集群状态

hadoop dfsadmin -report

  1. 也可以打开http://192.168.108.32:50070查看。实际的ip地址应该为你的master节点的ip。
CATALOG
  1. 1. 环境准备
  2. 2. 准备工作
  3. 3. 安装Java环境
  4. 4. 克隆虚拟机
  5. 5. 修改hostname与hosts
  6. 6. 安装Hadoop
  7. 7. 配置Hadoop
  8. 8. 分发Hadoop
  9. 9. 启动