1,大数据离我们有多远?
大模型和大数据的关系40ZBbbit比特 最小的信息单元0或者1BByte字节 1B8bit 汉字KB 千字节 1KB1024B 小段文字MB 兆字节 1MB1024KB 一首歌3-5MGB 吉字节 1GB1024MB 一部电影TB 太字节 1TB1024GB 数据库25万张高清图片PB 拍字节 1PB1024TB 公司数据中心云服务提供商EB 艾字节 1EB1024PB 全球级别 全球天气观测数据ZB 泽字节 1ZB1024EB 全球数量总数40ZBYB 尧字节 1YB1024ZBE·R画图1.1 大数据的定义TB PB EB结构化数据 固定格式 关系型数据库excel半结构化数据具有一定的层次结构介于结构化数据与非结构化数据之间 json文件xml文件电子邮件非结构化数据无固定格式 文本文件图片音乐大数据技术要面对的基本问题也是最核心的问题就是海量数据如何可靠存储和高效计算。letcood网站学算法。1.2 Google的三驾马车GFSThe Google File System HDFSMapReduceSimplified Data Processing on Large Clusters 大型集群上的简单数据处理BigtableA Distributed Storage System for Structured Data 一个分布式的结构化数据存储系统Hbase1.2.1 GFS的思想1Google思想一GFS分布式文件系统GFS架构1GFS Master节点管理所有的文件系统元数据包括命名空间访问控制权文件和块的映射信息以及当前块的位置信息。2GFS存储的文件都被分割成固定大小的块每个块都会被复制到多个块服务器上可靠性。块的冗余度默认为3。3GFS Master还管理着系统范围内的活动比如块服务器之间的数据迁移等。4GFS Master与每个块服务器通信发送心跳包发送指令获取状态。副本的位置选择策略要满足两个目标最大化数据的可靠性和可用性。1.2.2 MapReduce的思想MapReduce采用“分而治之”的思想把对大规模数据集的操作分发给一个主节点管理下的各个子节点共同完成然后整合各个子节点的中间结果得到最终的计算结果。MapReduce就是“分散任务汇总结果”。Map的输出是Reduce的输入。1.3 Hadoop的概述13.1.Hadoop是什么1Hadoop是由一个Apache基金会所开发的分布式计算基础框架。2主要解决海量数据的存储和海量数据的分析计算问题。3广义上来讲Hadoop通常是指一个更广泛的概念--Hadoop生态圈。1.3.2.Hadoop根据是Google三篇论文实现HDFS —— GFSMapReduce —— MapReduceHBase —— BigTableHDFS:Hadoop Distribute File System是Hadoop项目的核心子项目是分布式技术中数据存储管理的基础。1.3.31.0与2.0的差别就是多了一个YARN1.3.4 Hadoop的优势重要高可靠性Hadoop底层维护多个数据副本所以即使Hadoop某个计算元素或存储出现故障也不会导致数据的丢死。高扩展性在集群分配任务数据可方便的扩展数以千计上午节点。高效性在MapReduce的思想下Hadoop是并行工作的以加快任务处理速度。高容错性能够自动将失败的任务重新分配。1.3.5 Hadoop生态圈组件功能HDFS分布式文件系统YARN资源管理和调度器MapReduce分布式并行编程模型HBaseHadoop上的非关系型的分布式数据库HiveHadoop上的数据仓库Pig一个基于Hadoop的大规模数据分析平台提供类似SQL的查询语言Pig LatinFlume一个高可用的高可靠的分布式的海量日志采集聚合和传输的系统Sqoop用于在Hadoop与传统数据库之间进行数据传递Zookeeper提供分布式协调一致性服务AmbariHadoop快速部署工具支持Apache Hadoop集群的供应管理和监控Mahout提供一些可扩展的机器学习领域经典算法的实现Spark类似于Hadoop MapReduce的通用并行框架OozieHadoop上的工作流管理系统Storm流计算框架Kafka一种高吞吐量的分布式发布订阅消息系统可以处理消费者规模的网站中的所有动作流数据1.4 Hadoop的组成1.4.1 HDFS架构概述NameNode存储文件的元数据如文件名文件目录结构文件属性生成时间副本数文件权限以及每个文件的块列表和块所爱的DataNode等。DataNode在本地文件系统存储文件块数据以及块数据的校验和。Secondary NameNode每隔一段时间对NameNode元数据备份。1.4.2 YARN架构概述ResourceManager整个集群资源内存cpu等的老大NodeManager单个节点服务器资源老大。ApplicationMaster单个任务运行的老大。1负责数据的切分2为应用程序申请资源并分配内部任务3任务的监控与容错Container容器相当于一台独立的服务器里面封装了任务运行所需要的资源如内存cpu磁盘网络等。1.4.3 MapReduce架构MapReduce将计算过程分为两个阶段Map和ReduceMap阶段并行处理输入数据Reduce阶段对Map结果进行汇总2.环境安装用来将一个Docker镜像从 /cg/images/hadoop_node.tar.gz压缩包加载到本地Docker环境里面docker run --name master --privileged --ulimit nofile65535:65535 --hostname master --ip 172.18.0.2 --add-hostslave1:172.18.0.3 --add-hostslave2:172.18.0.4 --add-hostslave3:172.18.0.5 -itd -v /cgsrc:/cgsrc:ro -v /headless/course/:/course hadoop_node /service_start.sh docker run --name slave1 --privileged --ulimit nofile65535:65535 --hostname slave1 --ip 172.18.0.3 --add-hostmaster:172.18.0.2 --add-hostslave2:172.18.0.4 --add-hostslave3:172.18.0.5 -itd -v /cgsrc:/cgsrc:ro hadoop_node /service_start.sh docker run --name slave2 --privileged --ulimit nofile65535:65535 --hostname slave2 --ip 172.18.0.4 --add-hostmaster:172.18.0.2 --add-hostslave1:172.18.0.3 --add-hostslave3:172.18.0.5 -itd -v /cgsrc:/cgsrc:ro hadoop_node /service_start.sh docker run --name slave3 --privileged --ulimit nofile65535:65535 --hostname slave3 --ip 172.18.0.5 --add-hostmaster:172.18.0.2 --add-hostslave1:172.18.0.3 --add-hostslave2:172.18.0.4 -itd -v /cgsrc:/cgsrc:ro hadoop_node /service_start.shdocker run创建并启动一个docker容器--name master容器的名字叫做master--privileged赋予容器特权模式。允许它访问主机上所有设备--ulimit nofile65535.65535 设置容器的最大文件描述符数量软限制/硬限制。默认值较小Hadoop、HDFS等大数据组件会频繁打开文件/网络连接必须调高避免“too many open files”启动容器docker start容器的名字3.进入容器docker exec-it--privileged 容器的名字/bin/bash4.安装Java环境1.cd /usr/local第三周1.配置分布式模式HDFSNameNode1个DataNode多个SecondaryNameNode1个NameNode和SecondaryNameNode尽量不要安装在同一台服务器YARNResourceManager1个 NodeManager多个ResourceManager很消耗内存尽量不要和NameNodeSecondaryNameNode放在同一台机器上Hadoop1Hadoop2Hadoop3Hadoop4NameNodeDataNodeDataNodeDataNodeSecondaryNameNodeNodeManagerNodeManagerResourceManagerNodeManagerNodeManager2.ping ip地址ICMP协议测试两台计算机之间的连通性OSI第三层ping mastersshSecure Shell安全外壳协议一台电脑 ---另外一台电脑有密码客户端---服务端场景陈长湦寄一个箱子给高珊珊这个箱子比较私密中途不能让人打开。1.高珊珊打造了一把锁公钥和一把钥匙私钥。2.高珊珊把这把锁公钥给了陈长湦但是钥匙高珊珊自己藏好。把公钥放到服务器)3.陈长湦把箱子用高珊珊给他的锁锁上。用公钥加密4.箱子寄出去中途任何没有钥匙的人都打不开。5.只有高珊珊可以用她的钥匙打开。高珊珊客户端陈长湦服务端生成公钥和私钥ssh-keygen -t rsassh文件夹下的文件功能解释known_hosts记录ss访问过计算机的公钥public keyid_rsa生成的私钥id_rsa.pub生成的公钥authorized_key存放授权过的无密码登录服务器公钥将公钥文件追加到另一个文件authorized_keys中cat 。/id_rsa.pub /authorized_keys3.scp从一台电脑的-/.ssh/id_rsa.pub的文件复制到slave1这台电脑上用户是root2.2克隆安全拷贝1.从Hadoop102服务器上将本服务器的文件推给Hadoop103scp -r jdk1.8.0_212/ lotushadoop103:/opt/module/2.在Hadoop103服务器上操作将Hadoop102的文件拿过来scp -r lotus102:/opt/module/jdk1.8.0_212/ ./同理Hadoop也可以这么操作scp -r lotus102:/opt/module/hadoop-3.1.3/ ./3.在服务器上将102的文件拷贝到104scp -r lotushadoop102:/opt/module/* lotushadoop104/opt/module/master登录slave1slave2slave3免密slave1 登录到master没有密码实现场景在slave1里面执行命令ssh master就可以不输入密码master1.slave1先生成私钥和公钥2.slave1的公钥给到masterscp3.在master上公钥给放到~/.ssh/atuorized_keys4.去slave1里面测试ssh master安装Hadoop1.将hadoop包复制到/usr/local下面2.解压tar解压压缩-z使用gzip解压x解压文件v显示解压过程f制定文件名3.修改名字mv旧的名字 新名字mv hadoop-3.4.0 hadoop4.修改配置文件vim~/.bashrc在配置文件中1.bin存放操作命令具体包含如hdfsmapredyarn2.etc所有配置文件配置集群环境/usr/local/hadoop/etc/hadoop/的配置文件workers(DataNode节点core-site.xml整个集群的核心配置hdfs-site.xml配置hdfsmapred-site.xml配置mapreduceyarn-site.xml配置yarnhadoop-env.sh1.编辑workersvimworkersmaster slave1 slave2 slave32.修改core-site.xml configuration !--默认文件系统的URI地址内部接口 -- property namefs.defaultFS/name valuehdfs://master:9000/value /property !--临时工作目录默认一个月就删除 -- property namehadoop.tmp.dir/name valuefile:/usr/local/hadoop/tmp/value /property /configuration configuration !-- secondary namenode-- property namedfs.namenode.secondary.http-address/name valuemaster:50090/value /property !-- hdfs存数据的份数-- property namedfs.replication/name value3/value /property !-- namenode元数据所在的物理地址-- property namedfs.namenode.name.dir/name valuefile:/usr/local/hadoop/tmp/dfs/name/value /property !-- datanode数据所存储的物理地址-- property namedfs.datanode.data.dir/name valuefile:/usr/local/hadoop/tmp/dfs/data/value /property /configurationconfiguration !-- mapreduce程序运行在yarn上 -- property namemapreduce.framework.name/name valueyarn/value /property !-- job的历史服务器端地址内部通讯端口 -- property namemapreduce.jobhistory.address/name valuemaster:10020/value /property !-- 历史服务器web端地址 -- property namemapreduce.jobhistory.webapp.address/name valuemaster:19888/value /property /configuration5.任务 配置yarnconfiguration -- 指定resource Manager的主机名在master上 -- property nameyarn.resourcemanager.hostname/name valuemaster/value /property -- NodeManager提供的辅助服务运行Mapreduce必配-- property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property -- NodeManager监控本地磁盘的健康状况磁盘上限98.5%-- property nameyarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage/name value98.5/value /property /configuration配置slave节点1.将/usr/local/下面的hadoop文件压缩成hadoop.master.tar.gz,并放到root文件下tar -zcf ~/hadoop.master.tar.gz ./hadoop2.将master这台机器上的root/hadoop.master.tar.gz这个压缩包上传复制到3.将~/hadoop.master.tar.gz的这个文件解压3.环境测试启动hdfs start-dfs.shnamenode(1个 secondary namenode一个 datanodeslave1 slave2 slave3 masterresoucemanager(1个 nodemanagermasterslave123启动顺序start-dfs.sh -- start-yarn.sh关闭顺序stop-yarn.sh -- stop-dfs.sh172.18.0.2:98709870是默认的web端访问hdfs的端口号 172.18.0.2(namenode所在机器的ip172.18.0.2:8088 172.18.0.2resouce manager所在电脑的ip地址8088是默认的web端访问yarn端的端口号测试hdfs上传文件1.创建一个本地文件zrw.txt2.创建一个hdfs的文件夹3.将本地文件上传到hdfs系统里面的文件夹里4.查看文件是否上传成功引入QQ邮箱 2330551568qq.com 逻辑地址并不是真正意义上存放文件的地址物理地址真实存放文件的地址hdfs系统逻辑地址/zInput/zrw.txt物理地址:hdfs里面配置了 /usr/local/hadoop/tmp/dfs/datafile/usr/local/hadoop/tmp/dfs/data问题hdfs存放数据datanode是真正存放数据的节点。hdfs默认存三份master slave1 slave2 slave3存在那几台机器上了测试大文件上传1.本地有一个大文件cp被复制文件的地址和文件名粘贴到哪儿的地址2.在HDFS系统里面创建一个新的文件3.本地大文件上传到新的文件夹4.查看反思hdfs系统存放文件是按照块存储。如果是大文件分成多个块分别存储。hdfs /bigFiles/jkd-8u171-linux-x64.tar.gz物理地址实际存放的位置 /usr/local/hadoop/tmp/dfs/data hdfs-site.xmlcat blk_1073741826 tmp.tar.gz 将blk_1073741827 tmp.tar.gztar -zxvf tmp.tar.gzwordcount测试上节课上传了小文件上传到HDFS/minput/lotus.txt),我们统计这个文件里面每个单词出现的频率。1.确保你的HDFS系统里面/minput/lotus.txt这个文件是存在的property nameyarn.app.mapreduce.am.env/name valueHADOOP_MAPRED_HOME/usr/local/hadoop/value /property property namemapreduce.map.env/name valueHADOOP_MAPRED_HOME/usr/local/hadoop/value /property property namemapreduce.reduce.env/name valueHADOOP_MAPRED_HOME/usr/local/hadoop/value /property2.测试wordcount是否可以执行成果cd /usr/local/hadoop/share/hadoop/mapreduce/hadoop jar hadoop-mapreduce-examples-3.4.0.jar wordcount /zInput/lotus.txt /zOutputhadoop jar jar包的名字 调用方法的名字wordcount 输入路径/zInput/lotus.txt这个输入文件必须存在 输出路径必须不存在如果以及存在会报错3.解读wordcount运行过程和结果展示mapreduce map reduce是否成功job completed successfully多了一个mOutput说明有输出查看结果hadoop fs -cat 文件路径和文件名4.面试重点1.常用端口号hadoop3.XHDFS NameNode内部通常端口8020/9000/9820HDFS NameNode对用户的查询端口9870Yarn查看恩物运行情况的端口8088历史服务器19888hadoop2.XHDFS NameNode内部通常端口8020/9000HDFS NameNode对用户的查询端口50070Yarn查看恩物运行情况的端口8088历史服务器198882.常用的配置文件3.x core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml workers (/hadoop/etc/hadoop)2.x core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml slavesHDFS一、HDFS概述1.1 HDFS产生背景随着数据量越来越大在一个操作系统存不下所有的数据那么就分配到更多的操作系统管理的磁盘中但是不方便管理和维护迫切需要一种系统来管理多台机器上的文件这就是分布式文件管理系统。HDFS只是分布式文件系统管理中的一种。1.2 HDFS定义HDFSHadoop Distributed File System它是一个文件系统用于存储文件通过目录树来定位文件其次它是分布式的由很多服务器联合起来实现其功能集群中的服务器有各自的角色。HDFS的使用场景适合一次写入多次读出的场景且不支持文件的修改适合用来做数据分析并不适合来做网盘应用。1.3 HDFS的优缺点优点1高容错性数据自动保存多个副本。它通过增加副本的形式提高容错性。某一个负样本丢失以后它可以自动恢复。2适合处理大数据数据规模能够处理数据规模达到GB、TB、甚至PB级别的数据文件规模能够处理百万规模以上的文件数量数量相当之大。3可构建在廉价机器上通过多副本机制提高可靠性。缺点1不适合低延时数据访问比如毫秒级的存储数据是做不到的。2无法高效的对大量小文件进行存储。存储大量小文件的话他会占用NameNode大量的内存来存储文件目录和块信息。这样是不可取的因为NameNode的内存总是有限的理解 书包含目录和内容小文件存储的寻址时间会超过读取时间它违反了HDFS的设计目标。3不支持并写入文件随即修改。一个文件只能有一个写不允许多个线程同时写仅支持数据append追加不支持文件的随机修改。1.4 HDFS组成架构NameNode(nn):就是Master老板它是一个主管、管理者。管理HDFS的名称空间配置副本策略管理数据块的映射信息处理客户端的读写请求。DataNode就是Slave。NameNode下达命令。DataNode执行实际的操作。存储实际的数据块。执行数据块的读/写操作。Client就是客户端文件切分。文件上传HDFS的时候Cilent将文件切分成一个一个Block然后进行上传。 我上传zrw.txt文件文件大小为200M正常默认一个Block 134217728B/1024/1024128M存两个Block第一个128M第二个72M与NameNode交互获取文件的位置信息与DataNode交互读取或者写入数据Cilent提供一些命令来管理HDFS比如NameNode增删改查操作Cilent可以通过一些命令来访问HDFS比如对HDFS增删改查操作。Secondary NameNode并非NameNode的设备当NameNode挂掉的时候它不能马上替换NameNode并提供服务。 没有解释作业Fsimage和Edits是干什么的原理是什么辅助NameNode分担其工作量比如定期合并Fsimage和Edits并推送给NameNode在紧急情况下可辅助恢复NameNode。作业Fsimage和Edits内存优点快 缺点断电容易丢失edits编辑文件硬盘 Fsimage为了防止断电数据丢失会落盘为fsimage以上内容全部存为fsimage1edits12026年4月14日1030——1040 新的东西edits22026年4月14日1030——1050 新的东西Secondary NameNodefsimage2fsimage1edits1edits2同步传给NameNode会存fsimage2namenodesecondary namenode只不过namenode会多一个edits inprogress1. namenode fsimage edits 会跟secondarynamenode同步2. fsimage edits加起来得到一个新的fsimage传回给namenodenamenode物理地址/usr/local/hadoop/tmp/dfs1.5 HDFS文件块大小面试重点HDFS中的文件在物理上分块存储Block块的大小可以通过参数配置dfs.blocksize)来规定默认大小在Hadoop2.X版本是128M老版本是64M。block1 block2 block3 block4 ......block65 block661.如果寻址时间约为10ms即找到目标block的时间为10ms计算机组成原理2.寻址时间为传输时间的1%时则为最佳状态。传输时间10ms/0.011000ms1s3.目前磁盘的传输速率普遍为100MB/s 块大小100MB/s*1s100M 128M普通机械磁盘 80M/s-90M/s 块大小80-90M 128M64M固定磁盘 200M/s-300M/s 块大小200M-300M 256M思考为什么块的大小不能是指太小也不能设置太大?(1)HDFS的块设置太小会增加寻址时间程序一直在找 块的开始位置。找目标块2如果块设置的太大从磁盘传输数据的时间会明显大于定位这个块开始位置的时间寻址时间。导致程序在处理这块数据时会非常慢。总结: HDFS块的大小设置主要取决于磁盘的传输速率。1.6 HDFS的Shell操作10分1.基本的语法bin/hadooop fs 具体命令bin/hdfs dfs 具体命令两个完全相同2.常用命令0 启动Hadoop集群sbin/start-dfs.sh 启动hdfs系统sbin/start-yarn.sh 启动yarn1-help输出这个命令参数hadoop fs -help rm 输出rm这个命令相关的解释错误重启2 -ls显示目录信息3-mkdir 在HDFS上创建文件夹hadoop fs -mkdir -p /wangzherongyao/zhonglu4-moveFromLocal从本地剪切粘贴到HDFS1.本地有一个文件touch buzhihuowu.txt 创建buzhihuowu.txt这个空文件2.将本地的文件剪切ctrlx粘贴到HDFS系统里面hadoop fs -moveFromLocal 本地文件HDFS的路径5-appendToFile追加一个文件到已经存在的文件末尾。第一组上单的英雄第二组中单第三组发育第四组辅助第五组打野第六组中单1.本地文件一般是有内容的2.把本地文件的内容放到HDFS系统里面已经存在的文件的末尾hadoop fs -appendToFile 本地文件HDFS的文件把本地文件的内容放到HDFS文件的末尾6-cat显示文件内容7-chgrpchmodchownLinux文件系统中的用法一样修改文件所属权限chchangegrpgroup分组modmode权限ownowner拥有者charp [R] 组名 文件或者目录名更改文件/目录所属的用户组hadoop fs -chgrp 新改的组名 文件或者文件夹chown修改文件/目录所有者hadoop fs -chown 更改为所有者组名 文件或者文件夹chmod [用户类别] [操作符] [权限] 文件/目录 修改文件/目录的权限1.用户类别u:所有者userg:所属者组groupo其他用户othersa所有用户all默认值2.操作符添加权限-移除权限直接设置权限覆盖原有的权限3.权限r读w写x执行 -代表没有权限原有的权限命令现有的权限user原本rw-chmod ux script.shuser的权限rwxgroup的权限rw-chmod g-w data.txtgroup的权限r--others的权限rwxchmod or file.txtothers的权限是r--数字模式chmod[数字组合]文件/目录1.权限对应数字r读4w写2x执行1-无权限02.数字组合规则将三类用户所有者组其他用户的权限得到三位数字第一位所有者权限第二位组权限第三位:其他用户权限例1rwxr-xr--所有者rwx 4217组r-x 4015其他用户r-- 4004chmod 754 file.txt例2rw-r--r--所有者rw- 6组r-- 4其他用户r-- 4004chmod 644 file.txt8-copyFromLocal从本地文件系统中拷贝文件到HDFS路径去9 -copyToLocal从HDFS拷贝到本地10-cp从HDFS的一个路径拷贝到HDFS的另一个路径1.创建一个其他分路的文件夹游走2.我们把王昭君从中路复制一个到游走11 -mv在HDFS目录中移动文件1.先在HDFS创建一个打野的文件夹。2.把不知火舞从中路移到打野的位置。(12)-get:等同于copyToLocal从HDFS下载文件到本地hadoop fs -get hdfs系统里面的文件 下载到本地的存放路径13 -put:等同于copyFromLocal。上传本地文件到HDFS系统里面。hadoop fs -put 本地文件HDFS系统的存放路径14-tail显示一个文件的末尾15-rm删除文件或文件夹hadoop fs -rm -r /zOutput Deleted /zOutput(16) -du 统计文件夹的大小信息作业查一下解释17-setrep设置HDFS文件的副本数量1.7 HDFS客户端操作 开发重点mastershellslave1slave2slave3hdfs客户端代码集群外的一台电脑法1pom.xmlpackage org.zrw; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.junit.Test; import java.io.IOException; import java.net.URI; public class HdfsClient { Test public void testMkdir() throws IOException, InterruptedException { //1.创建HDFS的客户端对象filesSystem 发送了uri网址配置对象用户请求连接集群 //2.登录hdfs成功可以对HDFS做操作所以我在HDFS系统里创建了一个aiqinggongyu的文件夹 fileSystem.mkdirs(new Path(/aiqinggongyu)); //.3退出登录关闭资源 fileSystem.close(); } }法2log4j2.xmlpackage org.zrw; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.junit.Test; import java.io.IOException; import java.net.URI; public class HdfsClient { Test public void testMkdir() throws IOException, InterruptedException { //1.创建HDFS的客户端对象filesSystem 发送了uri网址配置对象用户请求连接集群 URI urinew URI“hdfs://172.18.0.2:9000); configuration confnew configuration(); string userroot; FileSystem fileSystemFileSystem.get(uri,conf,user1); //2.登录hdfs成功可以对HDFS做操作所以我在HDFS系统里创建了一个aiqinggongyu的文件夹 fileSystem.mkdirs(new Path(/aiqinggongyu)); //.3退出登录关闭资源 fileSystem.close(); } }