• 【大数据折腾不息系列】(二) Hadoop 3.0 安装


    系列文章目录

    (一) VMware虚拟机和CentOS Stream安装


    目录

    前言

    一、版本选择

    二、安装过程

    1、将下载的hadoop-3.3.3.tar.gz文件上传到虚拟机上

    2、解压文件并修改权限(使用普通用户部署Hadoop)

    3、安装JDK

    4、配置环境变量

    5、部署安装

    6、YARN

    总结


    前言

    Hadoop自诞生至今已经成为了事实上的大数据标准,基于最初的Hadoop框架,有很多优秀的大数据组件被开发创造出来了,一步步形成了如今庞大的Hadoop生态。因此,对于想要接触了解大数据的人来说,学习Hadoop是必不可少的。因此,首先还是要从安装Hadoop开始。本文将尽可能以最简单的方式、最少的步骤搭建起一个可以使用的单节点伪分布式Hadoop。


    一、版本选择

    时代在进步,技术也不断在更新迭代,发展日新月异。所以在这里选择的是截至到2022年6月最新的Hadoop版本:hadoop-3.3.3。Hadoop3比Hadoop2多了很多的新功能和新特性,暂时还没有深入研究,也不是本章的主题,在这里暂不对这方面做详细说明。

    二、安装过程

    1、将下载的hadoop-3.3.3.tar.gz文件上传到虚拟机上

    关于主机和虚拟机相互之间的文件传输,我习惯是利用VMware提供的共享文件夹功能,统一通过这个共享文件夹进行文件传输,使用共享文件夹步骤如下:

    a、顶部虚拟机菜单中选择设置

     b、选择选项中的共享文件夹,选择总是启用,添加主机文件夹路径

     c、虚拟机Linux系统中映射的共享文件夹的目录为:/mnt/hgfs/VMShare

    说明:

    • 如果在虚拟机中没有这个目录,可以先执行以下命令
    vmhgfs-fuse /mnt/hgfs
    •  需要切换为root用户,或者普通用户执行命令前面加上sudo才能访问到该目录

    结果如下:

    2、解压文件并修改权限(使用普通用户部署Hadoop)

    1. tar -zxvf /mnt/hgfs/VMShare/hadoop-3.3.3.tar.gz -C /opt/ # 解压到/opt目录
    2. chown -R hzy:hzy /opt/hadoop-3.3.3 # 将目录hadoop-3.3.3及其子目录的所属用户和用户组改为hzy
    3. su - hzy # 切换到普通用户

    这里 hzy 是我创建的普通用户(备注:一般情况下可以创建一个hadoop用户用于安装部署Hadoop,这样更明确清晰,但不是必要的) 

    3、安装JDK

    Hadoop的运行需要有java环境,兼容的版本为jdk1.8,运行以下命令安装jre和jdk

    1. yum install -y java-1.8.0-openjdk.x86_64
    2. yum install -y java-1.8.0-openjdk-devel.x86_64

    4、配置环境变量

    看到网上很多是在/etc/profile这个文件中配置环境变量,虽然也能起到同样的作用,但不太建议,有看到资料说这个用来配置系统本身的环境变量等,系统升级的时候有可能会被覆盖,如果是在这个文件里配置自己的环境变量,升级后可能会丢失。虽然没遇到过这样的问题,但毕竟是用于系统本身配置的文件,能不改动就不改动。我的习惯是用root用户在/etc/profile.d/这个目录下面新建一个shell脚本,然后在这个脚本里面配置自己的环境变量,系统启动时这个目录下面的脚本都会被执行。另外,这里配置的环境变量也同样对所有用户可见。

    这里我在/etc/profile.d/目录下新建了一个文件,命名为custom.sh,在该文件中配置环境变量如下:

    1. export JAVA_HOME=/usr/lib/jvm/java
    2. export HADOOP_HOME=/opt/hadoop-3.3.3
    3. export PATH=$HADOOP_HOME/bin:$PATH

     需要注意的是,这里并没有将$JAVA_HOME/bin加入到PATH中,因为使用yum安装后,$JAVA_HOME/bin下面的二进制文件已经被链接到/usr/bin下面了,从任何地方都可以执行java命令。

    文件编辑好之后退出,执行以下命令导入环境变量:

    . /etc/profile.d/custom.sh

    在 $HADOOP_HOME/etc/hadoop/hadoop-env.sh 中设置 JAVA_HOME:

    1. # The java implementation to use. By default, this environment
    2. # variable is REQUIRED on ALL platforms except OS X!
    3. export JAVA_HOME=/usr/lib/jvm/java

    最后,验证下环境变量是否配置成功:

    5、部署安装

     默认情况下,Hadoop被配置为以非分布式模式运行,作为单个Java进程运行,这个时候已经可以使用Hadoop运行程序了。这里我们要做的是将Hadoop配置为伪分布式模式在单个节点上运行,其中每个Hadoop守护程序都在单独的Java进程中运行。

    a、修改配置文件

    在 $HADOOP_HOME/etc/hadoop/core-site.xml 中添加如下代码:

    1. <configuration>
    2. <property>
    3. <name>fs.defaultFS</name>
    4. <value>hdfs://localhost:9000</value>
    5. </property>
    6. </configuration>

     在 $HADOOP_HOME/etc/hadoop/hdfs-site.xml 中添加如下代码:

    1. <configuration>
    2. <property>
    3. <name>dfs.replication</name>
    4. <value>1</value>
    5. </property>
    6. </configuration>

    b、配置ssh免密登录

    1. ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    2. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    3. chmod 0600 ~/.ssh/authorized_keys

    c、格式化文件系统

    hdfs namenode -format

     d、启动NameNode和DataNode守护进程

    $HADOOP_HOME/sbin/start-dfs.sh

     可以看到Hadoop已经启动成功,可以在虚拟机浏览器中输入 http://localhost:9870/ 查看集群信息

    e、执行一个MapReduce作业

    1. # 创建执行MapReduce作业需要的目录,<username>替换为自己的用户名
    2. hdfs dfs -mkdir /user
    3. hdfs dfs -mkdir /user/<username>
    4. # 复制输入文件到分布式文件系统hdfs
    5. hdfs dfs -mkdir input
    6. hdfs dfs -put etc/hadoop/*.xml input
    7. # 在Hadoop目录下运行Hadoop提供的示例
    8. hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar grep input output 'dfs[a-z.]+'
    9. # 最后查看输出目录情况
    10. hdfs dfs -cat output/*

    6、YARN

    yarn是Hadoop上的一个资源调度框架,可以通过配置启动yarn让MapReduce作业运行在yarn上,即通过yarn请求资源运行作业。配置如下:

    a、配置文件

    在 $HADOOP_HOME/etc/hadoop/mapred-site.xml 中添加如下代码:

    1. <configuration>
    2. <property>
    3. <name>mapreduce.framework.name</name>
    4. <value>yarn</value>
    5. </property>
    6. <property>
    7. <!-- 通过测试,发现下面这个属性即使没有配置依然可以启动yarn,但这是官方教程中给出的配置 -->
    8. <name>mapreduce.application.classpath</name>
    9. <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
    10. </property>
    11. </configuration>

    在 $HADOOP_HOME/etc/hadoop/yarn-site.xml 中添加如下代码:

    1. <configuration>
    2. <property>
    3. <name>yarn.nodemanager.aux-services</name>
    4. <value>mapreduce_shuffle</value>
    5. </property>
    6. <property>
    7. <name>yarn.nodemanager.env-whitelist</name>
    8. <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
    9. </property>
    10. </configuration>

    这里对上述的配置文件做个说明。对于属性yarn.nodemanager.env-whitelist,官方解释为Environment variables that containers may override rather than use NodeManager's default,意思为通过该属性可以指定yarn容器可以覆盖的环境变量,而不是使用NodeManager的默认值。该属性的默认值为JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ。注意,默认值跟我们上面的配置相比,少了HADOOP_MAPRED_HOME这一环境变量。对于这一属性,我的理解是这样的:这些环境变量是Hadoop运行需要的环境变量,如果没有在环境变量白名单这一属性中指定这些环境变量,则我们需要在配置环境中显式指定这些环境变量的值(后面我们会看到一个例子);而设置了这个属性,将这些环境变量名加入到白名单之后,当yarn发现没有这些环境的时候,就会用恰当的值设置这些环境变量。所以推断,这个属性是为了让yarn可以设置这些环境变量,对其赋值(whitelist白名单的意思),没有配置该属性则没有这个权限。

    接下来我们看下是不是这么回事:

    将yarn.nodemanager.env-whitelist这个属性的配置注释掉后再启动yarn,然后执行上面的MapReduce作业,可以看到结果如下

     报错了,让我们检查<HADOOP_HOME>/etc/hadoop/mapred-site.xml中是否包含下面的配置

    1. <property>
    2. <name>yarn.app.mapreduce.am.env</name>
    3. <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
    4. </property>
    5. <property>
    6. <name>mapreduce.map.env</name>
    7. <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
    8. </property>
    9. <property>
    10. <name>mapreduce.reduce.env</name>
    11. <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
    12. </property>

     yarn.nodemanager.env-whitelist的默认值中不包含HADOOP_MAPRED_HOME,按照我们的推断,需要在配置文件中显式指定改环境变量的值,而这里的报错信息也验证了我们的推断。然后在<HADOOP_HOME>/etc/hadoop/mapred-site.xml中添加报错提示中的配置项后,则可以正常运行作业。添加的配置如下:

    1. <property>
    2. <name>mapreduce.framework.name</name>
    3. <value>yarn</value>
    4. </property>
    5. <property>
    6. <name>yarn.app.mapreduce.am.env</name>
    7. <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    8. </property>
    9. <property>
    10. <name>mapreduce.map.env</name>
    11. <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    12. </property>
    13. <property>
    14. <name>mapreduce.reduce.env</name>
    15. <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    16. </property>

    b、启动yarn

    $HADOOP_HOME/sbin/start-yarn.sh

     

     可以看到yarn的两个进程ResourceManager和NodeManager已经启动了

     可以在虚拟机浏览器中输入 http://localhost:8088/ 查看yarn的相关信息

    这时如果再提交MapReduce作业,则会提交到yarn上分配资源并执行。

     c、重新运行上面的MapReduce作业,看看有什么不同

     可以看到程序会去连接yarn的ResourceManager,并且可以通过yarn的web ui查看该作业的运行情况。

    d、最后,执行脚本停止yarn、hadoop

    1. $HADOOP_HOME/sbin/stop-yarn.sh
    2. $HADOOP_HOME/sbin/stop-dfs.sh

    总结

    以上就是在单节点上安装伪分布模式的Hadoop的过程,相对还是比较简单,用于对新版本Hadoop的尝鲜或者探索新技术新特性什么的再好不过了。当然这也是自己折腾之后,事后回顾整个过程做的记录,可能会有疏漏的地方,如果遇到什么问题麻烦留言告知,以及有什么错误的地方欢迎指正和探讨。

  • 相关阅读:
    【数据结构笔记5】-哈夫曼树
    自然语言处理(NLP)技术
    一个C++工程内存泄漏问题的排查及重现工程
    imx6ull应用程序进systemd里踩坑
    使用nginx发布tomcat站点
    ansible介绍、主机清单、临时命令的使用
    ElementUI浅尝辄止28:Dropdown 下拉菜单
    Webmin--一个用于Linux基于Web的系统管理工具
    网站运营事业如何运用数字员工保证数据的实时性
    Android T CEC AVC Feature
  • 原文地址:https://blog.csdn.net/hzhaoy/article/details/125527455