大数据 | Hadoop集群搭建(完全分布式)

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 大数据 | Hadoop集群搭建(完全分布式)

一、前言


大家好,我是初心,这篇文章是我历时三天,推翻重做两小时进行搭建的Hadoop集群(完全分布式)个人笔记和感想,收录于初心的《大数据》专栏。


在集群搭建期间我经历了各种各样的错误,困难和BUG,不过都被我收割了。成功搭建之后,为了加深对Hadoop集群环境搭建的理解,我决定推翻重做,这次重做的过程就顺利多了!终于,历时两小时,我再次搭建好了Hadoop环境,而这篇文章就是我两次搭建总结出来的方法,分享出来希望能帮助到大家。


二、配置三台虚拟机


2.1 克隆三台虚拟机


先从一台虚拟机克隆出三台虚拟机,作为搭建Hadoop完全分布式的三个节点。这里我的三个节点分别叫 hadoop102 hadoop103 hadoop104,克隆这里需要注意的地方


虚拟机要是关机状态才可以克隆

从虚拟机当前状态克隆

创建完整克隆,之后填写虚拟机名称和存放位置就好


c8b2f5ab0dba403ab140d41ab7b2fc44.png

克隆好之后,分别再修改三台虚拟机的内存如下:

  • hadoop102


79c86fa2160c47e091475770481b3513.png

  • hadoop103


84c7442422c543928b1eb62f3245f634.png

  • hadoop104


e82b3b3fe48b46fc827ad4779990e57c.png


2.2 配置克隆的虚拟机


  • 修改网络配置文件


sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33


48241dafae5145b2a6df1e493b315e00.png

  • 修改主机名
sudo vim /etc/hostname

774bfee454c945ba9f344772cad9bad3.png


  • 修改客户机内容
sudo vim /etc/hosts


59d6790d77264a63871579f8ddb35ea7.png


  • 重启reboot,在另外两台虚拟机并上将步骤再重复两次
sudo reboot


  • Windows配置IP和主机名对应

进入到这个文件夹下,修改hosts文件

C:\Windows\System32\drivers\etc


191fa1fae07c47fda98f90334ad0b0a4.png


将这个文件拖动到桌面,使用记事本打开,进行编辑后放回覆盖原文件。



995898e4e9fb43b0bf8e519d17073681.png


2.3 使用Xshell连接虚拟机


在xshell中新建一个连接,重复三次,分别用xshell连接上三台虚拟机


ef183cdca7ad46a1b22c06dc28f8b0b3.png


至此,创建三个虚拟机节点,以及使用Xshell连接虚拟机工作我们就做好了。这是搭建Hadoop集群前的准备工作,这里我的 hadoop102 hadoop103 hadoopp104 分别对应的ip为 192.168.10.102/103/104.


2.4 配置SSH免密登录


在搭建Hadoop集群之前,我们还要为三台虚拟机搭建免密登录,这是基础,否则后面会不断提示输入密码。这是一个繁琐的操作,因此配置了免密之后我们就可以省略这些步骤,节省时间。


  • 使用hadoop102登录hadoop102
ssh localhost


接下来会提示问题,输入yes就好,之后输入本机的密码,就可以连接上本机。我们登录本机的目的是在 home 目录下生成 .ssh 隐藏文件夹,以便进行下一步操作,下面退出刚才的登录。

exit


进入到ssh文件夹(centos-1是我的普通用户名,如果虚拟机只有root用户,一定要创建一个普通用户,否则找不到这个文件夹)。

cd /home/centos-1/.ssh/


  • 在ssh文件夹下生成私钥

执行下面的命令生成本机的私钥

ssh-keygen -t rsa


执行完这个命令之后,查看当前文件夹的文件,可以看到多出这两个文件


18c480de2d984861a688647851d46913.png


  • 公私钥对拷

执行下面的命令,将Hadoop102的私钥拷贝到Hadoop102 Hadoop103 Hadoop104上

ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104


最后,在Hadoop103,Hadoop104上重复上面的步骤,这样就能实现三台机器之前的相互免密登录。


思考:root用户进行免密登录需不需要输入密码?


答案是要。因为root用户下的.ssh文件夹和普通用户是不一样的,如果想要在 root 用户下还能免密登录,也要重复上面的步骤,个人认为hadoop102的root用户配置了免密就可以了,其他的两台也可以配置


注意,这里是要为Hadoop102的root用户配置hadoop102->hadoop103,hadoop102->hadoop104的免密的,否则后面使用分发脚本可能会提示没有权限,无法分发!


三、Hadoop集群准备


3.1 安装 rsync


安装同步工具rsync,这是安装xsync脚本的基础

sudo yum install -y rsync


3.2 安装xsync分发脚本


  • 查看环境变量


echo $PATH


6a8012b52fbe4441a93ecef527c998d7.png


  • 进入到在PATH中的一个目录
cd /usr/local/bin
  • 复制下面的分发脚本 xsync.sh ,再使用下面的命令创建xsync文件并粘贴,保存退出
sudo vim xsync
  • 分发脚本xsync.sh
#! /bin/bash
# 1.判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Argument!
    exit;
fi
# 2.遍历所有集群机器
for host in hadoop102 hadoop103 hadoop104
do
    echo ==================== $host ===================
    # 3.遍历所有目录,挨个发送
    for file in $@
    do
        # 4.判断文件是否存在
        if [ -e $file ]
            then
                # 5.获取父目录
                pdir=$(cd -P $(dirname $file); pwd)
                # 6.获取当前文件的名称
                fname=$(basename $file)
                ssh $host "mkdir -p $pdir"
                rsync -av $pdir/$fname $host:$pdir
            else
                echo $file does not exists!
        fi
    done
done


  • 授予可执行权限
sudo chmod 777 xsync


至此,虚拟机的任意目录就可以使用xsync命令。如果不可以使用,则证明安装失败,请仔细检查。


3.3 安装JDK和安装Hadoop


  • 进入centos操作目录
cd /opt
  • 创建JDK和Hadoop的压缩包存放目录和文件存放目录
sudo mkdir module
sudo mkdir software


在Xshell中通过Xftp文件上传工具(或者lrzsz、finalShell等),上传JDK和Hadoop的压缩包到software目录


9d85c49b0b73488894022dd762ac3a21.png


  • 解压JDK和Hadoop到module目录
tar -xzvf jdk-8u202-linux-x64.tar.gz -C /opt/module/
tar -xzvf hadoop-3.1.3.tar.gz -C /opt/module/


3.4 配置环境变量

  • 进入到/etc/profile.d文件夹
cd /etc/profile.d


  • my_env.sh文件
# JAVA_HOME
# 只需修改java_home 因人而异 是自己的jdk安装目录
export JAVA_HOME=/opt/module/jdk1.8.0_202
export PATH=$PATH:$JAVA_HOME/bin
# HADOOP_HOME
# 同理 这里只需修改Hadoop_home,是Hadoop安装目录
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
# 这里是centos-1是用户名 因人而异 改为自己的虚拟机的普通用户名或root
export HDFS_NAMENODE_USER=centos-1
export HDFS_DATANODE_USER=centos-1
export HDFS_SECONDARYNAMENODE_USER=centos-1
export YARN_RESOURCEMANAGER_USER=centos-1
export YARN_NODEMANAGER_USER=centos-1


  • 新建文件my_env.sh,将my_env.sh文件内容复制进来
sudo vim my_env.sh
  • 刷新环境变量
source /etc/profile


  • 测试环境变量是否配置成功
java
hadoop

如果输出一大片信息说明配置好了


3.5 分发


使用xsync将hadoop102的jdk、Hadoop以及环境变量分发到另外两台虚拟机上。

  • 分发JDK和Hadoop
xsync /opt/module/
  • 分发环境变量
xsync /etc/profile.d/my_env.sh


四、Hadoop集群搭建


4.1 修改配置文件


首次搭建Hadoop完全分布式,要分别修改下面四个文件,这里仅展示configuration标签内的内容。

首先进入到Hadoop的etc目录的hadoop目录

cd /opt/module/hadoop-3.1.3/etc/hadoop/
vim core-site.xml


core-site.xml

<configuration>
<!--指定NameNode的地址-->
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://hadoop102:8020</value>
  <description>version of this configuration file</description>
</property>
<!-- 指定Hadoop数据的存储目录-->
<property>
  <name>hadoop.tmp.dir</name>
  <value>/opt/module/hadoop-3.1.3/data</value>
  <description>A base for other temporary directories.</description>
</property>
</configuration>
vim mapred-site.xml

mapred-site.xml

<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<property>
<name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
</configuration>


vim hdfs-site.xml

hdfs-site.xml

<configuration>
<!-- nn Web端访问地址-->
<property>
  <name>dfs.namenode.http-address</name>
  <value>hadoop102:9870</value>
  <description>
    The address and the base port where the dfs namenode web ui will listen on.
  </description>
</property>
<!-- 2nn Web端访问地址 -->
<property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>hadoop104:9868</value>
</property>
</configuration>
vim yarn-site.xml

yarn-site.xml

<configuration>
<!--指定MR走shuffle-->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
<!-- 指定ResourceManager的地址 -->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop103</value>
  </property>    
<!--环境变量的继承-->
  <property>
    <name>yarn.nodemanager.env-whitelist</name>
    <value>
JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
  </property>
</configuration>


修改完成之后,退出到hadoop目录

cd /opt/module/hadoop-3.1.3/etc


执行分发,将etc下的hadoop目录的四个配置文件同步

xsync hadoop


4.2 配置workers


进入到配置文件目录

cd /opt/module/hadoop-3.1.3/etc/hadoop/


修改workers文件,将文件内容改成三台主机名即可,之后再次分发,将修改同步。

vim workers

336cbc6cb36b41c388c4735ddd9a3a67.png

xsync /opt/module/hadoop-3.1.3/etc/hadoop/


4.3 格式化集群

在hadoop102上进行格式化

hdfs namenode -format


至此,Hadoop完全分布式(集群)就搭建好了。


4.4 启动集群


下面这张图就是我们搭建的Hadoop集群的集群规划。首先进入到hadoop目录

f9a0a2d8242f4798bb4cf1788277f134.png


cd /opt/module/hadoop-3.1.3/

在Hadoop102启动HDFS(Hadoop分布式文件系统)

sbin/start-dfs.sh


在Hadoop103启动YARN(Hadoop资源调度管理)

sbin/start-yarn.sh


使用jps命令来查看进程,验证是否和集群规划一致。


58fe934bdd29426cbba91ed88256de5b.png6efccb2e52dc4670a3e3707f9b5f1540.pngf701e93853eb42ca8093696684edd292.png


如果按照教程来,执行jps命令得到的结果和上图不一致,请仔细检查是否哪一步出现了问题,再进行下一步。


4.5 关闭集群


首先关闭YARN,再关闭HDFS,至此,Hadoop集群搭建(完全分布式搭建)成功。

sbin/stop-yarn.sh
sbin/stop-dfs.sh


五、结语


学习是一个漫长且持续渐进的过程,其中不免遇到很多困难,有时候让你头痛,让你心慌。有人选择逃避,有人选择全力以赴,希望大家的每一天都变得充实。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
zdl
|
16天前
|
消息中间件 运维 大数据
大数据实时计算产品的对比测评:实时计算Flink版 VS 自建Flink集群
本文介绍了实时计算Flink版与自建Flink集群的对比,涵盖部署成本、性能表现、易用性和企业级能力等方面。实时计算Flink版作为全托管服务,显著降低了运维成本,提供了强大的集成能力和弹性扩展,特别适合中小型团队和业务波动大的场景。文中还提出了改进建议,并探讨了与其他产品的联动可能性。总结指出,实时计算Flink版在简化运维、降低成本和提升易用性方面表现出色,是大数据实时计算的优选方案。
zdl
121 56
|
29天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
89 2
|
29天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
65 1
|
29天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
1月前
|
存储 分布式计算 负载均衡
分布式计算模型和集群计算模型的区别
【10月更文挑战第18天】分布式计算模型和集群计算模型各有特点和优势,在实际应用中需要根据具体的需求和条件选择合适的计算架构模式,以达到最佳的计算效果和性能。
57 2
|
2月前
|
分布式计算 Hadoop 大数据
大数据体系知识学习(一):PySpark和Hadoop环境的搭建与测试
这篇文章是关于大数据体系知识学习的,主要介绍了Apache Spark的基本概念、特点、组件,以及如何安装配置Java、PySpark和Hadoop环境。文章还提供了详细的安装步骤和测试代码,帮助读者搭建和测试大数据环境。
61 1
|
29天前
|
存储 监控 大数据
构建高可用性ClickHouse集群:从单节点到分布式
【10月更文挑战第26天】随着业务的不断增长,单一的数据存储解决方案可能无法满足日益增加的数据处理需求。在大数据时代,数据库的性能、可扩展性和稳定性成为企业关注的重点。ClickHouse 是一个用于联机分析处理(OLAP)的列式数据库管理系统(DBMS),以其卓越的查询性能和高吞吐量而闻名。本文将从我的个人角度出发,分享如何将单节点 ClickHouse 扩展为高可用性的分布式集群,以提升系统的稳定性和可靠性。
63 0
|
2月前
|
存储 机器学习/深度学习 分布式计算
大数据技术——解锁数据的力量,引领未来趋势
【10月更文挑战第5天】大数据技术——解锁数据的力量,引领未来趋势
|
17天前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
133 7
|
17天前
|
存储 分布式计算 大数据
大数据 优化数据读取
【11月更文挑战第4天】
32 2