1.1大数据技术发展①大数据技术要面对的基本问题也是最核心的问题就是是海量数据如何可靠存储和高效计算②易观OLAP比赛可不记1.2Goole的“三驾马车”一台计算机变成多台计算机①GFS:The Google File System 一种分布式文件系统用于处理大规模数据密集型应用MapReduce:Simplified Data Processing on Large Clusters 大型集群上的简单数据处理Bigtable:A Distributed Storage System for Structured Data 一个分布式的结构化数据存储系统②Chunk Server是存数据Master是管理GFS架构1GFS Master节点管理所有的文件系统元数据包括命名空间、访问控制权、文件和块的映射信息以及当前块的位置信息。2GFS存储的文件都被分割成固定大小的块每个块都会被复制到多个块服务器上可靠性。块的冗余度默认为33GFS Master还管理着系统范围内的活动比如块服务器之间的数据迁移等4GFS Master 与每个块服务器通信发送心跳包发送指令。获取状态副本的位置选择的策略要满足两个目标最大化数据的可靠性和可用性。③MapReduce的思想————————————————MapReduce采用“分而治之”的思想把对大规模数据集的操作分发给一个主节点管理下的各个子节点共同完成然后整合各个子节点的中间结果得到最终的计算结果。MapReduce就是“分散任务汇总结果”。Map的输出是Reduce的输入④BigTable1.3Hadoop1.3.1Hadoop的概述①hadoop是什么1hadoop是一个由Apache基金会所开发的分布式计算基础框架。2主要解决海量数据的存储和海量数据的分析计算问题。3广义上来讲Hadoop通常是指一个更广泛的概念--Hadoop生态圈。②Hadoop根据是Google的三篇论文实现HDFS → GFSMapReduce → MapReduceHBase → BigTable1HDFSHadoop Distributed File System,是Hadoop项目的核心子项目是分布式计算中数据存储管理的基础1.3.3Hadoop的演变1.3.4Hadoop优势高可靠性底层维护多个数据副本即使Hadoop某个计算元素或存储出现故障也不会导致数据的丢死。高扩展性在集群分别配任务数据可方便的扩展数以千计的节点高效性在MapReduce的思想下Hadoop是并行工作的以加快任务处理速度高容错性能自动将失败的任务重新分配。1.3.5Hadoop生态圈组件功能HDFS分布式文件系统YARN资源管理和调度器MapReduce分布式并行编程模型HBaseHadoop上的非关系型的分布式数据库HiveHadoop上的数据仓库Pig一个基于Hadoop的大规模数据分析平台提供类似SQL的查询语言Pig LatinFlume一个高可用高可靠的分布式的海量日志采集、聚合和传输的系统Sqoop用于Hadoop与传统数据库之间进行数据传递Zookeeper提供分布式协调一致性服务Spark类似于HadoopMapReduce的通用并行框架1.4Hadoop的组成1.4.1HDFS架构概述Hadoop图1NameNode存储文件的元数据如文件名、文件目录结构、文件属性生成时间副本数文件权限以及每个文件的快列表和快所爱的DataNode。DataNode在本地文件系统存储文件块数据以及块数据的校验和。Secondary NameNode每隔一段时间对NameNode元数据备份。1.4.2ResourceManager整个集群资源(内存cpu等的老大。NodeManager单个节点服务器资源老大ApplicationMaster单个任务的老大1.负责数据切分2.为应用程序申请资源并分配内部认为3.任务的监控与容错Container容器相当于一台独立的服务器里面封装了任务运行所需要的资源如内存cpu磁盘网络等。1.4.3Mapreduce架构Mapreduce将计算机过程分为两个阶段Map和ReduceMap阶段并行处理输入数据Reduce阶段对Map结果进行汇总启动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.sh1.docker run创建并启动了一个docker容器-name master容器名字叫master-privileged赋予容器特权模式允许访问主机设备常用于需要内核级操作的场景-ulimit nofile6553565535 设置文件最大描述符数量软限制/硬限制限制为65535默认值较小HadoopHDFS等大数据组件会频繁打开文件网络连接必须调高避免too many open files错误高并发场景下的资源不足问题。集群很多电脑组成的一个集合2.docker ps 查看所有启动的容器docker start容器名字3.进入容器docker exec-it-privileged容器的名字/bin/bash安装Java环境1.创建Java文件夹cd /usr/local/java/ tar -zxvf jdk-8u171-linux-x64.tar.gz rm -f jdk-8u171-linux-x64.tar.gz1.cd/usr/localmkdir 创建文件夹mkdir /usr/local/java cp /cgsrc/jdk-8u171-linux-x64.tar.gz /usr/local/java/2.cp 被复制文件位置 最后文件放到的位置3.解压tar-zxvf压缩包的名字4.删除rm -f要删除的文件5.编辑环境变量编辑文件的内容vimvim文件的名字vim~/.bashrc输入 i 进入编辑模式末尾粘贴export JAVA_HOME/usr/local/java/jdk1.8.0_171 export CLASSPATH.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar export PATH$PATH:${JAVA_HOME}/bin6.让环境变量生效按Esc输入“wq ”保存并退出vimsource ~/.bashrc验证slave1slave2slave3注意1.配置分布式模式HDFSNameNode1个DataNote多个SecondaryNode1个NameNode和SecondaryNode尽量不要安装在同一台服务器YARNResourceManager1个NodeManager多个ResourceManager很消耗内存尽量不要和NameNodeSecondaryNameNode放同一台机器上hadoop1hadoop2hadoop3hadoop4NameNodeDataNodeDataNodeDataNodeSecondaryNameNodeNodeManagerNodeManagerResourceManagerNodeManagerNodeManager2.ping ip地址ICMP协议测试两台计算机之间连通性OSI第三层ping mastersshSecure Shell安全外壳协议一套电脑 --(控制另外一套电脑有密码客户端--》服务端场景王俊凯寄一个箱子给高姗姗这个箱子比较私密中途不能让人打开。1.高姗姗打造了一把锁公钥和一把钥匙私钥。2.高姗姗把这把锁公钥给王俊凯但是钥匙私钥)高姗姗自己藏好。把公钥放到服务器3.王俊凯把箱子用高姗姗给他的锁锁上了。用公钥加密4.箱子寄出去中途任何没有钥匙的人都打不开。5.只有高姗姗可以用她的钥匙打开。高姗姗客户端王俊凯服务端流程图1.生成公钥和私钥ssh-keygen -t rsa.ssh文件下的文件功能解释know_hosts记录ssh访问过计算机的公钥public keyid_rsa生成的私钥id_rsa.pub生成的公钥authorized_keys存放授权过的无密码登陆服务器公钥2.将公钥文件追加到另一个文件cat ./id_rsa.pub /authorized_keys3.scp从一台电脑的~/.ssh/id_rsa.pub的文件复制到slave1这台电脑上用户是root放到了slave1里面的/root这个路径下面scp ~/.ssh/id_rsa.pub rootslave1:/root1.从Hadoop102服务器上将本文服务器的文件推给Hadoop103scp -r jdk1.8.0_212/ ~/ lotushadoop103:/opt/module2.从Hadoop103服务器上操作将Hadoop102文件拿过来scp -r lotushadoop102:/opt/module/jdk1.8.0_212/ ./同理Hadoop也可以这么操作scp -r lotushadoop102:/opt/module/hadoop-3.1.3/ ./3.在103服务器上将102文件拷贝到104scp -r lotushadoop102:/opt/module/* lotushadoop104:/opt/module/master登录slave1.slave2slave3免密slave1登录到master没有密码实现场景在slave1执行命令 ssh master就可以不输密码master1.slave生成私钥公钥2.slave1的公钥给masterscp3.在master上 公钥给放到~/.ssh/authorized_keys4.去slave1里面测试ssh master5.删掉slave1传到master上的公钥安装Hadoop1.将hadoop复制到/usr/local下面cp /cgsrc/hadoop-3.4.0.tar.gz /usr/local/解压tar解压压缩-z使用gzip解压x解压文件v显示解压过程f指定文件名tar -zxvf hadoop-3.4.0.tar.gzmv hadoop-3.4.0 hadoop3.mv 旧名字 新名字4.修改配置文件vim ~/.bash在配置文件添加Hadoop的相关路径export PATH$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin让配置文件生效[rootmaster local]# vim ~/.bashrc [rootmaster local]# source.~/.bashrc1.bin存放操作命令具体包含如hdfsmapredyarm2.etc所有配置文件3.include头文件4.lib本地库native库压缩的动态链接库5libexec拓展库6sbin集群相关的命令7share学习的资料文档配置集群环境/usr/local/hadoop/etc/hadoop/的配置环境workers(DateNode节点core-site.xml整个集群核心配置hdlfs-site.xml配置hdfsmapred-site.xml配置mapredyarn-site.xml配置yarnhadoop-env.sh1.编辑workersvim workersmasterslave1slave2slave32.修改core-site.xmlconfiguration ! --默认文件系统的URI地址内部接口 -- property namefs.defaultFS/name valuehdfs://master:9000/value /property !--临时工作目录默认一个月就删除 -- property namehadoop.tmp.dir/name valuefile:/usr/local/hadoop/tmp/value /property /configuration3.修改文件hdfs-site.xmlconfiguration !--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 /configuration4.修改文件mapred-site.xmlconfiguration !-- 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..修改文件yarn-site.xmlconfiguration !--指定ResourceManager的主机名及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 /configuration6..修改文件hadoop-env.shexport JAVA_HOME/usr/local/java/jdk1.8.0_171 export HADOOP_CONF_DIR/usr/local/hadoop/etc/hadoop配置slave节点1.将/usr/local/下面的Hadoop文件压缩成hadoop。master.tar.gz,并放在root文件夹下tar -zcf ~/hadoop.master.tar.gz ./hadoop2.将master这台机器上的root/hadoop.master.tar.gz这个压缩包上传复制到slave1这台电脑的/root路径下并且登录slave1的账户是root3.将~/hadoop.master.tar.gz的这个文件解压而且解压到/usr/local文件夹下面作业查-z c x v f 代表什么tar -zxvf ~/hadoop.master.tar.gz -C /usr/local/格式化节点配置集群的时候执行一次hdfs namenode -format启动hdfsstart-dfs.shmaster节点namenode secondarynamenode DataNodeworker如果有localhost就有slave123DataNode说明core-site.xml hdfs-site.xml有问题172.18.0.2:9870(ip地址启动yarm必须是在启动了hdfs的前提条件下start-yarm.sh(usr/local/hadoop/sbin) stop-yarn.shmaster节点resuorcemanagernodemanagerslave123nodemanager172.18.0.2:80883.环境测试启动hdfs start-dfs.shnamenode(1个) secondary namenode(1个) datanode(slave1,slave2,slave3,master)启动yarn start-yarn.shresoucemanager(1个) nodemanager(slave1,slave2,slave3,master)启动顺序start-dfs.sh --》start-yarn.sh关闭顺序stop-yarn.sh --stop-dfs.sh172.18.0.2:9870 172.18.0.2namenode所在机器的ip 9870是默认的web端访问hdfs的端口号172.18.0.2:8088 172.18.0.2resource manager所在电脑的ip地址8088是默认的web端访问yarng的端口号测试hdfs上传文件每一步代码截图加解释1.创建一个本地文件high.txtvi 文件名名字2.创建一个hdfs的文件夹hadoop fs -mkdir 文件夹路径和名字3.将本地文件上传到hdfs系统里面的文件夹里hadoop fs -put 本地文件的路径和名字 要上传到hdfs这个系统的具体路径4.查看文件是否上传成功引入QQ邮箱 3503286860qq.com 逻辑地址并不是真正意义上存放的地址物理地址真实存放文件的地址hdfs系统逻辑地址/gInput/high.txt物理地址:hdfs里面配置了 /usr/local/hadoop/tmp/dfs/datafile:/usr/local/hadoop/tmp/dfs/data/usr/local/hadoop/tmp/dfs/data/current/BP-522517698-172.18.0.2-1774322483887你自己的id/current/finalized/subdir0/subdir0问题hdfs存放数据datanode真正存放数据的节点。hdfs默认存三份materslave123存在哪几台机器上了如下图存放位置在masterslave1slave2上面上传大文件本地有一个大文件cd /usr/local/java/:进入/usr/local/java这个目录ls查看目录下子文件cp被复制文件的地址和文件名 粘贴到哪儿的地址复制文件cd /回到最顶层根目录ls查看在hdfs系统创建一个新的文件夹。hadoop fs -mkdir /文件名字bigFiles在hadoop的web UI界面里查看HDFS目录内容​本地大文件上传到新的文件夹Hadoop fs -put 源文件绝对路径 HDFS目标目录上传到文件夹​查看反思hdfs系统存放文件是按照块存储。如果是大文件分成多个块分别存储。hdfs/bigFiles/jdk-8u171-linux-x64.tar.gz物理地址:hdfs里面配置了 /usr/local/hadoop/tmp/dfs/datawordcount测试主任务上传到/gInput/high.txt/统计文件每个单词出现的频率1.确保你的HDFS系统里面/gInput/high.txt这个文件是存在的副任务修改配置文件mapreduce-site.xmlvim mapred-site.xmlcat mapred-site.xmlconfiguration !-- 指定MapReduce运行在YARN上 -- property namemapreduce.framework.name/name valueyarn/value /property !-- JobHistory Server服务地址 -- property namemapreduce.jobhistory.address/name valuemaster:10020/value /property !-- JobHistory Web UI地址 -- property namemapreduce.jobhistory.webapp.address/name valuemaster:19888/value /property !-- ApplicationMaster环境变量 -- property nameyarn.app.mapreduce.am.env/name valueHADOOP_MAPRED_HOME/usr/local/hadoop/value /property !-- Map任务环境变量 -- property namemapreduce.map.env/name valueHADOOP_MAPRED_HOME/usr/local/hadoop/value /property !-- Reduce任务环境变量 -- property namemapreduce.reduce.env/name valueHADOOP_MAPRED_HOME/usr/local/hadoop/value /property /configuration2.测试wordcount是否可以执行成果cd /usr/local/hadoop/share/hadoop/mapreducehadoop jar jar包的名字 调用方法的名字 wordcount 输入路径gInput/high.txt这个输入文件必须存在 输出路径必须不存在存在会报错3.解读wordcount运行过程和结果展示mapreducemapreduce是否成功job completed successfully1.常用端口