简介:这套面向大数据初学者与高校相关专业学生的成套教学课件,聚焦大数据技术基础与实战,系统讲解大数据概念与4V特性、四阶段处理流程、Hadoop生态及核心组件,并涉及VirtualBox实践环境准备,兼顾理论与入门实操,适合作为课堂讲义或自学主线。包体为1个PPTX演示文稿,大小9.97MB,文件数量精简,便于直接导入或在线预览;课件采用分章节结构组织,包含大量对比图示与要点提炼,可帮助读者快速建立知识框架。内容对规模性、多样性、高速性、价值性四类特性做了具体辨析,并梳理了数据采集、导入清洗、统计分析与数据挖掘各环节的常见挑战与工具思路,同时结合HDFS与MapReduce讲解Hadoop核心运行机制,让抽象概念更易落地。目前已有167人学习下载。通过完整讲义可掌握大数据从采集、清洗、分析到挖掘应用的完整链路,理解Hadoop相关核心机制,为后续搭建实验环境、开展大数据项目打下基础。
1. 大数据技术基础与实战全书电子讲义完整版课件:这份PPT值得花一个周末跟完
“大数据技术基础与实战全书电子讲义完整版课件.pptx”——光看文件名,这是几乎所有大数据入门者都绕不开的那套课件。你可能是刚接触数据科学与大数据技术专业的学生,正在为期末论文或毕业设计题目发愁;也可能是团队里被安排“带新人”的工程师,想找一条能把存储、计算、调度讲成一条线的讲义。这套课件的价值不在PPT够不够花哨,而在它把大数据技术原理与应用从头串到尾:理论讲完立刻给实操命令,例子小到单机就能跑通。我的建议是别拿它当收藏品,把它当成有目录、有代码、有排错思路的入门手册,用周末两天从头到尾跑一遍,比刷十篇科普贴都值。
2. 从HDFS到MapReduce:课件把大数据技术的基础层是按什么顺序讲的
2.1 存储先行:HDFS为什么要放在讲义最前面
这类讲义的标准编排几乎都是同一套逻辑:先讲清楚数据放在哪,再讲怎么算。HDFS(Hadoop分布式文件系统)就是那个“放在哪”。课件开篇讲HDFS,核心就三个概念:块(Block)、副本、NameNode/DataNode职责。Hadoop 2.x之后每个块默认128MB,副本数默认3份,NameNode只存元数据,真正的数据块散落在DataNode上。理解这三件事,后面看MapReduce的数据本地性才不费劲。
很多人觉得HDFS只是“把文件切碎存多份”,实际上它决定了一个计算作业往哪个节点发、要不要跨节点拉数据。课件里讲“移动计算而非移动数据”,指的就是任务调度会优先找存了数据块的那台DataNode。这个设计直接关系到后边YARN的容器分配,所以我不建议直接跳到Spark去学,HDFS这章值得逐字看。
2.2 计算模型:MapReduce为什么是“先拆分再汇总”
讲完存储,课件立刻进入MapReduce。Map阶段做拆分和初步加工,输出键值对;Reduce阶段做聚合。中间夹着的Shuffle(洗牌)是最容易被忽略的章——map输出的数据要按照key排序、分区、合并,再传给reduce。很多作业跑得慢,问题就出在Shuffle阶段的数据倾斜或小文件过多。
课件在讲完MapReduce后一般会接一个YARN的资源调度章节。YARN把计算资源抽象成容器(Container),由ResourceManager统一分配,NodeManager负责干活。我建议你把这个过程记成一条链:客户端提交Job → ResourceManager为AppMaster分配容器 → AppMaster再向RM申请Map/Reduce任务容器 → 任务跑完写回HDFS。这条链在Web UI的Application页面里都能看到,排错时非常有用。
2.3 生态延展:Hive、HBase、Flume在讲义里的真实定位
讲义后半部分通常会快速带过Hive、HBase、Zookeeper、Flume这些组件。这一段的定位是“知道什么时候用它”,不是要求你全部精通。Hive解决SQL化查询,把HQL翻译成MapReduce;HBase是列式NoSQL,适合随机读写;Zookeeper做分布式协调;Flume采集日志。像头歌云计算与大数据技术实训平台这类在线环境,也是按这套目录排课的,每个组件给你配一两个小实验。
我见过不少人卡在“组件太多不知从哪下手”,我的取舍标准很简单:做离线批处理先学Hive,做实时采集先学Flume和Kafka,做在线查询再看HBase,其他用到再查。课件里Hive的HQL例子一定要自己敲一遍,哪怕是最简单的select加group by,观察它在YARN上被翻译成MapReduce作业的过程,比背十遍“Hive是数仓工具”都管用。
上面这张概念地图听再多也是空的,动手验证服务状态才是最直接的确认方式。
# 确认Hadoop相关进程是否存活,jps能看到NameNode/DataNode/ResourceManager/NodeManager等 jps # 以报告形式查看HDFS当前状态,Live datanodes字段显示存活数据节点数 hdfs dfsadmin -report命令说明:jps是JDK自带的Java进程查看工具,Hadoop各组件都以Java进程运行,所以它会直接列出NameNode、DataNode、ResourceManager、NodeManager这些进程名。hdfs dfsadmin -report读取的是NameNode上报的块与节点状态,Live datanodes后面的数字如果小于实际节点数,说明有DataNode失联;Under-replicated blocks字段非0,说明有副本正在补。这两个命令是所有Hadoop排错的第一步,课件里就算没写,你也要练成肌肉记忆。
3. 跟着讲义跑通第一个实战:最小化的本地伪分布式WordCount
3.1 配两个XML:伪分布式环境的最小参数
WordCount是课件里最常见的入门案例。它的目标很简单:统计输入文件中每个单词出现的次数。很多人直接跳过环境搭建用现成集群,结果出了问题连日志都看不懂。我建议你在自己电脑上先搭一个伪分布式,也就是一个进程模拟完整集群。装好Hadoop之后,第一个要改的文件是core-site.xml。
<!-- core-site.xml:指定NameNode的地址,9000是HDFS IPC通信默认端口 --> <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>参数说明:fs.defaultFS是客户端访问HDFS的入口地址。如果你以后搭真集群,这里的localhost要换成NameNode所在主机名或IP,端口可以不变。第二个要改的是hdfs-site.xml,重点调副本数和权限校验。
<!-- hdfs-site.xml:伪分布式副本数设为1,并关闭权限校验,减少本地实验干扰 --> <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> </configuration>参数说明:dfs.replication在真集群里通常设为3,伪分布式只有一台节点,设成3反而会因为副本无法分配而卡在等待状态。dfs.permissions.enabled改成false是图省事,避免每次命令都要带权限参数;生产环境千万不要关。最后一个建议加上的是yarn-site.xml,不给YARN设置内存约束,作业经常会在容器分配阶段失败。
<!-- yarn-site.xml:给本地伪分布式的最小容器内存,按机器实际内存调整 --> <configuration> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>2048</value> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>512</value> </property> </configuration>参数说明:yarn.nodemanager.resource.memory-mb是NodeManager能使用的总内存上限,伪分布式2GB基本够跑;yarn.scheduler.minimum-allocation-mb是单个容器的最小内存,调到512MB是避免一个小作业占满全部资源。顺序是先改core-site.xml,再改hdfs-site.xml,最后改yarn-site.xml,三个文件都在etc/hadoop目录下。
注意:改完配置之后,第一次启动集群前必须做一次格式化,但格式化会清空NameNode上的元数据,相当于吃后悔药,只能在新部署或重构集群时用。
3.2 启动、传数据、跑任务:一条完整的命令序列
配置就绪后,整套动作就是格式化、启动、传文件、跑任务四步。以下命令在Linux终端执行,Hadoop安装目录用环境变量$HADOOP_HOME代替,具体路径以你的解压目录为准。
# 1. 只在第一次部署或彻底重置时执行,格式化NameNode的元数据目录 hdfs namenode -format # 2. 启动HDFS与YARN,前者跑存储,后者跑计算 start-dfs.sh start-yarn.sh # 3. 在HDFS上创建用户目录,并上传本地测试文件 hdfs dfs -mkdir -p /user/ubuntu/input echo "hello hadoop hello hive hello spark" > /tmp/wc.txt hdfs dfs -put /tmp/wc.txt /user/ubuntu/input/ # 4. 提交Hadoop安装包自带的WordCount示例,$HADOOP_HOME 替换为实际路径 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.x.jar \ wordcount /user/ubuntu/input /user/ubuntu/output命令说明:第一步格式化只做一次,跑完再格式化等于丢失全部数据,这步要慎重。start-dfs.sh会依次拉起NameNode和DataNode,start-yarn.sh拉起ResourceManager和NodeManager,启动时间约十几秒,可以用jps验证。echo那行命令生成了一个只有一句话的本地临时文件,用来做WordCount足够。最后的hadoop jar提交作业,jar包路径里的3.3.x要替换成你实际安装的版本号。
输出目录名/output在提交前不能存在,否则作业会直接报错。这是Hadoop的一个设计约束:输出目录会被任务结果占用,重跑作业必须先删旧目录。想重新测试时就先执行hdfs dfs -rm -r /user/ubuntu/output再提交。
3.3 看结果:不要只盯着SUCCESS文件
作业跑完后,很多人看到控制台输出一堆INFO日志就以为结束了,真正要检查的是HDFS上的输出目录。
# 查看输出目录的文件列表,里面应该有_SUCCESS和part-r-00000 hdfs dfs -ls /user/ubuntu/output # 查看实际计算结果,正常会按单词和词频输出 hdfs dfs -cat /user/ubuntu/output/part-r-00000命令说明:_SUCCESS是一个空文件,它只代表作业正常结束,真正的统计结果在part-r-00000里,这个文件会被reducer个数影响。默认只有一个reducer,所以只有一个part文件;如果设置了多个reducer,就会出现part-r-00000、part-r-00001等一连串文件。想拿完整结果时,用hdfs dfs -get把整个output目录拉到本地再合并。
检查结果时我习惯看三样东西:作业状态是否FINISHED、part文件是否非空、日志里有没有WARN。WARN不等于失败,但很多坑都藏在WARN里,比如某个map任务重试了好几次,虽然最终成功,说明集群性能或数据分布有问题。这些在YARN的Web界面(默认8088端口)里都能查到,比盯终端输出直观得多。
4. 课件里不写的坑:照着做也会翻车的6条排错记录
4.1 NameNode启动又退出:内存参数设小了
现象:执行start-dfs.sh后,jps看不到NameNode进程,或者刚看到就消失,日志里出现OutOfMemoryError。
原因:Hadoop各组件默认堆内存按物理机比例分配,在内存只有2GB的虚拟机或笔记本上,默认值直接把进程挤爆。
解决:在etc/hadoop/hadoop-env.sh里显式设置堆大小。
# hadoop-env.sh 中设置NameNode堆内存,按机器实际情况调整 export HADOOP_HEAPSIZE=1024这个值设成1024(单位MB)之后,NameNode进程就有明确的堆上限,不会因为动态分配和YARN抢内存。改完重启start-dfs.sh就能解决大半这类问题。
4.2 Windows下写的路径放到集群就报错
现象:本地E:\data\wc.txt这个路径在Linux提交命令时找不到,或者HDFS路径写成hdfs://localhost:9000/user/input反斜杠风格,客户端解析异常。
原因:不同平台路径分隔符不一致,课件里给的示例大多按Linux写,你在Windows写本地文件路径时容易顺手用反斜杠。
解决:本地文件在传给Hadoop之前先统一转换成正斜杠,HDFS路径一律从/user开头写,不要带盘符。用pwd确认当前本地路径再拼接,别靠记忆。
4.3 JDK版本不一致:编译通过却跑不起来
现象:自己用IDEA写了一个MapReduce程序,打包成jar丢到集群,运行时报UnsupportedClassVersionError。
原因:本地JDK是17,集群JDK是8,编译出来的class版本高,集群JVM加载不了。
解决:写pom.xml时强制指定编译版本。
<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>注意项目里用的Hadoop client依赖版本也要和集群版本接近,否则可能出现NoSuchMethodError这类运行期错误。
4.4 集群时间不同步:玄学级别的一串报错
现象:从节点偶尔报Lease expired,客户端写文件时显示Unable to load native-hadoop library,甚至NameNode直接进入SafeMode只读状态,看起来毫无规律。
原因:节点间系统时间漂移,导致租约和心跳消息里的时间戳对不上,NameNode误判DataNode失联。
解决:先手动同步验证,再配置NTP自动同步。
# 所有节点执行,先强制同步时间,再开启NTP服务 sudo ntpdate -u ntp.aliyun.com sudo systemctl start ntpd sudo systemctl enable ntpd时间同步后,再用hdfs dfsadmin -report看存活节点数是否恢复正常。这个bug是典型的“黑匣子”,如果你不知道时间漂移,排查一整天都不一定找得到根因。
4.5 端口占用或防火墙:SecondaryNameNode起不来
现象:start-dfs.sh之后,SecondaryNameNode进程没出现,日志提示端口已绑定或Connection refused。
原因:默认端口被其他进程占了,或防火墙拦截了本机回环端口。伪分布式下一切都在本机跑,但firewalld的默认策略也会拦。
解决:改端口或者放行端口,二选一。
# 查看是谁占用了9870端口(NameNode Web UI) sudo lsof -i:9870 # 如果确认真实墙拦截,放行常用端口 sudo firewall-cmd --permanent --add-port=9000/tcp --add-port=9870/tcp --add-port=8088/tcp sudo firewall-cmd --reload注意Hadoop 3.x把NameNode Web UI从50070改成了9870,ResourceManager的Web UI是8088,课件如果基于Hadoop 2.x,端口对不上时先查版本。
4.6 课件命令过时:hadoop fs和hdfs dfs到底用哪个
现象:课件里写hadoop fs -ls /,在当前版本上提示这条命令已废弃,或者执行行为不一致。
原因:Hadoop老版本用hadoop fs作为通用文件系统命令,新版本逐渐把HDFS相关操作收归到hdfs dfs。实际上hdfs dfs只针对HDFS,hadoop fs还能操作本地文件系统等。
解决:操作HDFS时一律用hdfs dfs,这能避免混淆。另外新版还多了hdfs dfs -put -f这样的强制覆盖参数,删除目录要加-r,这些细节课件不一定跟进了,建议以你实际安装版本的官方命令手册为准。
5. 把讲义变成你自己的课程:二次加工和练习验收的落地方法
5.1 从“读课件”到“讲课件”:每章拆成三段式
这套课件如果只是自己从头翻到尾,很容易变成“眼睛会了手不会”。我建议无论是自学还是带新人,都把每一章拆成三个十分钟:讲概念、看命令、跑结果。
举例来说,HDFS这一章先花十分钟把块大小、副本、NameNode/DataNode三条概念讲明白;再花十分钟演示hdfs dfs -mkdir、-put、-cat、-get这几个命令;最后十分钟让学习者自己建目录、上传文件、下载文件。三段式的关键不是顺序,而是每一段都要停下来动手。不要一章讲完再统一做实验,那样前面的命令早就忘了。
5.2 课后练习的验收标准:结果文件只是最低要求
课件里如果带了练习题,常见答案是“输出目录存在且结果文件非空”。但这样的验收标准太低。我会额外加三个检查项:作业ID能说得出来、reduce阶段用了多长时间、哪一步最慢。前者证明他真跑了,后两者逼他去看YARN日志。
做练习时我一般用一个简单的统计表,每完成一次作业就记录一行。
| 实验名称 | 数据文件数 | 输入大小 | Reducer数 | 作业时长 | 峰值内存 | 问题现象 |
|---|---|---|---|---|---|---|
| WordCount | 1 | 1KB | 1 | 32s | 512MB | 无 |
| 日志分析 | 10 | 128MB | 3 | 1m10s | 1024MB | 数据倾斜 |
这张表的作用是让练习变为可对比的观测实验。下次调大reducer或者换压缩格式,拿这张表就能看出差别,而不是凭感觉。
5.3 给课件补数据:三种不花钱的造数方式
讲义里自带的例子数据往往小得可怜,几KB的文件看不到性能问题。要练手就得有更大、更真实的数据,常见做法有三条。第一条是直接用服务器日志,/var/log/下的nginx或syslog本身就是天然的文本数据,格式乱一点反而更贴近生产。第二条是公开数据集,UCI Machine Learning Repository和MovieLens都是老牌来源,下载之后转成文本就能丢进HDFS。第三条是脚本生成,适合定制场景。
如果你想拿课件里的案例扩展成大数据技术毕业论文及毕业设计题目,造数据是绕不开的一步。比如做一个用户行为日志分析,就得先有像样的用户日志。
import json import random # 生成10000条用户行为日志,三列字段:用户ID、行为类型、时间戳 actions = ["view", "click", "buy"] with open("user_actions.json", "w") as f: for i in range(10000): row = { "uid": random.randint(1, 1000), "action": random.choice(actions), "ts": random.randint(1600000000, 1700000000) } f.write(json.dumps(row) + "\n")参数说明:uid范围从1到1000,action从view、click、buy里随机取,ts是Unix时间戳范围,覆盖大约三年跨度。这样生成的文件大约几百KB,单机伪分布式跑得动,但又能看出分组统计的效果。想压测就加大循环次数到100万行,同时注意Reducer数量也要相应调大。
6. 讲义的进阶用法:用课件里那些排错记录建一份自己的查错清单
6.1 三行自查命令
我现在每次接手一个陌生的Hadoop集群,都是从三行命令开始:jps看进程、hdfs dfsadmin -report看节点、yarn node -list看资源。这三行能过滤掉八成的环境问题,比如进程没起、节点失联、资源耗尽。课件里散落的排错知识很多,不如浓缩成这张清单,每次作业失败先跑一遍。
6.2 把WordCount换成自己的数据,只改三个地方
当你准备把课件里的WordCount跑在自己的数据集上,需要改的只有三个点:输入路径换成你的数据目录、输出路径不能和输入重合、reducer数量按数据量调。数据量在几百MB以内,保持默认一个reducer没问题;上GB之后,先设4个再根据耗时逐步加,加到8个以上收益就明显下降了。
6.3 养成记录参数的习惯
我最开始学Hadoop时,也对着这套课件的目录死磕WordCount,翻过不少车。后来养成了一个习惯:每次实验跑完,把输入大小、内存配置、reducer数量、作业时长这四个数记在表格里。看上去麻烦,但排查问题时有数据对比,很多“玄学”一下就变成确定性问题。这个习惯让我后来带人时能快速判断新人踩的是环境坑还是逻辑坑。如果你打算认真走大数据这条路,这套讲义只是起点,把它跑透、记下参数、建立自查清单,你才算真正把它变成了自己的东西。希望帮到你。
本文还有配套的精品资源,点击获取