Hadoop集群搭建

一、Hadoop集群简介

Hadoop的核心组件

  • Hadoop HDFS(分布式文件存储系统):解决海量数据存储
  • Hadoop YARN(集群资源管理和任务调度框架):解决资源任务调度
  • Hadoop MapReduce(分布式计算框架):解决海量数据计算

Hadoop集群包括两个集群:HDFS集群、YARN集群。两个集群逻辑上分离、通常物理上在一起。两个集群都是标准的主从架构集群。
在这里插入图片描述

  • 逻辑上分离:两个集群互相之间没有依赖、互不影响。
  • 物理上在一起:某些角色进程往往部署在同一台物理服务器上。
  • MapReduce是计算框架、代码层面的组件,没有集群之说。
    在这里插入图片描述

二、Hadoop部署方式

在这里插入图片描述

三、Hadoop源码编译

安装包、源码包下载地址:https://archive.apache.org/dist/hadoop/common/
为什么需要编译Hadoop源码?

  • 匹配不同操作系统本地库环境,Hadoop某些操作比如压缩、IO需要调用系统本地库(*.so | *.dll)
  • 修改源码、重构源码(加入Hadoop的相关依赖)

根据下载的Hadoop源码包当中BUILDING.txt文件所描述的内容,编译Hadoop需要的环境如下:
在这里插入图片描述
由图可知,编译Hadoop源码所需的环境较为复杂,此处我们使用Docker容器化技术来构建一个满足编译Hadoop的环境。好处如下:

  1. 容器内部的环境与主机的环境相互隔离,避免主机安装过多软件
  2. 容器中的环境可以反复使用,同时相应的Dockerfile文件也可以迁移到其他具有Docker的主机上进行快速搭建环境。

四、使用Docker编译Hadoop

Linux操作系统:Centos7
Hadoop版本:3.1.4
Docker版本:1.4.1及以上

安装Docker的步骤可以参考我的另一篇博客:《初识Docker》

4.1软件下载

①不编译native code和documentation

Create binary distribution without native code and without documentation:

mvn package -Pdist -DskipTests -Dtar -Dmaven.javadoc.skip=true

该情况下,仅需安装JDK 1.8,Maven 3.3 or later,ProtocolBuffer 2.5.0即可。

②编译native code和documentation

Create binary distribution with native code and with documentation:

mvn package -Pdist,native,docs -DskipTests -Dtar

除JDK 1.8,Maven 3.3 or later,ProtocolBuffer 2.5.0,还需要安装CMake 3.1 or newer,snappy。

详细内容可以参照源码包当中的BUILDING.txt文件。

以上软件根据构建要求的版本进行下载,否则将导致编译过程出错。

4.2创建Dockerfile文件

软件的版本如下:

  • JDK1.8
  • CMake-3.23.2
  • snappy-1.1.3
  • Maven-3.5.4

目录结构如图所示:
在这里插入图片描述

基于Centos7镜像,创建一个新的包含Hadoop编译所需环境的镜像。Dockerfile文件中的代码如下:

# 镜像来源(上面生成的本地镜像)
FROM centos:7

#定义变量
#定义工作目录
ARG work_dir=/export/software
#定义手动的软件所在的目录
ARG software_dir=./software

#目录挂载(将本地操作系统内的软件同步至容器中)
VOLUME ./software:$work_dir

# 定义进入容器的默认目录
WORKDIR $work_dir

# 配置 yum 源为 阿里源
# 安装编译 hadoop 所需的工具,清理安装包和缓存
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

# 复制 tar 包到镜像内
# 压缩包的名字根据个人下载的情况而定
ADD $software_dir/jdk-8u65-linux-x64.tar.gz $work_dir
ADD $software_dir/apache-maven-3.5.4-bin.tar.gz $work_dir
ADD $software_dir/cmake-3.23.2.tar.gz $work_dir
ADD $software_dir/protobuf-2.5.0.tar.gz $work_dir
ADD $software_dir/snappy-1.1.3.tar.gz $work_dir
ADD $software_dir/hadoop-3.1.4-src.tar.gz $work_dir

# 复制编辑脚本文件到镜像中
COPY ./start.sh $work_dir
COPY ./config.sh $work_dir
COPY ./compile.sh $work_dir
# # 设置脚本文件的可运行权限
RUN chmod +x $work_dir/config.sh
RUN chmod +x $work_dir/compile.sh

# 整个脚本,让他睡十年
# docker 容器想要在后台常驻,需要有一个前台常驻进程
RUN chmod +x  $work_dir/start.sh
CMD ["/usr/bin/bash","$work_dir/start.sh"]
# 每次进入容器更新其中的环境变量
ENTRYPOINT ["source","/etc/profile"]

4.3创建脚本

创建start.sh,该脚本的功能是让容器中一直存在一个线程,不至于容器启动后就自动终止。

# 一直睡眠,保证容器不会挂掉
/usr/bin/sleep 315360000

创建config.sh,该脚本文件的功能是在容器中下载相关依赖,同时编译安装上述的软件(已经挂载至容器),配置环境变量。

#!/bin/bash

# 安装编译依赖
yum install -y  gcc gcc-c++ make && \
        autoconf automake libtool curl lzo-devel zlib-devel openssl* ncurses-devel && \
        snappy snappy-devel bzip2 bzip2-devel lzo lzo-devel lzop libXtst

# 定义工作目录
work_dir="/export/software"

# 手动安装cmake
#yum卸载已安装cmake 版本低
yum erase cmake
#编译安装
cd $work_dir/cmake-3.23.2
./configure
make && make install

# 手动安装snappy
#卸载已经安装的
cd /usr/local/lib
rm -rf libsnappy*
#编译安装
cd $work_dir/snappy-1.1.3
./configure
make && make install

# 手动安装ProtocolBuffer
#编译安装
cd $work_dir/protobuf-2.5.0
./configure
make && make install

#配置工作目录
echo "work_dir=/export/software" >> /etc/profile

#配置JAVA环境
echo "export JAVA_HOME=$work_dir/jdk1.8.0_65
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
" >> /etc/profile

#配置MAVEN环境
echo "export MAVEN_HOME=$work_dir/apache-maven-3.5.4
export MAVEN_OPTS='-Xms2G -Xmx4096m'
export PATH=:$MAVEN_HOME/bin:$PATH
" >> /etc/profile

#配置CMAKE环境
echo "export CMAKE_HOME=$work_dir/cmake-3.23.2" >> /etc/profile

#更新环境变量
source /etc/profile

#查看安装结果
cmake -version
ls -lh /usr/local/lib |grep snappy
protoc --version
java -version
mvn -v

创建compile.sh,该脚本文件的功能是在搭建好环境之后,一键编译。

#版本号可以手动传参
version=${1:-3.1.4}
#定义工作目录
work_dir="/export/software"

# 进入源代码目录
cd $work_dir/hadoop-$version-src

# 开始编译
echo -e "\n\ncompile hadoop $version..."
mvn clean package -Pdist,native -DskipTests -Dtar -Dbundle.snappy -Dsnappy.lib=/usr/local/lib

# 输出结果
if [[ $? -eq 0]]; then
 echo -e "\n\ncompile hadoop $version success!\n\n"
else
 echo -e "\n\ncompile hadoop $version fail!\n\n"

4.4构建镜像、容器

使用如下命令创建镜像:

docker build -t centos7-hadoop-compiler .

结果如图所示:
在这里插入图片描述
使用如下命令以交互式的方式进入容器:

docker run -it --name hadoop-compiler 容器的id /bin/bash

结果如下图所示:
在这里插入图片描述
我们可以看到挂载至容器内部的软件已经自动解压过了。

4.5编译Hadoop

脚本的执行顺序:

  1. bash config.sh
  2. bash compile.sh

注意:如果环境变量配置出现异常,可以手动编辑/etc/profile文件,将config.sh中的环境变量配置其中,并通过source /etc/profile命令刷新。
会执行比较长的时间。。。。。。。。。。。。。。。。。大约一小时。
在这里插入图片描述
编译后的文件在:/export/software/hadoop-3.1.4-src/hadoop-dist

编译成功后,拷贝编译好的包到宿主机,要先退出当前镜像,或者新开一个shell进程。

exit
docker cp 容器id:/export/software/hadoop-3.1.4-src/hadoop-dist/hadoop-3.1.4.tar.gz /export

最后在宿主机中查看文件
在这里插入图片描述

五、Hadoop集群安装

5.1集群角色规划

角色规划的准则

  • 根据软件工作特性和服务器硬件资源情况合理分配
  • 比如依赖内存工作的NameNode是不是部署在大内存机器上?

角色规划注意事项

  • 资源上有抢夺冲突的,尽量不要部署在一起
  • 工作上需要互相配合的。尽量部署在一起
服务器运行角色
node1namenode datanode resourcemanager nodemanager
node2secondarynamenode datanode nodemanager
node3datanode nodemanager

5.2 服务器基础环境准备

主机名(所有机器)

cat /etc/hostname
#node1.localadmin
hostname
node1.localadmin

Hosts映射(所有机器)

vim /etc/hosts
# 主机ip地址 node1 hostname名称
192.168.277.151 node1 node1.localadmin
192.168.277.152 node2 node2.localadmin
192.168.277.153 node3 node3.localadmin
……

防火墙关闭(所有机器)

systemctl stop firewalld.service   #关闭防火墙
systemctl disable firewalld.service #禁止防火墙开启自启

ssh免密登录(至少需要node1打通其他所有节点)

ssh-keygen #4个回车 生成公钥、私钥 
ssh-copy-id node1、ssh-copy-id node2、ssh-copy-id node3 #

集群时间同步(所有机器)

yum -y install ntpdate 
ntpdate ntp4.aliyun.com

JDK1.8安装(所有机器)

java -version
#java version "1.8.0_65"
#Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
#Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

5.3上传安装包、解压安装包

创建统一工作目录(所有机器)

mkdir -p /export/server/    #软件安装路径
mkdir -p /export/data/      #数据存储路径
mkdir -p /export/software/  #安装包存放路径

上传、解压安装包(Node1)

hadoop-3.1.4.tar
tar -zxvf hadoop-3.1.4.tar -C /export/server/

5.4安装包目录结构

在这里插入图片描述

5.5编辑Hadoop配置文件

配置文件hadoop-env.sh

cd /export/server/hadoop-3.1.4/etc/hadoop/
vim hadoop-env.sh

# hadoop-env.sh
#配置JAVA_HOME
export JAVA_HOME=/export/server/jdk1.8.0_65
#设置用户以执行对应角色shell命令
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root 

配置文件lcore-site.xml

cd /export/server/hadoop-3.1.4/etc/hadoop/
vim core-site.xml
<!-- lcore-site.xml-->
<configuration>
    <!-- 默认文件系统的名称。通过URI中schema区分不同文件系统。-->
    <!-- file:///本地文件系统 hdfs:// hadoop分布式文件系统 gfs://。-->
    <!-- hdfs文件系统访问地址:http://nn_host:8020。-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://Node1的hostname:8020</value>
    </property>
    <!-- hadoop本地数据存储目录 format时自动生成 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/export/data/hadoop-3.1.4</value>
    </property>
    <!-- 在Web UI访问HDFS使用的用户名。-->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
    </property>
</configuration>

配置文件hdfs-site.xml

cd /export/server/hadoop-3.1.4/etc/hadoop/
vim hdfs-site.xml
<!-- hdfs-site.xml-->
<!-- 设定SNN运行主机和端口。-->
<property>
    <name>dfs.namenode.secondary.http-address</name>
        <value>Node2的hostname:9868</value>
</property>

配置文件mapred-site.xml

cd /export/server/hadoop-3.1.4/etc/hadoop/
vim mapred-site.xml
<!--mapred-site.xml-->
<!-- mr程序默认运行方式。yarn集群模式 local本地模式-->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<!-- MR App Master环境变量。-->
<property>
    <name>yarn.app.mapreduce.am.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<!-- MR MapTask环境变量。-->
<property>
        <name>mapreduce.map.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<!-- MR ReduceTask环境变量。-->
<property>
    <name>mapreduce.reduce.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

配置文件yarn-site.xml

cd /export/server/hadoop-3.1.4/etc/hadoop/
vim yarn-site.xml
<!--yarn-site.xml-->
<!-- yarn集群主角色RM运行机器。-->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>Node1的hostname</value>
</property>
<!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MR程序。-->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<!-- 每个容器请求的最小内存资源(以MB为单位)。-->
<property>
    <name>yarn.scheduler.minimum-allocation-mb</name>
    <value>512</value>
</property>
<!-- 每个容器请求的最大内存资源(以MB为单位)。-->
<property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>2048</value>
</property>
<!-- 容器虚拟内存与物理内存之间的比率。-->
<property>
    <name>yarn.nodemanager.vmem-pmem-ratio</name>
    <value>4</value>
</property>

配置文件workers

cd /export/server/hadoop-3.1.4/etc/hadoop/
vim workers

Node1的hostname
Node2的hostname
Node3的hostname
……

5.6分发同步安装包

在node1机器上将Hadoop安装包scp同步到其他机器。

 cd /export/server/
scp -r hadoop-3.1.4 root@node2:/export/server/
scp -r hadoop-3.1.4 root@node3:/export/server/
……

5.7配置Hadoop环境变量

在node1上配置Hadoop环境变量

 vim /etc/profile
export HADOOP_HOME=/export/server/hadoop-3.1.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

将修改后的环境变量同步到其他机器

scp /etc/profile root@node2:/etc/
scp /etc/profile root@node3:/etc/
……

重新加载环境变量,验证是否有效

source /etc/profile
hadoop #验证环境变量是否生效

5.8NameNode format(格式化操作)

首次启动HDFS时,必须对其进行格式化操作。
format本质上是初始化工作,进行HDFS清理和准备工作。

hdfs namenode -format

六、Hadoop集群启动

6.1手动逐个进程启停

每台机器上每次手动启动关闭一个角色进程。

#HDFS集群
hdfs --daemon start namenode|datanode|secondarynamenode
hdfs --daemon stop  namenode|datanode|secondarynamenode

#YARN集群
yarn --daemon start resourcemanager|nodemanager
yarn --daemon stop  resourcemanager|nodemanager

6.2shell脚本一键启停

在node1上,使用软件自带的shell脚本一键启动。
前提:配置好机器之间的SSH免密登录和workers文件。

#HDFS集群
start-dfs.sh 
stop-dfs.sh 

#YARN集群
start-yarn.sh
stop-yarn.sh

#Hadoop集群
start-all.sh
stop-all.sh 

启动完毕之后可以使用jps命令查看进程是否启动成功。
Hadoop Web UI页面-HDFS集群

地址:http://namenode_host:9870

注意:其中namenode_host是namenode运行所在机器的主机名或者ip,如果使用主机名访问,别忘了在Windows配置hosts。

Hadoop Web UI页面-YARN集群

地址:http://resourcemanager_host:8088

其中resourcemanager_host是resourcemanager运行所在机器的主机名或者ip,如果使用主机名访问,别忘了在Windows配置hosts。

<think>好的,用户想了解如何搭建Hadoop集群的详细步骤和配置。首先,我需要回忆之前学过的Hadoop集群搭建知识,确保步骤正确。记得Hadoop集群通常分为完全分布式模式,需要多台机器,比如hadoop102、hadoop103、hadoop104这样的命名。用户提供的引用里提到了设置这些节点,并测试SSH连接,还有上传安装包。可能这些是关键的步骤。 接下来,我应该按照逻辑分步骤讲解。首先准备环境,包括服务器、Java安装、主机名和hosts文件的配置,以及SSH免密登录的设置。这些都是搭建集群的基础。然后,安装Hadoop,解压安装包,配置环境变量。接下来是核心的配置文件修改,比如hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml以及workers文件。每个配置文件的作用需要简要说明,比如core-site.xml设置NameNode地址,hdfs-site.xml配置副本数等。 配置完成后,需要同步到其他节点,这里可以用scp命令或者rsync。然后初始化HDFS,启动集群,最后验证是否成功,比如jps查看进程,或者访问Web界面。可能用户在实际操作中会遇到问题,比如SSH连接失败,端口占用,或者配置文件错误,这些常见问题应该提及解决方案。 另外,用户的问题可能涉及到具体的配置参数,比如副本数设置成多少合适,或者资源管理器的配置,这些需要根据集群规模给出建议。比如小型集群副本数可以设为2,但生产环境通常3。还有安全模式的问题,可能需要关闭防火墙或者配置SELinux。 需要确保所有的命令和路径都是正确的,比如JAVA_HOME的路径是否正确,Hadoop的安装目录是否一致。同时,用户可能需要知道如何验证集群是否正常工作,比如运行一个测试的MapReduce作业,或者检查日志文件。 最后,生成相关问题的时候,应该围绕用户可能进一步关心的问题,比如配置参数优化、添加节点、安全配置、性能调优等。这些能帮助用户更深入理解集群管理和维护。</think>### Hadoop集群搭建步骤详解 #### 一、环境准备(3节点示例) 1. **服务器规划** - hadoop102(NameNode + DataNode) - hadoop103(ResourceManager + DataNode) - hadoop104(SecondaryNameNode + DataNode) 2. **基础配置** - 所有节点安装JDK 8+并配置环境变量: ```bash export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 ``` - 配置主机名和/etc/hosts文件: ```bash 192.168.1.102 hadoop102 192.168.1.103 hadoop103 192.168.1.104 hadoop104 ``` - 配置SSH免密登录: ```bash ssh-keygen -t rsa ssh-copy-id hadoop102 ssh-copy-id hadoop103 ssh-copy-id hadoop104 ``` #### 二、Hadoop安装与配置 1. **解压安装包** ```bash tar -zxvf hadoop-3.3.6.tar.gz -C /opt/module/ ``` 2. **配置环境变量** ```bash export HADOOP_HOME=/opt/module/hadoop-3.3.6 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin ``` 3. **修改核心配置文件** - `etc/hadoop/hadoop-env.sh`: ```bash export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 ``` - `etc/hadoop/core-site.xml`: ```xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:8020</value> </property> </configuration> ``` - `etc/hadoop/hdfs-site.xml`: ```xml <configuration> <property> <name>dfs.replication</name> <value>3</value> </property> </configuration> ``` #### 三、集群同步与启动 1. **分发配置到所有节点** ```bash scp -r /opt/module/hadoop-3.3.6 hadoop103:/opt/module/ scp -r /opt/module/hadoop-3.3.6 hadoop104:/opt/module/ ``` 2. **初始化HDFS** ```bash hdfs namenode -format ``` 3. **启动集群** ```bash start-dfs.sh # 启动HDFS start-yarn.sh # 启动YARN ``` #### 四、验证集群状态 1. **进程验证** ```bash jps # hadoop102应显示NameNode/DataNode # hadoop103应显示ResourceManager/NodeManager ``` 2. **Web界面验证** - HDFS状态:`http://hadoop102:9870` - YARN状态:`http://hadoop103:8088` #### 五、常见问题解决 1. **SSH连接失败** - 检查防火墙状态:`systemctl stop firewalld` - 验证公钥是否完整复制到`~/.ssh/authorized_keys` 2. **端口冲突** - 使用`netstat -tunlp | grep 8020`检查默认端口占用情况 3. **HDFS无法格式化** - 删除所有节点的`/tmp/hadoop-*`目录后重试[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值