【Hadoop】在Ubuntu系统下安装Hadoop集群安装 - 雪原那么远

时间:2024-03-04 21:30:19

【Hadoop】在Ubuntu系统下安装Hadoop集群安装

本环境使用

Ubuntu-18.04.1 64,分布式集群方式(三台虚拟机:一台namenode,俩台datanode)

OpenJDK Java 1.8.0

Hadoop 2.9.1

2018.9.30. 本随笔完结


 

  • 创建hadoop用户(三台都要)

为了操作方便,如果安装Ubuntu的时候不是“hadoop”用户,则需要增加一个名为hadoop的用户。

打开终端是 ctrl+alt+t 

Ubuntu终端窗口中,复制粘贴的快捷键需要加上 shift,即粘贴是 ctrl+shift+v

创建用户:

sudo useradd -m hadoop -s /bin/bash

设置密码,可简单设置为 hadoop,按提示输入两次密码:

sudo passwd hadoop

 hadoop 用户增加管理员权限,方便部署:

sudo adduser hadoop sudo

注销当前用户(在右上角),在登陆界面使用hadoop用户进行登陆


 

更新apt

由于Ubuntu的一些特性,需要随时更新一下apt,不然有时候软件安装不了

sudo apt-get update

后续配置文件的过程中,很多人喜欢用vi ,vim。为了图方便可以使用gedit,请将后面用到 vim 的地方改为 gedit

 

可选:

Ubuntu 安装gcc:

sudo apt-get update
sudo apt-get install gcc

 

  • 安装最新版本的Java

Hadoop 3.x.y 或更高版本只支持Java 1.8或者更高版本,Hadoop 2.x.y 支持Java 1.1 - 1.7版本。

更新软件列表

sudo apt-get update

安装openjdk-8-jdk

sudo apt-get install openjdk-8-jdk

查看Java版本,如下:

java -version

安装好 OpenJDK 后,需要找到相应的安装路径

update-alternatives --config java 

我们输出的路径为 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java

其中,绝对路径为 /usr/lib/jvm/java-8-openjdk-amd64

接着配置 JAVA_HOME 环境变量,为方便,我们在 ~/.bashrc 中进行设置

sudo vi ~/.bashrc

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

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

让该环境变量生效

source ~/.bashrc

设置好后我们来检验一下是否设置正确:

echo $JAVA_HOME     # 检验变量值
java -version
$JAVA_HOME/bin/java -version  # 与直接执行 java -version 一样

如果正确的话

第一个会输出JAVA安装路径

第二个和第三个输出的Java安装版本一致

这样,Hadoop 所需的 Java 运行环境就安装好了


 

  • 网络配置

修改主机名字

为了便于区分,可以修改各个节点的主机名

master 节点上为例:

sudo vim /etc/hostname

把里面原来的主机名字删掉,改为:

HOSTNAME=master

按照同样的方式,将剩下俩台主机分别改为:slave1 slave2


 

 

 网络配置

配置IP地址

如果使用的是虚拟机安装的系统需要注意以下几个坑:

VirtualBox中虚拟机不能互相访问

Virtualbox中Ubuntu系统桥接(Bridge)模式不能访问外网

Brige模式网卡下,Ubuntu系统的IP地址不固定

 

解决办法(一台有问题,三台都要改):

1. NAT卡保证了可以连外网,Bridge卡保证了虚拟机可以互联。所以,如果已有网卡是NAT模式,则需要在虚拟机设置中再加一个网卡,其连接方式更改网络连接方式为桥接(Bridge)模式,并保证每台主机桥接(Bridge)网卡的MAC地址不同。

 

2. 桥接(Bridge)分配的IP地址如果不固定,需要改成静态(一台有问题,三台都要改)。

输入 ifcongfig 指令(以master主机为例)。

第一个 enp0s3 为 NAT 网卡,其IP地址不是独立主机IP地址。这是我们创建的第一个网卡,为默认网卡默认路由,这就使得其他路由不能匹配到的网段都会走 enp0s3 这个网卡,即可以访问外网。

第二个 enp0s8 为 Bridge 网卡,其IP地址为:172.31.185.70

 修改静态IP地址

sudo vi /etc/network/interfaces

文本最后添加如下信息,保存退出:

auto enp0s8
iface enp0s8 inet static
address 172.31.185.70

  重启路由器

sudo /etc/init.d/networking restart

这样,我们就将一台主机的IP地址配置好了。将剩下俩台主机按照同样配置方法的ip地址改为

slave1    

172.31.185.71

slave2    

172.31.185.72

这样,我们三台主机的IP地址分别为

172.31.185.70 master
172.31.185.71 slave1
172.31.185.72 slave2

执行如下命令修改自己所用节点的IP映射

sudo vim /etc/hosts

在文末添加我们的IP地址与主机名字映射。如下图master主机所示(一般该文件中只有一个 127.0.0.1,其对应名为 localhost,如果有多余的应删除,特别是不能有 “127.0.0.1 master” 这样的记录)

按照同样的方式,将剩下俩个主机 hosts 文件都修改好。重启生效。


 

 

配置SSH无密码登陆节点

因为Ubuntu中默认没有安装SSH服务,所以我们先要执行三步使其生效(三台都要):

sudo apt-get install openssh-server  #安装服务,一路回车
sudo /etc/init.d/ssh restart  #启动服务
sudo ufw disable #关闭防火墙

执行以下命令看是否成功运行,如果成功的话,会出现俩个进程

ps -e | grep ssh

然后在master节点生成SSH公钥,公钥储存在 /home/hadoop/.ssh中

cd ~/.ssh               # 如果没有该目录,先执行一次ssh localhost
rm ./id_rsa*            # 删除之前生成的公匙(如果有)
ssh-keygen -t rsa       # 一直按回车就可以

让 master 节点可以无密码 SSH 本机,在 master 节点上执行

cat ./id_rsa.pub >> ./authorized_keys

完成后可执行 ssh master 验证一下(需要输入 yes,成功后执行 exit 返回原来的终端)

ssh master

接着在 master 节点将上公匙传输到 slave1节点,过程中需要输入 slave1 节点的密码,传输100%以后就是传过去了:

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

 

接着在 slave1节点上,把公钥加入授权

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

对 slave2 重复上面俩步,这样 master 节点就可以无密码登陆俩个 slave 节点了。

ssh slave1 #可以用来检验是否能成功登陆,exit退出

选:

Ubuntu下出现 “ ifconfig not found ”解决方案

sudo apt-get install net-tools -y  

 


 

 

  •  安装Hadoop

Hadoop 可以通过http://mirror.bit.edu.cn/apache/hadoop/common/ 或者者 http://mirrors.cnnic.cn/apache/hadoop/common/ 下载。

下载文件默认保存于于 ~/Download 路径中(中文版Ubuntu为 ~/下载 路径)。

Hadoop 我安装的是 2.9.1 版本 ( hadoop-2.9.1.tar.gz )。如果你用的不是 2.9.1 版本,接下来的指令需要更改为你目前安装的版本。

sudo tar -zxf ~/Download/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 

将 Hadoop 安装至 /usr/local/ 中

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       # 修改文件权限

输入指令查看 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:

cd /usr/local/hadoop #到Hadoop文件夹的当前路径
./bin/hadoop version #查看版本,再设置完环境变量以后,再任意目录执行 hadoop version 同样有效。

 

 

配置 Hadoop 环境变量

可以将 Hadoop 安装目录加入环境变量中,这样就可以在任意目录中使用 Hadoop 指令了。

在 master 节点,输入指令:

sudo vim ~/.bashrc

在文末添加如下代码,保存退出:

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

再使设置生效

source ~/.bashrc

 

  •  配置分布式集群环境

需要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件。

slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml

 

slaves

此文件记录的是将要作为 Datanode 节点的名字。将 slave1,slave2 主机名字加入进去,如果想让 master 节点作为 Namenode 的同时也作为 Datanode,可以保留 localhost。(我这里没有保留)

 

core-site.xml  改为如下配置:

<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>

 

hdfs-site.xml

这文件记录备份相关。dfs.replication 一般设为 3,我们有俩个 slave 节点,因此可以将 dfs.replication 的值设为 2

<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>master:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
</configuration>

 

mapred-site.xml

可能默认文件名为 mapred-site.xml.template ,此时需要重命名

mv mapred-site.xml.template mapred-site.xml

改为如下配置:

<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>

 

yarn-site.xml  改为如下配置:

<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>master</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

 

配置好以后,将 master 节点上的 /usr/local/Hadoop 文件夹复制到剩余节点上。

在 master 节点执行:

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    #发送到slave1节点,对其他salve节点也要执行这一步

在剩余 salve 节点上执行(以slave1为例):

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

 


 

  • 启动 Hadoop

首次启动 Hadoop 需要将 master 节点格式化:

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

启动

start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver

通过命令 jps 可以查看各个节点的启动进程

jps

 

master 有 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServe

slave 有 DataNode、 NodeManager

以上进程缺少任意一个都表示有错。

 

在 master 节点查看 DataNode 是否正常启动。以我为例,Live  datanodes 为 2,与 slave 数量一致,集群启动成功。

hdfs dfsadmin -report

可以通过 Web 页面看到查看 DataNode 和 NameNode 的状态:http://master:50070/

 

可选:

关闭Hadoop

cd /usr/local/hadoop
stop-all.sh

 


 

 

特别感谢:

给力星前辈写的非常好,单机和集群俩篇文章对我启发都很大。可以说我的第一个hadoop集群就是在他的博文指导下搭建好的。吃水不忘挖井人,在向前辈表示感谢的同时,特此附上原网址:

http://www.powerxing.com/install-hadoop/