01-Hadoop 安装(Linux 集群)

1、准备工作

1.1、安装java

1
2
3
4
5
6
7
8
# 下载 java 安装包
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz

# 解压
tar -zxvf jdk-8u131-linux-x64.tar.gz

# 重命名
mv jdk1.8.0_131/ jdk1.8

系统环境变量中增加 JAVA_HOMEPATH,方式有很多种,如在 ~/.bashrc 文件最后加入下面的内容

1
2
3
# vim ~/.bashrc
export JAVA_HOME=/home/fenglepeng/package/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin

使内容生效

1
source ~/.bashrc

报错:JAVA_HOME is not set and could not be found

可能是因为 JAVA_HOME 环境没配置正确,还有一种情况是即使各结点都正确地配置了JAVA_HOME,但在集群环境下还是报该错误,解决方法是显示地重新声明一遍JAVA_HOME

  1. 检查JAVA_HOME是否配置正确(伪分布式环境)

    1. 输入 java –version,查看jdk是否安装成功,未成功需要安装

      1
      2
      3
      java version "1.8.0_131"
      Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
      Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
    2. 输入 export,查看jdk环境变量是否设置成功,未成功需要配置

      1
      2
      declare -x JAVA_HOME="/home/fenglepeng/package/jdk1.8"
      declare -x LANG="en_US.UTF-8"
  2. `在集群环境下,即使各结点都正确地配置了JAVA_HOME,也会报如下错误

    1
    2
    3
    4
    5
    6
    Starting namenodes on [Master.Hadoop]
    Master.Hadoop: starting namenode, logging to /usr/local/hadoop/logs/fenglepeng26670918.out
    Slave2.Hadoop: Error: JAVA_HOME is not set and could not be found.
    Slave1.Hadoop: datanode running as process 69632. Stop it first.
    Starting secondary namenodes [Master.Hadoop]
    Master.Hadoop: starting secondarynamenode, logging to /usr/local/hadoop/logs/fenglepeng26670918.out

    解决方法:在hadoop-env.sh中,再显示地重新声明一遍JAVA_HOME

    1
    2
    3
    # hadoop-env.sh 文件
    # export JAVA_HOME=${JAVA_HOME}
    export JAVA_HOME=/home/fenglepeng/package/jdk1.8

1.2、ssh 服务

SSH是Secure Shell的缩写,SSH由客户端和服务端构成,服务端是一个守护进程,在后台运行并相应来自客户端的请求,客户端包含远程复制scp、安全文件传输sftp,远程登录slogin等运用程序。

Hadoop并没有提供SSH密码登录的形式,所以需要将所有机器配置为无密码登录。

1.2.1、安装 ssh 服务

如果没有安装ssh服务,需要使用如下命令进行安装:

1
sudo apt-get install ssh openssh-server

1.2.2、添加解析记录

在每台主机的 /etc/hosts 中添加,根据自己的实际情况添加

1
2
3
4
# vim /etc/hosts
*.*.*.1 Master.Hadoop
*.*.*.2 Slave1.Hadoop
*.*.*.3 Slave2.Hadoop

1.2.3、主机间的无密码登录

2、HADOOP 安装

2.1、环境

服务器ip:

  • 主机 master:*.*.*.1
  • 从机 slave0:*.*.*.2
  • 从机 slave1:*.*.*.3

每一个节点的安装与配置是相同的,在实际工作中,通常在master节点上完成安装和配置后,然后将安装目录复制到其他节点就可以,不需要把所有节点都配置一遍。

Hadoop的安装包括3中模式:

  1. 单机模式:只在一台机器上运行,存储采用本地文件系统,没有采用分布式文件系统HDFS。
  2. 伪分布式模式:存储采用分布式文件系统HDFS,但是HDFS的节点和数据节点都在同一节点。
  3. 分布式模式:存储采用分布式文件系统HDFS,而且HDFS的节点和数据节点位于不同机器上。

本文采用分布式模式。

2.2、安装 Hadoop

下载、解压hadoop并移动到 /usr/local/hadoop

1
2
3
4
5
6
7
8
# 下载
wget http://archive.apache.org/dist/hadoop/core/hadoop-2.8.5/hadoop-2.8.5.tar.gz
# 解压
tar -zxvf hadoop-2.8.5.tar.gz
# 移动
mv hadoop-2.8.5 /usr/local/hadoop
# 进入目录
cd /usr/local/hadoop

修改配置

所有的配置文件均在 etc/hadoop 子目录下。

  • 配置 hadoop-env.sh 中的 JAVA_HOME

    1
    2
    3
    4
    5
    cd etc/hadoop/
    vi hadoop-env.sh

    # 将 export JAVA_HOME=${JAVA_HOME}
    # 改为 export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64,这个地址是你自己的 java 地址。
  • 配置核心组件文件 core-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <configuration>
    <property>
    <name>hadoop.tmp.dir</name> // 用于保存临时文件,如果没有配置这个参数,则默认使用的临时目录为/tmp/hadoo-hadoop,这个目录在Hadoop重启后会被系统清理掉。
    <value>file:/usr/local/hadoop/tmp</value>
    <description>Abase for other temporary directories.</description>
    </property>
    <property>
    <name>fs.defaultFS</name> // 用于指定HDFS的访问地址
    <value>hdfs://Master.Hadoop:9000</value>
    </property>
    </configuration>
  • 配置文件系统 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.Hadoop: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>

    【注意】:Hadoop的运行方式是由配置文件决定的,如果想从伪分布式模式切换回单机模式,只需删除core-site.xml文件中的配置项即可

  • 配置Yarn的站点配置文件 yarn-site.xml 文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <configuration>
    <!-- Site specific YARN configuration properties -->
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    <property>
    <name>yarn.resourcemanager.address</name>
    <value>Master.Hadoop:8032</value>
    </property>
    <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>Master.Hadoop:8030</value>
    </property>
    <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>Master.Hadoop:8031</value>
    </property>
    <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>Master.Hadoop:8033</value>
    </property>
    <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>Master.Hadoop:8088</value>
    </property>
    </configuration>
  • 配置MapReduce计算框架文件 mapred-site.xml。目录里有一个 mapred-site.xml.template 文件,我们需要将其复制并改名,位置不变。

    1
    cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml

    修改如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # vim etc/hadoop/mapred-site.xml
    <configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    <property>
    <name>mapreduce.jobhistory.address</name>
    <value>Master.Hadoop:10020</value>
    </property>
    <property>
    <name>mapreduce.jobhistory.address</name>
    <value>Master.Hadoop:19888</value>
    </property>
    </configuration>
  • 配置master的slaves文件。slaves文件给出了Hadoop集群的slave节点列表,该文件十分的重要,因为启动Hadoop的时候,系统总是根据当前slaves文件中的slave节点名称列表启动集群,不在列表中的slave节点便不会被视为计算节点。修改如下

    1
    2
    3
    4
    # vi etc/hadoop/slaves

    Slave1.Hadoop
    Slave2.Hadoop

    注意:删除 slaves 文件中原来localhost那一行!

复制 master 上的 Hadoop 到 slave 节点

通过复制 master 节点上的 Hadoop,能够大大提高系统部署效率,复制命令如下:

1
2
scp -r /usr/hadoop Slave1.Hadoop:/usr/local/
scp -r /usr/hadoop Slave2.Hadoop:/usr/local/

配置 HADOOP 环境变量

最后把以下代码追加到文件 /etc/profile~/.bash_profile 的尾部:

1
2
3
# Hadoop
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin

保存退出后,执行命令 source ~/.bash_profile 命令使上述配置生效

1
2
source ~/.bash_profile
echo $HADOOP_HOME

2.3、启动 Hadoop

初始化HDFS系统

执行格式化文件系统命令:

1
hadoop namenode -format

输出如下:

1
2
3
4
5
21/03/30 14:24:49 INFO util.ExitUtil: Exiting with status 0
21/03/30 14:24:49 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at Master.Hadoop/*.*.105.64
************************************************************/

启动 dfs

进入安装主目录,执行命令:

1
2
# cd /usr/local/hadoop/sbin
# ./start-dfs.sh

输出如下

1
2
3
4
5
6
Starting namenodes on [Master.Hadoop]
Master.Hadoop: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenodefenglepeng26670918.out
Slave2.Hadoop: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-template-centos7.out
Slave1.Hadoop: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-template-centos7.out
Starting secondary namenodes [Master.Hadoop]
Master.Hadoop: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenodefenglepeng26670918.out

执行命令后,系统提示 ”Are you sure want to continue connecting(yes/no)”,输入yes,之后系统即可启动。

注意:可能会有些慢,千万不要以为卡掉了,然后强制关机,这是错误的。

如果要关闭 Hadoop 集群,可以使用命令:

1
stop-all.sh

下次启动Hadoop时,无须NameNode的初始化,只需要使用start-dfs.sh命令即可,然后接着使用start-yarn.sh启动Yarn。

实际上,Hadoop建议放弃(deprecated)使用start-all.sh和stop-all.sh一类的命令,而改用start-dfs.sh和start-yarn.sh命令。

hadoop启动的时候报错:running as process 6410. Stop it first.

这是因为你还没有正确关闭就再次启动

解决方法有两种:

  1. 进程已经在运行中了,先停止再重启,先执行stop-all.sh下,然后再执行start-all.sh,问题解决
  2. kill -9 相关pid

启动yarn

1
2
# cd /usr/local/hadoop/sbin
# ./start-yarn.sh

输出如下

1
2
3
4
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop/logs/yarn-root-resourcemanager-fenglepeng26670918.out
Slave1.Hadoop: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-template-centos7.out
Slave2.Hadoop: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-template-centos7.out

验证Hadoop集群是否启动成功

读者您可以在终端执行jps命令查看Hadoop是否启动成功。

在master节点,执行:

1
2
3
4
5
6
7
8
jps

# 输出如下;
9234 NameNode
9973 Jps
9451 SecondaryNameNode
105710 QuorumPeerMain
9711 ResourceManager

然后分别在slave节点下执行命令:

1
2
3
4
5
6
jps

# 输出如下:
71907 Jps
71778 NodeManager
71564 DataNode

随便打开 firefox 浏览器,输入http://你的ip:8088


01-Hadoop 安装(Linux 集群)
https://flepeng.github.io/Hadoop-11-安装-01-Hadoop-安装(Linux-集群)/
作者
Lepeng
发布于
2021年3月30日
许可协议