大数据集群学习(5):Hadoop的搭建与配置

51 阅读6分钟

Hadoop

Hadoop是一个由Apache基金会所开发的分布式系统基础架构, 是一个存储系统+计算框架的软件框架。主要解决海量数据存储与计算的问题,是大数据技术中的基石

一般来说,Hadoop指的是一个生态,并不只是一软件框架,涉及到Hadoop生态的还有许多软件,如zookeeper、hive、kafka、hbase等等

Hadoop解决了海量数据的存储、计算、资源调度分配等问题。

Hadoop由三大组件组成
HDFS、MR、YARN

image.png
1、HDFS:
全称:Hadoop Distribute File System
Hadoop的分布式文件系统。HDFS里由三样东西组成,NameNodeSecondaryNameNodeDataNode

image.png

NameNode:负责管理文件系统的命名空间、存储文件的元数据信息以及处理客户端的读写请求。管理和维护着整个文件系统的目录树结构,并记录了每个文件的块信息和位置。(简称NN)

SecondaryNameNode*:一个辅助组件。它的主要作用是定期合并编辑日志(Edit Log)和镜像文件(FsImage),减小NameNode启动时间和内存占用。并不是NamNode的备份。(简称2NN)

DataNode:HDFS的存储节点,存储着Block(数据块),会定期向NameNode报告自身的存储情况。

Block:一个数据块,默认大小是128MB,也就是每个数据块最大128M。

2、MR:
全称:MapReduce
Hadoop的计算系统,分为Map阶段和Reduce阶段,两个阶段分别是独立的程序,Map阶段会根据需求对文件进行拆分,拆分后在各个节点上进行计算,Reduce阶段会将计算结果进行汇总。不论是Map阶段还是Reduce阶段,计算后都是会落盘的,因此对磁盘的IO开销比较大,也就导致了MapReduce计算并不会特别快,但是适合海量数据的计算。

3、Yarn:
全称:Yet Another Resource Negotiator,意思是 另一种资源调度器
内容源自官方文档:hadoop.apache.org/docs/curren… image.png
它由两样东西成:ResourceManagerNodeManager
ResourceManager :ResourceManager 是仲裁系统中所有应用程序之间的资源的最终权威机构。
NodeManager:NodeManager 是每台机器的框架代理,负责容器,监控其资源使用情况(CPU、内存、磁盘、网络)并将其报告给 ResourceManager/Scheduler。

ResourceManager包含两个组件:SchedulerApplicationsManager

Scheduler: 负责将资源分配给各种正在运行的应用程序,这些应用程序受容量、队列等熟悉的限制。从某种意义上说,Scheduler是纯调度程序,它不对应用程序的状态执行监视或跟踪。此外,它不保证由于应用程序故障或硬件故障而重新启动失败的任务。Scheduler根据应用程序的资源需求执行其调度功能;它基于资源容器的抽象概念来实现,该容器包含内存、CPU、磁盘、网络等元素。

ApplicationsManager: 负责接受作业提交,协商第一个容器以执行特定于应用程序的 ApplicationMaster,并提供在失败时重新启动 ApplicationMaster 容器的服务。每个应用程序的 ApplicationMaster 负责与调度程序协商适当的资源容器,跟踪其状态并监视进度。

安装Hadoop集群,需要在每台机子安装和配置出以下内容: image.png

下载

(我这里下载的Hadoop3.3.1版本的)
1、下载
前往Hadoop官方网站:archive.apache.org/dist/hadoop…

image.png

配置

1、安装
下载好后,上传至/apps/hadoop目录下,解压

tar -zxvf hadoop-3.3.1.tar.gz

2、配置系统环境变量

vim /etc/profile

加入以下内容

#hadoop
export HADOOP_HOME=/apps/hadoop/hadoop-3.3.1
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
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

使环境变量生效

source /etc/profile

3、修改配置文件
hadoop的配置文件都在 hadoop-3.3.1/etc/hadoop/目录下
需要配置的文件最主要有:core-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xmlhadoop-env.shworkers

3.1、配置hadoop-env.sh
加入以下内容,配置JDK环境:

export JAVA_HOME=/apps/java/jdk1.8.0_241

3.2、配置workers
加入3台机子的名称,前提是做了映射,没做映射就要加入3台机子的IP,包括本机

3.3、配置core-site.xml
配置xml文件时,配置内容都需要加在configuration标签里
加入以下内容

    <!--用于设置Hadoop的文件系统,由URI指定-->
    <property>
        <name>fs.defaultFS</name>
        <!--用于指定namenode地址在node1机器上-->
        <value>hdfs://node1:9000</value>
    </property>
    <!--配置Hadoop的临时目录,默认/tem/hadoop-${user.name}-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/apps/hadoop/hadoop-3.3.1/tmp</value>
    </property>
    <!--hadoop http服务的静态用户-->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
    </property>

3.4、配置hdfs-site.xml
加入以下内容

    <!--2NN节点 http通信地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node3:50090</value>
    </property>
    <!--NN数据存储目录-->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/apps/hadoop/hadoop-3.3.1/tmp/dfs/name</value>
    </property>
    <!--DataNode数据存储目录-->
    <property>
        <name>dfs.datanode.name.dir</name>
        <value>file:/apps/hadoop/hadoop-3.3.1/tmp/dfs/data</value>
    </property>
    <!--启用WebHDFS服务-->
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>

3.5、配置mapred.xml
加入以下内容

 <!--指定MapReduce运行时的框架,这里指定在YARN上,默认在local-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

配置了这个后,执行mapreduce任务就可以在yarn网页上查看,同时,yarn内存的大小也影响着MR程序的运行速度

3.6、配置yarn-site.xml
加入以下内容

<!--指定YARN集群的管理者(ResourceManager)的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node1</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
        <!--是否对容器试试物理/虚拟内存限制-->
    <property>
        <name>yarn.nodemanager.pmem-check-enable</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enable</name>
        <value>false</value>
    </property>
        <!--开启日志聚集-->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
        <!--设置yarn历史服务器地址-->
    <property>
        <name>yarn.log.server.url</name>
        <value>https://node3:19888/jobhistory/logs</value>
    </property>
        <!--保存7天-->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>
        <!--环境变量,3.x版本需要-->
    <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_HOME,PATH,LANG,TZ,HADOOP_MAPERD_HOME</value>
    </property>

我这里没有对yarn内存进行配置,这个后续运MR慢的话可以配置一下,但是配置的内存大小不可超过本机内存

在node2,node3上重复执行第三步所有内容,即修改配置文件

简便方法:
将hadoop目录复制过去node2,node3

scp -r /apps/hadoop/hadoop-3.3.1/etc/hadoop root@node2:/apps/hadoop/hadoop-3.3.1/etc/
scp -r /apps/hadoop/hadoop-3.3.1/etc/hadoop root@node3:/apps/hadoop/hadoop-3.3.1/etc/

启动!

启动hdfs
在node1上启动就行了,集群会自动在node2,node3上连带启动

start-dfs.sh

启动yarn

start-yarn.sh

启动完后,可以输入jps查看进程

image.png

image.png

image.png
记得这张图吧,有对应进程的话就是启动好了 image.png

停止命令

stop-dfs.sh
stop-yarn.sh

(为了方便,我一般使用一键启动/停止命令)

start-all.sh
stop-all.sh

启动好Hadoop后,可以在登录网页验证
hadoop3.x有两个常用端口
HDFS web UI:9870 (2.x版本的默认端口是50070)
YARN web UI: 8088

浏览器输入ip:9870端口验证
image.png 这个页面可以查看hdfs的相关信息

点击这里,可以进入hdfs目录
image.png hdfs里面有文件的话这里可以查看。

查看yarn页面
浏览器输入ip:8088
若是运行了MR程序,会显示有任务出来 image.png

恭喜你,搞定了
以上过程中若有不对的地方,欢迎指出来哈😀