0
点赞
收藏
分享

微信扫一扫

如何学习Hadoop:糙快猛的大数据之路(利用GPT 学习)

秀儿2020 2024-07-24 阅读 13

大数据开发之Hadoop

大数据的核心工作、软件生态

大数据的核心工作解释大数据软件生态
存储妥善保存海量待处理数据Apache Hadoop HDFS、Apache HBase、Apache Kudu、云平台
计算完成海量数据的价值挖掘Apache Hadoop MapReduce、Apache Spark、Apache Flink
传输协助各个环节的数据传输fApache Kafka、Apache Pulsar、Apache Flume、Apache Sqoop

Hadoop的发展

Hadoop创始人:Doug Cutting
Hadoop起源于Apache Lucene子项目:Nutch:Nutch的设计目标是构建一个大型的全网搜索引擎。遇到瓶颈:如何解决数十亿网页的存储和索引问题
Google三篇论文

  • 《The Google file system》:谷歌分布式文件系统GFS

  • 《MapReduce: Simplified Data Processing on Large Clusters》:谷歌分布式计算框架MapReduce

  • 《Bigtable: A Distributed Storage System for Structured Data》:谷歌结构化数据存储系统

Hadoop商业发行版本

  • CDH(Cloudera’s Distribution, including Apache Hadoop) Cloudera公司出品,目前使用最多的商业版
  • HDP(Hortonworks Data Platform),Hortonworks公司出品,目前被Cloudera收购
  • 星环,国产商业版,星环公司出品,在国内政企使用较多

Hadoop的三个功能组件

  • HDFS组件:HDFS是Hadoop内的分布式存储组件。可以构建分布式文件系统用于数据存储
  • MapReduce组件:MapReduce是Hadoop内分布式计算组件。提供编程接口供用户开发分布式计算程序
  • YARN组件:YARN是Hadoop内分布式资源调度组件。可供用户整体调度大规模集群的资源使用。

一、HDFS 分布式文件系统

1、HDFS的基础架构

NameNode:主角色,负责管理HDFS整个文件系统 和 DataNode

Datanode:从角色,主要负责数据的存储,即存入数据和取出数据

SecondaryNameNode: 辅助角色,主要帮助NameNode完成元数据整理工作(打杂)

2、HDFS基础操作命令

HDFS同Linux系统一样,均是以/作为根目录的组织形式

官方文档:Apache Hadoop 3.3.4 – Overview

hdfs dfs [generic options]
# 创建文件夹
hdfs dfs -mkdir [-p] <path> ...		# -p选项的行为与Linux mkdir -p一致,它会沿着路径创建父目录。

# 查看指定目录下内容
hdfs dfs -ls [-h] [-R] [<path> ...] 	# -h 人性化显示文件size、-R 递归查看指定目录及其子目录

# 上传文件到HDFS指定目录下
hdfs dfs -put [-f] [-p] <localsrc> ... <dst>

# 查看HDFS文件内容
hdfs dfs -cat <src> ...
# 读取大文件可以使用管道符配合more
hdfs dfs -cat <src> | more

# 下载HDFS文件
hdfs dfs -get [-f] [-p] <src> ... <localdst>
# 下载文件到本地文件系统指定目录,localdst必须是目录

# 拷贝HDFS文件
hdfs dfs -cp [-f] <src> ... <dst>

# 追加数据到HDFS文件中
hdfs dfs -appendToFile <localsrc> ... <dst>	# 如果<localSrc>为-,则输入为从标准输入中读取、 dst如果文件不存在,将创建该文件。 

# HDFS数据移动操作
hdfs dfs -mv <src> ... <dst>

# HDFS数据删除操作
hdfs dfs -rm -r [-skipTrash] URI [URI ...]	# -skipTrash 跳过回收站,直接删除
  • path 为待创建的目录

  • -f 覆盖目标文件(已存在下)

  • -p 保留访问和修改时间,所有权和权限。

  • localsrc 本地文件系统(客户端所在机器)

  • dst 目标文件系统(HDFS)

3、HDFS WEB浏览:

http://node1:9870

使用WEB浏览操作文件系统,一般会遇到权限问题

在这里插入图片描述

这是因为WEB浏览器中是以匿名用户(dr.who)登陆的,其只有只读权限,多数操作是做不了的。如果需要以特权用户在浏览器中进行操作,需要配置如下内容到core-site.xml并重启集群

<property>
    <name>hadoop.http.staticuser.user</name>
    <value>username</value>
</property>

不推荐这样做。HDFS WEBUI,只读权限挺好的,简单浏览即可,如果给与高权限,会有很大的安全问题,造成数据泄露或丢失

4、Big Data Tools插件

  1. 下载插件

    在设置->Plugins(插件)-> Marketplace(市场),搜索Big Data Tools,点击Install安装即可

  2. 需要对Windows系统做一些基础设置,配合插件使用

    • 解压Hadoop安装包到Windows系统,如解压到:E:\hadoop-3.3.4
    • 设置$HADOOP_HOME环境变量指向:E:\hadoop-3.3.4
    • 下载 hadoop.dll winutils.exe
    • 将hadoop.dll和winutils.exe放入E:\hadoop-3.3.4/bin中
    • 重启IDEA
  3. 插件使用

    还可以插看和在修改文件内容

5、使用NFS网关功能将HDFS挂载到本地系统

  1. core-site.xml内新增如下两项

    <!-- 允许hadoop用户代理任何其它用户组 -->
    <property>
        <name>hadoop.proxyuser.[username].groups</name>	
        <value>*</value>
    </property>
    
    <!-- 允许代理任意服务器的请求 -->
    <property>
        <name>hadoop.proxyuser.[username].hosts</name>
        <value>*</value>
    </property>
    
  2. hdfs-site.xml中新增如下项

    <!-- NFS操作HDFS系统,所使用的超级用户(hdfs的启动用户为超级用户) -->
    <property>
        <name>nfs.superuser</name>
        <value>[username]</value>
    </property>
    
    <!-- NFS接收数据上传时使用的临时目录 -->
    <property>
        <name>nfs.dump.dir</name>
        <value>/tmp/.hdfs-nfs</value>
    </property>
    
    <!-- NFS允许连接的客户端IP和权限,rw表示读写,IP整体或部分可以以*代替 -->
    <!-- 192.168.88.1这个IP是电脑虚拟网卡VMnet8的IP,连接虚拟机就走这个网卡 -->
    <property>
        <name>nfs.exports.allowed.hosts</name>
        <value>192.168.88.1 rw</value>	
    </property>
    
  3. 将配置好的core-site.xmlhdfs-site.xml分发到其他节点、重启Hadoop HDFS集群(先stop-dfs.sh,后start-dfs.sh)

  4. 停止系统的NFS相关进程

    systemctl stop nfs
    systemctl disable nfs	# 关闭系统nfs并关闭其开机自启
    yum remove -y rpcbind    # 卸载系统自带rpcbind
    
  5. 启动portmap(HDFS自带的rpcbind功能)(必须以root执行)

    hdfs --daemon start portmap
    
  6. 启动nfs(HDFS自带的nfs功能)(必须以hadoop用户执行)

    hdfs --daemon start nfs3
    
  7. 开启Windows的NFS功能

    此功能需要专业版,如果是家庭版Windows需要升级为专业版

  8. 在Windows命令提示符(CMD)内输入

    net use G: \\192.168.88.101\!	
    

    192.168.88.101 为 NameNode主机IP地址

    G: 盘符名称(任意,与已有不重复即可)

  9. 完成后即可在文件管理器中看到盘符为G的网络位置(见上图)

至此,就将HDFS挂载到Windows文件管理器内了可以进行上传、下载、改名、删除、追加文本等操作。

  1. 点击右键客户断开连接

6、HDFS数据存储

数据存储

HDFS 将文件拆分成多个块(默认块大小为 128MB),每个块被存储在不同的 DataNode 上:

  • 块(Block):文件被分割成大小相等的数据块。块大小可以在 HDFS 配置中设置(通常为 128MB 或 256MB)。
  • 副本(Replication):每个数据块会被复制到多个 DataNode 上(默认副本数为 3)。这种数据冗余提供了容错性和高可用性。

副本(Replication)

<!-- hdfs-site.xml中配置 设置默认文件上传到HDFS中拥有的副本数量 -->
<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>
# 可以在上传文件的时候,临时决定被上传文件以多少个副本存储
hdfs dfs -D dfs.replication=2 -put test.txt /tmp/

# 对于已经存在HDFS的文件,修改dfs.replication属性不会生效, 如果要修改已存在文件可以通过命令
# 如下命令,指定path的内容将会被修改为2个副本存储
hdfs dfs -setrep [-R] 2 path	# -R选项可选,使用-R表示对子目录也生效

# 使用hdfs提供的fsck命令来检查文件的副本数
hdfs fsck path [-files [-blocks [-locations]]]
  • -files可以列出路径内的文件状态
  • -files -blocks 输出文件块报告(有几个块,多少副本)
  • -files -blocks -locations 输出每一个block的详情

块(Block)

对于块(block),hdfs默认设置为256MB一个,也就是1GB文件会被划分为4个block存储。

<!-- hdfs-site.xml中配置 块大小可以通过参数 -->
<property>
    <name>dfs.blocksize</name>
    <value>268435456</value>
    <description>设置HDFS块大小,单位是b</description>
</property>

7、NameNode 元数据

NameNode基于edits和FSImage的配合,完成整个文件系统文件的管理。

  1. 每次对HDFS的操作,均被edits文件记录
  2. edits达到大小上线后,开启新的edits记录
  3. 定期进行edits的合并操作
    如当前没有fsimage文件, 将全部edits合并为第一个fsimage
    如当前已存在fsimage文件,将全部edits和已存在的fsimage进行合并,形成新的fsimage

在这里插入图片描述

<!-- hdfs-site.xml中配置 元数据位置如下/data/nn/current -->
<property>
    <name>dfs.namenode.name.dir</name>
    <value>/data/nn</value>
</property>

元数据合并控制参数

对于元数据的合并,是一个定时过程,基于:

  • dfs.namenode.checkpoint.period,默认3600(秒)即1小时
  • dfs.namenode.checkpoint.txns,默认1000000,即100W次事务

即每1小时或发生100W次事务合并(有一个达到条件就执行)
检查是否达到条件,默认60秒检查一次,基于:

  • dfs.namenode.checkpoint.check.period,默认60(秒),来决定

8、SecondaryNameNode的作用

NameNode的元数据并不是有NameNode本身完成,NameNode不负责数据写入,只负责元数据记录和权限审批
SecondaryNameNode会通过http从NameNode拉取数据(edits和fsimage)
然后合并完成后提供给NameNode使用。

二、MapReduce 分布式计算

1、大数据体系内的计算, 举例:

销售额统计、区域销售占比、季度销售占比
利润率走势、客单价走势、成本走势
品类分析、消费者分析、店铺分析

数据太大,一台计算机无法独立处理、靠数量来取胜

计算:对数据进行处理,使用统计分析等手段得到需要的结果
分布式计算:多台服务器协同工作,共同完成一个计算任务

2、分布式(数据)计算 的两种模式

分散->汇总模式:(MapReduce就是这种模式)

  1. 将数据分片,多台服务器各自负责一部分数据处理

  2. 然后将各自的结果,进行汇总处理

  3. 最终得到想要的计算结果

中心调度->步骤执行模式:(大数据体系的Spark、Flink等是这种模式)

  1. 由一个节点作为中心调度管理者

  2. 将任务划分为几个具体步骤

  3. 管理者安排每个机器执行任务

  4. 最终得到结果数据

3、分布式计算框架 - MapReduce

MapReduce是“分散->汇总”模式的分布式计算框架,可供开发人员开发相关程序进行分布式数据计算。
提供了2个编程接口:Map 和 Reduce

  • Map功能接口提供了“分散”的功能, 由服务器分布式对数据进行处理
  • Reduce功能接口提供了“汇总(聚合)”的功能,将分布式的处理结果汇总统计

MapReduce执行原理 (单词统计样例)

假定有4台服务器用以执行MapReduce任务可以3台服务器执行Map,1台服务器执行Reduce

在这里插入图片描述

​ 文件 将任务分解为:3个Map(分散) Task(任务) 1个Reduce(汇总) Task

三、Yarn 分布式资源调度

1、资源调度

  • 资源:服务器硬件资源,如:CPU、内存、硬盘、网络等
  • 资源调度:管控服务器硬件资源,提供更好的利用率
  • 分布式资源调度:管控整个分布式服务器集群的全部资源,整合进行统一调度

对于资源的利用,有规划、有管理的调度资源使用,是效率最高的方式

YARN 管控整个集群的资源进行调度, 那么应用程序在运行时,就是在YARN的监管(管理)下去运行的。
这就像:全部资源都是公司(YARN)的,由公司分配给个人(具体的程序)去使用。

YARN用来调度资源给MapReduce分配和管理运行资源,所以,MapReduce需要YARN才能执行(普遍情况)

2、Yarn核心架构

主(Master)角色:ResourceManager:整个集群的资源调度者, 负责协调调度各个程序所需的资源。

从(Slave)角色:NodeManager:单个服务器的资源调度者,负责调度单个服务器上的资源提供给应用程序使用。

3、Yarn容器

如何实现服务器上精准分配如下的硬件资源呢?

  • 容器(Container)是YARN的NodeManager在所属服务器上分配资源的手段
  • 创建一个资源容器,即由NodeManager占用这部分资源
  • 然后应用程序运行在NodeManager创建的这个容器内
  • 应用程序无法突破容器的资源限制

4、Yarn辅助架构

YARN的架构中除了核心角色还可以搭配2个辅助角色使得YARN集群运行更加稳定

代理服务器(ProxyServer):Web Application Proxy Web应用程序代理

历史服务器(JobHistoryServer): 应用程序历史信息记录服务

1、代理服务器

  • 代理服务器,即Web应用代理是 YARN 的一部分。默认情况下,它将作为资源管理器(RM)的一部分运行,但是可以配置为在独立模式下运行。使用代理的原因是为了减少通过 YARN 进行基于网络的攻击的可能性。

  • 这是因为, YARN在运行时会提供一个WEB UI站点(同HDFS的WEB UI站点一样)可供用户在浏览器内查看YARN的运行信息

  • 开启代理服务器,可以提高YARN在开放网络中的安全性 (但不是绝对安全只能是辅助提高一些)

  • 统一收集到HDFS,由历史服务器托管为WEB UI供用户在浏览器统一查看

代理服务器默认集成在了ResourceManager中,也可以将其分离出来单独启动,
如果要分离代理服务器,在yarn-site.xml中配置 yarn.web-proxy.address参数
并通过命令启动它即可 $HADOOP_YARN_HOME/sbin/yarn-daemon.sh start proxyserver

<!-- yarn-site.xml -->
<property>
    <name>yarn.web-proxy.address</name>
    <value>node01:8089</value>
    <description>代理服务器主机和端口</description>
</property>

2、JobHistoryServer历史服务器

  • 提供WEB UI站点,供用户在浏览器上查看程序日志
  • 可以保留历史数据,随时查看历史运行程序信息

运行日志,产生在多个容器中,太零散了难以查看,所以需要历史服务器

JobHistoryServer需要配置:

  • 开启日志聚合,即从容器中抓取日志到HDFS集中存储

    <!-- yarn-site.xml -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
        <description>开启日志聚合</description>
    </property>
    
    <property>
        <name>yarn.nodemanager.remote-app-log-dir</name>
        <value>/tmp/logs</value>
        <description>程序日常HDFS的存储路径</description>
    </property>
    
  • 配置历史服务器端口和主机

    <!-- mapred-site.xml -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node01:19888</value>
        <description>配置历史服务器web端口为node0的19888端口</description>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node01:10020</value>
        <description>历史服务器通讯端口为node01:10020</description>
    </property>
    
  • 启动和停止:$HADOOP_HOME/bin/mapred --daemon start|stop historyserver

提交MapReduce程序至YARN运行

  • YARN作为资源调度管控框架,其本身提供资源供许多程序运行,常见的有:MapReduce程序、Spark程序、Flink程序

  • Hadoop官方内置了一些预置的MapReduce程序代码,无需编程,只需要通过命令即可使用,例如:

    1. wordcount:单词计数程序。
    2. pi:求圆周率 (通过蒙特卡罗算法(统计模拟法)求圆周率)
  • 这些内置的示例MapReduce程序代码,都在 $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar 这个文件内。

  • 可以通过 hadoop jar 命令来运行它,提交MapReduce程序到YARN中。

    hadoop jar 程序文件 java类名 [程序参数] ... [程序参数]
    # 参数1是数据输入路径
    # 参数2是结果输出路径
    hadoop $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /input/word.txt /output/wc
    

    可以通过 http://node01:8088 查看程序运行状态日志,历史信息

oop官方内置了一些预置的MapReduce程序代码,无需编程,只需要通过命令即可使用,例如:

  1. wordcount:单词计数程序。
  2. pi:求圆周率 (通过蒙特卡罗算法(统计模拟法)求圆周率)
  • 这些内置的示例MapReduce程序代码,都在 $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar 这个文件内。

  • 可以通过 hadoop jar 命令来运行它,提交MapReduce程序到YARN中。

    hadoop jar 程序文件 java类名 [程序参数] ... [程序参数]
    # 参数1是数据输入路径
    # 参数2是结果输出路径
    hadoop $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /input/word.txt /output/wc
    

    可以通过 http://node01:8088 查看程序运行状态日志,历史信息

    在这里插入图片描述

举报

相关推荐

0 条评论