Hadoop
Hadoop是一个由Apache基金会所开发的分布式系统基础架构, 是一个存储系统+计算框架的软件框架。主要解决海量数据存储与计算的问题,是大数据技术中的基石
一般来说,Hadoop指的是一个生态,并不只是一软件框架,涉及到Hadoop生态的还有许多软件,如zookeeper、hive、kafka、hbase等等
Hadoop解决了海量数据的存储、计算、资源调度分配等问题。
Hadoop由三大组件组成
HDFS、MR、YARN
1、HDFS:
全称:Hadoop Distribute File System
Hadoop的分布式文件系统。HDFS里由三样东西组成,NameNode、SecondaryNameNode和DataNode。
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…
它由两样东西成:ResourceManager 和 NodeManager
ResourceManager :ResourceManager 是仲裁系统中所有应用程序之间的资源的最终权威机构。
NodeManager:NodeManager 是每台机器的框架代理,负责容器,监控其资源使用情况(CPU、内存、磁盘、网络)并将其报告给 ResourceManager/Scheduler。
ResourceManager包含两个组件:Scheduler 和ApplicationsManager
Scheduler: 负责将资源分配给各种正在运行的应用程序,这些应用程序受容量、队列等熟悉的限制。从某种意义上说,Scheduler是纯调度程序,它不对应用程序的状态执行监视或跟踪。此外,它不保证由于应用程序故障或硬件故障而重新启动失败的任务。Scheduler根据应用程序的资源需求执行其调度功能;它基于资源容器的抽象概念来实现,该容器包含内存、CPU、磁盘、网络等元素。
ApplicationsManager: 负责接受作业提交,协商第一个容器以执行特定于应用程序的 ApplicationMaster,并提供在失败时重新启动 ApplicationMaster 容器的服务。每个应用程序的 ApplicationMaster 负责与调度程序协商适当的资源容器,跟踪其状态并监视进度。
安装Hadoop集群,需要在每台机子安装和配置出以下内容:
下载
(我这里下载的Hadoop3.3.1版本的)
1、下载
前往Hadoop官方网站:archive.apache.org/dist/hadoop…
配置
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.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、hadoop-env.sh、workers
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查看进程
记得这张图吧,有对应进程的话就是启动好了
停止命令
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端口验证
这个页面可以查看hdfs的相关信息
点击这里,可以进入hdfs目录
hdfs里面有文件的话这里可以查看。
查看yarn页面
浏览器输入ip:8088
若是运行了MR程序,会显示有任务出来
恭喜你,搞定了
以上过程中若有不对的地方,欢迎指出来哈😀