Hadoop

大数据
大数据代表的一种理念、一种解决问题的思维、一系列技术的集合。
理念用全量代替样本 兼容不精确 更加关注相关规律 思维 数据 信息 知识 洞察 一系列技术
通过一系列大数据技术对海量数据进行分析,实现对运营层决策的支持,挖掘出数据背后的价值
概述大数据
大数据 big data 指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新 处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。
大量数据资源为解决以前不可能解决的问题带来了可能性。
主要用于挖掘用户需求、优化产品配比、分析市场、减少运营成本、风险预警等
主要的三大发展方向:平台搭建 / 优化 / 运维 / 监控、大数据开发 / 设计 / 架构、数据分析 / 挖掘。 Java 是大数据开发的主流语言【scala 】、 python 是侧重业务数据分析和数据挖掘的语言
4V 特性
数据量大
种类和来源多样化
数据增长速度快
低价值密度
大数据技术
主要包括 5 方面:数据存储、数据采集、数据预处理、数据计算和数据可视化。
常见的计算模式:
离线批处理:时间跨度一般在几分钟到数小时之间,使用历史数据、大批量处理,要求吞吐率
实时交互式处理:数据进行多维度分析查询,用于实时报表分析、实时大屏等,用户交互使用,要
求反应时间为数十秒到数分钟之间
实时流式处理:要求数百毫秒到数秒之间的实时数据流图计算主要用于关联关系的相关分析人工智能专家系统、机器学习、计算机视觉、自然语言处理等。经常使用机器学习训练机器,使机器建立实现特定功能的模型,最后机器就可以根据该模型对数据进行预测
大数据开发技术
1 、第一代 Hadoop MapReduce ,针对复杂操作不得不拆分算法,将应用编程多个 job 执行,每次执行完成都有落盘操作
2 、第二代 DAG 框架出现,例如 Tez Oozie ,可以直接使用上次计算结果,不需要重复的硬盘读写,但是操作人就是批处理
3 、第三代是以内存计算为代表的 Spark 计算框架,特点是 Job 内部的 DAG 有向无环图的使用,以及强调实时计算
4 、第四代是以 Flink 为代表的批流一体的计算框架
Spark 是基于微批处理模拟实时流的效果,延时比较高,无法优化到秒以下的数量级;但是 Flink 支持实时流处理,可以实现毫秒到秒的处理,比较切合数据的生成方式,技术上有更好的扩展性
Hadoop
Hadoop 解决的问题是海量数据分析、处理和深入挖掘以及长期保存海量数据,其中的 HDFS 为海量数据提供存储,而MapReduce 则为海量数据提供了计算服务, YARN 解决了资源管理调度
什么是 hadoop
Apache Haoop 是一个由 Apache 发布的 Doug Cutting 主导开发的运行在大型集群的普通 PC 硬件上针对大数据集的分布式存储与并行分布式计算的开源软件系统基础架构。Hadoop 是运行在大量廉价硬件设备集群上的可靠的、可扩展的分布式系统基础架构,使得用户在不了解分布式底层细节的情况下,开发分布式程序、充分利用集群的分布式能力进行计算和存储。广义上说hadoop 通常指的是 hadoop 生态圈适用于海量数据的分布式存储和海量数据的分布式并行离线计算,是目前存储和分析海量数据的首选。
三大核心组件
HDFS 海量数据的分布式存储
MapReduce 海量数据并行化分布式计算
YARN 解决了分布式资源管理调度问题
三大发行版本
目前 hadoop 有三大主要发行版本,主要有 Apache hadoop Cloudera Hortonworks
Apache 最原始最基础的版本,比较适合基础学习或者技术实例较强的大公司
Cloudera 发行版简称 CDH ,是目前使用较多的,中小型公司使用较多,简单方便,自带的可视化
管理。不开源,并且和社区版的 hadoop 有所出入
Hortonworks 发行版简称为 HDP ,采用的是原生的 hadoop ,集成了监控方案,但是增删节点比较
麻Cloudera和 Hortonworks 2018 年合并,推出了私有云 CDP 四大特定
高可靠,依赖于多副本机制实现的
高可扩展性, HDFS 支持线性扩展
高效性。 Map/Reduce 分布式无限制的并行计算
高容错性。重启应用会自动检查和自动重新部署
缺点:版本管理混乱,部署升级复杂,兼容性差,安全性低
不适合低延迟数据访问
不适合小文件存取
不适合并发写入、文件的随机修改
Hadoop 基本使用步骤
1 、搭建 hadoop 集群
2 hadoop 搭建完成后,可以通过 web 页面查看集群的使用情况。可以通过 hadoop shell 命令将文件上传到hdfs 集群中
3 、通过集成开发环境导入 hadoop 相关的 jar 包,编写 map-reduce 程序,最后将程序打包为 jar ,放到集群中执行,最终获取执行结果
Hadoop 应用场景
Hadoop 提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理。
一般用于
海量数据须及时分析、处理和深入挖掘
长期保存海量数据。
安装
安装采用的是 Linux 操作系统
RHEL 是红帽子出品,需要付费,但是性能稳定可靠; CentOS 主要优点是与 RHEL100% 的二进制兼容,Centos8是 2021 年停止维护, Centos7 将维护到 2024 年年中,新版本是 Centos Stream 滚动版,缺乏稳定性。
1 、关闭 DHCP 动态主机配置协议,采用静态 IP 地址。 /etc/sysconfig/network-scripts/ifcfg-ens
2 、修改主机名称 hostnamectl set-hostname node01
配置 DNS 解析,实现通过主机名称访问特定节点 /etc/hosts
3 、配置 SSH 协议, SSH 安全壳协议可以在应用层的基础之上提供安全通信的一个协议,主要原理是利用非对称机密体系,对所有传输的数据进行加密,保证数据在传输过程中不被恶意破坏、泄露或篡改。
配置 SSH 免密登录: ssh - keygen - t RSA 命令用于在当前机上生成 SSH 通信所需要的公钥和私钥
在命令执行的过程中不输入任何内容,一路回车
公钥文件 /root/.ssh/id_rsa.pub ,私钥 /root/.ssh/id_rsa
将本地主机的公钥复制到远程主机的 authorized_keys 文件上 ssh - copy - id root@node02
4 、关闭 SELinux
安全增强型 Linux 简称 SELinux ,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。 SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。
SELinux 的三种工作模式:
enforcing :强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中
permissive :宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。
disabled :关闭 SELinux
SELinux 工作模式可以在 /etc/selinux/config 中设定
安装 hadoop
Hadoop3.3 支持 JDK8 JDK11 ,之前版本只支持 JDK8
Hadoop 的安装方式有 3 种: windows 单机用于开发,伪分布式用于测试和分布式用于生产环境
windows 单机安装,单机单节点多线程,基本无需配置即可运行,不需要任何守护进程,存储采用
本地文件系统,一般用于代码开发测试,避免需要上传到 Linux 系统测试的繁琐步骤【 hadoop jar
aaa.jar 主类名称 参数】
hadoop 可以在当节点上以伪分布式的方式运行,以分离的 Java 进程来运行,模拟多台物理设备的
情况。可以在一台机器上运行多个 hadoop 守护进程,例如 NameNode/DataNode
JobTracker/TaskTracker ,采用分布式文件系统 HDFS 存储数据,模拟一个小集群的运行,主要用
于测试
完全分布式,这种模式式完全多台物理设备或者云服务器,最少需要两台或者更多的计算机集群,
主要用于生产阶段
伪分布式安装
解压文件到对应的安装目录下即可
1 、将安装路径添加到环境变量中
修改 Path 环境变量
Centos7 下的安装
1 、利用 xshell 上传文件 2 、解压文件 tar - zxvf hadoop - 3.3.4.tar.gz
3 、将解压的文件夹移动到 /usr/local 目录下
4 、修改 /etc/profile 文件,添加环境便令 HADOOP_HOME 指向具体的安装路径,修改 PATH 添加
hadoop/bin hadoop/sbin 两个路径
伪分布式配置, Linux windows 下基本一致
etc/hadoop/core-site.xml 配置访问 hadoop 集群的公共信息
etc/hadoop/hdfs-site.xml 配置 hdfs 分布式文件系统的属性
etc/hadoop/mapred-site.xml 用于配置 MapReduce 计算中的资源管理
etc/hadoop/yarn-site.xml 用于配置 YARN 资源管理器
<configuration>
<property> <!-- 用于设置 namenode RPC 交互端口 -->
<name> fs.defaultFS </name>
<value> hdfs://localhost:9000 </value>
</property>
<property> <!-- 用于设置文件系统依赖的配置元数据的临时存放位置 -->
<name> hadoop.tmp.dir </name>
<value> /D:/software/hadoop-3.3.4/temp </value>
</property>
</configuration>
<configuration>
<property> <!-- 用于设置存储在 HDFS 文件系统中的文件副本数 -->
<name> dfs.replication </name>
<value> 1 </value>
</property>
<property> <!-- 关闭权限检查,在生产环境中一定需要开启,也就是值为 true -->
<name> dfs.permiessions </name>
<value> false </value>
</property>
</configuration>
<configuration>
<property> <!-- 用于设置使用 YARN 运行 MapReduce 应用程序 -->
<name> mapreduce.framework.name </name>
<value> yarn </value>
</property>
</configuration>
<configuration>
<property> <!-- 配置 NodeManager 上运行的附属服务配置,只有配置成
mapreduce_shuffle 才可以运行 MapReduce 程序 -->
<name> yarn.nodemanager.aux-services </name>
<value> mapreduce_shuffle </value>
</property>
</configuration>
针对 windows 操作系统的特殊处理。因为 hadoop 默认的运行环境需要使用 linux 操作系统,所以针对windows需要添加一些额外的程序,例如动态链接库 hadoop.dll 和可执行程序 winutils
格式化集群的 NameNode 名空间节点 hdfs namenode - format
启动 hadoop 服务:启动所有服务 start-all.cmd ,关闭所有服务 stop-all.cmd
启动 hdfs 命令为 start-dfs.cmd ,关闭 hdfs 服务 stop-dfs.cmd
启动 YARN 命令为 start-yarn.cmd ,关闭资源管理器服务 stop-yarn.cmd
windows 中的可执行脚本程序的后缀为 .cmd linux 中的可执行脚本程序的后缀为 .sh
如果启动后执行 jps 命令可以看到 4 个进程,则表示启动成功。 jps java 提供的一个用于显示当前所有java进程 pid 的命令,适合用于查看当前 java 进行的一些简单情况
还可以使用 web 管理页进行查看 http://localhost:9870 ,这实际上就是 HDFS 的可视化管理界面,在这个界面中可以对整个HDFS 集群进行监控以及文件的上传和下载操作
还可以使用 YARN 的资源管理器可视化窗口 localhost:8088 针对 Linux 中的用户配置
1 、对于 start-dfs.sh stop-dfs.sh 文件,添加下列参数
2 、对于 start-yarn.sh stop-yarn.sh 文件
Hadoop 生态圈
HDFS 分布式文件系统,具有处理超大数据、流式处理、可以运行在廉价商用服务器上
HBase 是一个提供高可靠性、高性能、可伸缩、实时读写、分布式的列式 NoSQL 数据库,一般采用HDFS作为底层数据存储系统
MapReduce 式用于处理海量数据的并行计算编程模型,允许用户在不了解分布式系统底层细节的
情况下开发并行应用,并将其运行于廉价的计算机集群上,完成海量数据的处理
Hive 是一个基于 Hadoop 的数据仓库工具,用于用于对 Hadoop 文件中的数据集进行数据整理、特
殊查询和分析存储,可以通过类 SQL HiveQL 可以快速实现简单的 MapReduce 任务,十分适合数
据仓库的统计分析
Pig 是一种数据流语言和运行环境,适合于使用 Hadoop MapReduce 平台来查询大型半结构化数
据集,简化了 Hadoop 常见的工作任务
Mahout 提供一些可扩展的机器学习领域经典算法的实现,旨在方便快捷地创建智能应用,可以有
效地扩展到云中
Zookeeper 是一个开源的高效和可靠的协同工作系统,提供分布式锁之类的基本服务,用于构建分
布式应用,减轻分布式应用,减轻分布式应用所承担的协调任务
Flume 是高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。 Flume 支持在日志系
统中定制各类数据发送方,用于收集数据
Sqoop 主要用于在 hadoop 和关系数据库之间交换数据,可以改进数据的互操作性。 sqoop 是专门
为大数据集设计的,支持增量更新,可以将新记录添加到最近一次导出的数据源上,或者指定上次
修改的时间戳
HDFS_DATANODE_USER = root
HADOOP_SECURE_DN_USER = hdfs
HDFS_NAMENODE_USER = root
HDFS_SECONDARYNAMENODE_USER = root
YARN_RESOURCEMANAGER_USER = root
HADOOP_SECURE_DN_USER = yarn
YARN_NODEMANAGER_USER = root
Ambari 是一种基于 web 的工具,支持 hadoop 集群的安装、部署、配置和管理。已经支持大多数
hadoop 组件,包括 HDFS MapReduce Hive Pig HBase Zookeeper sqoop
服务器配置【不是主流配置】
实际生产服务器配置:联想 x3750 ,价格 3.5W ,内存 32G 【最大 1.5T 】,机架式,硬盘 SSD 接口, CPU
2.6G X 2 X 12 线程,千兆网卡
大数据存储与管理 HDFS
数据量在一个 OS 管理范围中不能存放就分配到多个 OS 各自管理的磁盘中,从而引入 DFS DFS 有很多。
HDFS 是一种允许文件通过网络在多台主机上分享存储文件,使应用或者用户看起来和访问本地磁盘一致。
HDFS 提供了在廉价服务器集群中进行大规模分布式文件存储的能力
HBase 是一个高可靠、高性能、面向列、可伸缩的分布式数据库,主要用来存储非结构化和半结构
化的松散数据
NoSQL 数据库可以支持超大规模数据存储,主要用来存储非结构化和半结构化的松散数据,具有强大的横向扩展能力,可以有效地弥补关系型数据库的不足
什么是 HDFS
HDFS 分布式文件系统以物理上的分布式存放,逻辑上一个目录树的形式为上层应用提供海量数据存储服 务,实现高可靠性、高容错性和可扩展性特点,能够自动检测和应对硬件故障,是分布式计算中数据管理的技术,是基于流式数据访问和处理超大文件的需求而开发的
HDFS 集群中以 Master-Slave 模式运行,主要有两类节点:一个 Namenode 节点即 master 和多个
Datanode 节点。 Namenode 管理文件系统的 Namespace ,维护着文件系统树以及文件树中所有的文件和文件夹的元数据。
应用场景
HDFS 提供高吞吐应用程序的数据访问功能,适合带有大型数据集的应用。例如数据密集型并行计算和计算密集型并行计算。HDFS 适用于一次写入多次查询的情况,修改只能先删除再重新上传,不支持并发写,不适合小文件操作
HDFS 不适合大量小文件的存储。由于 NameNode 是将文件系统的元数据存放在内存中,存储文件
的数量受限于内存大小(一个文件 / 目录 / 文件块一般占有 150 字节的元数据内存空间。)
HDFS 优点
高容错:多副本保存
适合批量处理,移动计算而不是移动数据,数据位置暴露给框架
适合大数据处理,是指 MB TB 级别的数据文件
可构建在廉价计算机上,通过副本提高可靠性,提供了容错和恢复机制
流式地访问数据,提供一次写入多次读取的服务,没有修改操作
HDFS 缺点
不适合低延迟数据访问(毫秒级),寻址时间长,适合读取大文件。对于低延迟可以选择 HBase
不适合小文件存储,占用 NameNode 大量内存,寻找事件超过读取时间。针对大量小文件可以采
SequenceFile 方式对小文件进行合并或者使用 NameNode Federation 方式改善
一个文件只能有一个写入者,一般是不允许修改文件
不支持用户磁盘配额管理,粗粒度的访问权限控制 HDFS 数据模型
HDFS 集群中包括 NameNode DataNode Secondary NameNode ,主要适用于大数据场景的数据存储,提供了高可靠性【通过多副本存储实现】、高扩展性【支持添加机器进行线性扩展】和高吞吐率
【多数据节点并发读】的数据存储服务。
Hadoop 支持传统的层次型文件组织结构,采用的是 Master/Slaver 架构,一个 HDFS 集群是由一个
NameNode 和一定数目的 DataNode 组成的【一般比例为 1NN 1SNN 8DN
HDFS 守护进程 NameNode 是一个中心服务器,负责接收客户端的读写服务请求,维护文件系统命
名空间的元数据【文件如何分割以及数据块存放在哪个具体 DN 节点上】和操作日志以及接受客户
端对文件的访问,元数据存储在内存中,不会和磁盘发生交互
具体存放的数据会以数据块为单位存放在 DataNode 上,集群中的 DataNode 负责管理它所在节点
上的存储。一次写入多次读取,数据块尽量散布以达到冗余目的
元数据由 fsimage 镜像文件保存,保存了所有文件的地址、描述和创建时间等信息, NameNode 启动时会将fsimage 中的信息载入内存以供客户端访问,操作日志则由 edits 文件保存,任何对文件系统的修改都会被写入edits 文件并被记录下来。当 edits 文件大小增长到阈值时 HDFS 会将 fsimage 文件和 edits 文件进行合并,生成新的fsimage 快照,同时重置 edits 日志。
NameNode 执行文件系统的命名空间操作,也负责数据块到具体 DataNode 节点的映射; DataNode 负责处理文件系统客户端的读写请求,存储数据内容和Block 的元数据信息文件,可以在 NameNode 的统 一调度下进行数据块的创建、复制和删除。注意:没有修改操作。
Secondary NameNode 是周期性将 NameNode 的镜像文件和日志文件合并,以免日志文件过大,每隔 3600秒更新一次。
HDFS 默认情况下副本系数为 3 ,副本存放策略为:将一个副本放在本地机架的节点上,一个副本放在同
一个机架的另外一个节点上,最后一个副本放在不同机架的节点上。
HDFS 典型的数据块大小为 128M HDFS2.7 将默认 64M 升级到了 128M ),大数据块是针对大规模的流
式数据访问优化,它意味着更多的文件顺序读写和更小的数据块管理开销。大量小文件会导致
NameNode 存储变大,内存压力剧增。 【面试】
HDFS 将数据文件的切分、容错、负载均衡等功能透明化
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值