极速网站建设哪家好,暴富建站,网站建设培训会上的讲话,seo佛山第1章 Hadoop概述1.1 Hadoop是什么1.2 Hadoop发展历史#xff08;了解#xff09;1.3 Hadoop三大发行版本#xff08;了解#xff09;Hadoop三大发行版本#xff1a;Apache、Cloudera、Hortonworks。Apache版本最原始#xff08;最基础#xff09;的版本#xff0c;对于…第1章 Hadoop概述1.1 Hadoop是什么1.2 Hadoop发展历史了解1.3 Hadoop三大发行版本了解Hadoop三大发行版本Apache、Cloudera、Hortonworks。Apache版本最原始最基础的版本对于入门学习最好。2006Cloudera内部集成了很多大数据框架对应产品CDH。2008Hortonworks文档较好对应产品HDP。2011Hortonworks现在已经被Cloudera公司收购推出新的品牌CDP。1Apache Hadoop官网地址http://hadoop.apache.org下载地址https://hadoop.apache.org/releases.html2Cloudera Hadoop官网地址https://www.cloudera.com/downloads/cdh下载地址https://docs.cloudera.com/documentation/enterprise/6/release-notes/topics/rg_cdh_6_download.html12008年成立的Cloudera是最早将Hadoop商用的公司为合作伙伴提供Hadoop的商用解决方案主要是包括支持、咨询服务、培训。22009年Hadoop的创始人Doug Cutting也加盟Cloudera公司。Cloudera产品主要为CDHCloudera ManagerCloudera Support3CDH是Cloudera的Hadoop发行版完全开源比Apache Hadoop在兼容性安全性稳定性上有所增强。Cloudera的标价为每年每个节点10000美元。4Cloudera Manager是集群的软件分发及管理监控平台可以在几个小时内部署好一个Hadoop集群并对集群的节点及服务进行实时监控。3Hortonworks Hadoop官网地址https://hortonworks.com/products/data-center/hdp/下载地址https://hortonworks.com/downloads/#data-platform12011年成立的Hortonworks是雅虎与硅谷风投公司Benchmark Capital合资组建。2公司成立之初就吸纳了大约25名至30名专门研究Hadoop的雅虎工程师上述工程师均在2005年开始协助雅虎开发Hadoop贡献了Hadoop80%的代码。3Hortonworks的主打产品是Hortonworks Data PlatformHDP也同样是100%开源的产品HDP除常见的项目外还包括了Ambari一款开源的安装和管理系统。42018年Hortonworks目前已经被Cloudera公司收购。1.4 Hadoop优势4高1.5 Hadoop组成面试重点1.5.1 HDFS架构概述Hadoop Distributed File System简称HDFS是一个分布式文件系统。1.5.2 YARN架构概述Yet Another Resource Negotiator简称YARN 另一种资源协调者是Hadoop的资源管理器。1.5.3 MapReduce架构概述MapReduce将计算过程分为两个阶段Map和Reduce1Map阶段并行处理输入数据2Reduce阶段对Map结果进行汇总1.5.4 HDFS、YARN、MapReduce三者关系1.6 大数据技术生态体系图中涉及的技术名词解释如下1SqoopSqoop是一款开源的工具主要用于在Hadoop、Hive与传统的数据库MySQL间进行数据的传递可以将一个关系型数据库例如MySQLOracle 等中的数据导进到Hadoop的HDFS中也可以将HDFS的数据导进到关系型数据库中。2FlumeFlume是一个高可用的高可靠的分布式的海量日志采集、聚合和传输的系统Flume支持在日志系统中定制各类数据发送方用于收集数据 3KafkaKafka是一种高吞吐量的分布式发布订阅消息系统 4SparkSpark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算。5FlinkFlink是当前最流行的开源大数据内存计算框架。用于实时计算的场景较多。6OozieOozie是一个管理Hadoop作业job的工作流程调度管理系统。7HbaseHBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库它是一个适合于非结构化数据存储的数据库。8HiveHive是基于Hadoop的一个数据仓库工具可以将结构化的数据文件映射为一张数据库表并提供简单的SQL查询功能可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低可以通过类SQL语句快速实现简单的MapReduce统计不必开发专门的MapReduce应用十分适合数据仓库的统计分析。9ZooKeeper它是一个针对大型分布式系统的可靠协调系统提供的功能包括配置维护、名字服务、分布式同步、组服务等。1.7 推荐系统框架图第2章 Hadoop运行环境搭建开发重点2.1 模板虚拟机环境准备0安装模板虚拟机IP地址192.168.10.100、主机名称hadoop100、内存4G、硬盘50G1hadoop100虚拟机配置要求如下本文Linux系统全部以CentOS-7.5-x86-1804为例1使用yum安装需要虚拟机可以正常上网yum安装前可以先测试下虚拟机联网情况[roothadoop100 ~]# ping www.baidu.com
PING www.baidu.com (14.215.177.39) 56(84) bytes of data.
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq1 ttl128 time8.60 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq2 ttl128 time7.72 ms2安装epel-release注Extra Packages for Enterprise Linux是为“红帽系”的操作系统提供额外的软件包适用于RHEL、CentOS和Scientific Linux。相当于是一个软件仓库大多数rpm包在官方 repository 中是找不到的[roothadoop100 ~]# yum install -y epel-release3注意如果Linux安装的是最小系统版还需要安装如下工具如果安装的是Linux桌面标准版不需要执行如下操作net-tool工具包集合包含ifconfig等命令[roothadoop100 ~]# yum install -y net-tools vim编辑器[roothadoop100 ~]# yum install -y vim2关闭防火墙关闭防火墙开机自启[roothadoop100 ~]# systemctl stop firewalld
[roothadoop100 ~]# systemctl disable firewalld.service 注意在企业开发时通常单个服务器的防火墙时关闭的。公司整体对外会设置非常安全的防火墙3创建atguigu用户并修改atguigu用户的密码[roothadoop100 ~]# useradd atguigu
[roothadoop100 ~]# passwd atguigu4配置atguigu用户具有root权限方便后期加sudo执行root权限的命令[roothadoop100 ~]# vim /etc/sudoers修改/etc/sudoers文件在%wheel这行下面添加一行如下所示## Allow root to run any commands anywhereroot ALL(ALL) ALL## Allows people in group wheel to run all commands%wheel ALL(ALL) ALLatguigu ALL(ALL) NOPASSWD:ALL注意atguigu这一行不要直接放到root行下面因为所有用户都属于wheel组你先配置了atguigu具有免密功能但是程序执行到%wheel行时该功能又被覆盖回需要密码。所以atguigu要放到%wheel这行下面。5在/opt目录下创建文件夹并修改所属主和所属组1在/opt目录下创建module、software文件夹[roothadoop100 ~]# mkdir /opt/module[roothadoop100 ~]# mkdir /opt/software 2修改module、software文件夹的所有者和所属组均为atguigu用户 [roothadoop100 ~]# chown atguigu:atguigu /opt/module [roothadoop100 ~]# chown atguigu:atguigu /opt/software3查看module、software文件夹的所有者和所属组[roothadoop100 ~]# cd /opt/[roothadoop100 opt]# ll总用量12drwxr-xr-x. 2 atguigu atguigu 4096 5月 28 17:18 moduledrwxr-xr-x. 2 root root 4096 9月 7 2017 rhdrwxr-xr-x. 2 atguigu atguigu 4096 5月 28 17:18 software6卸载虚拟机自带的JDK 注意如果你的虚拟机是最小化安装不需要执行这一步。[roothadoop100 ~]# rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps rpm -qa查询所安装的所有rpm软件包grep -i忽略大小写xargs -n1表示每次只传递一个参数rpm -e –nodeps强制卸载软件7重启虚拟机[roothadoop100 ~]# reboot2.2 克隆虚拟机1利用模板机hadoop100克隆三台虚拟机hadoop102 hadoop103 hadoop104 注意克隆时要先关闭hadoop1002修改克隆机IP以下以hadoop102举例说明1修改克隆虚拟机的静态IP[roothadoop100 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33改成 DEVICEens33TYPEEthernetONBOOTyesBOOTPROTOstaticNAMEens33IPADDR192.168.10.102PREFIX24GATEWAY192.168.10.2DNS1192.168.10.22查看Linux虚拟机的虚拟网络编辑器编辑-虚拟网络编辑器-VMnet83查看Windows系统适配器VMware Network Adapter VMnet8的IP地址4保证Linux系统ifcfg-ens33文件中IP地址、虚拟网络编辑器地址和Windows系统VM8网络IP地址相同。3修改克隆机主机名以下以hadoop102举例说明 1修改主机名称[roothadoop100 ~]# vim /etc/hostnamehadoop1022配置Linux克隆机主机名称映射hosts文件打开/etc/hosts[roothadoop100 ~]# vim /etc/hosts添加如下内容 192.168.10.100 hadoop100192.168.10.101 hadoop101192.168.10.102 hadoop102192.168.10.103 hadoop103192.168.10.104 hadoop104192.168.10.105 hadoop105192.168.10.106 hadoop106192.168.10.107 hadoop107192.168.10.108 hadoop1084重启克隆机hadoop102 [roothadoop100 ~]# reboot5修改windows的主机映射文件hosts文件1如果操作系统是window7可以直接修改 a进入C:\Windows\System32\drivers\etc路径 b打开hosts文件并添加如下内容然后保存 192.168.10.100 hadoop100192.168.10.101 hadoop101192.168.10.102 hadoop102192.168.10.103 hadoop103192.168.10.104 hadoop104192.168.10.105 hadoop105192.168.10.106 hadoop106192.168.10.107 hadoop107192.168.10.108 hadoop1082如果操作系统是window10先拷贝出来修改保存以后再覆盖即可a进入C:\Windows\System32\drivers\etc路径b拷贝hosts文件到桌面c打开桌面hosts文件并添加如下内容 192.168.10.100 hadoop100192.168.10.101 hadoop101192.168.10.102 hadoop102192.168.10.103 hadoop103192.168.10.104 hadoop104192.168.10.105 hadoop105192.168.10.106 hadoop106192.168.10.107 hadoop107192.168.10.108 hadoop108d将桌面hosts文件覆盖C:\Windows\System32\drivers\etc路径hosts文件2.3 在hadoop102安装JDK1卸载现有JDK注意安装JDK前一定确保提前删除了虚拟机自带的JDK。详细步骤见问文档3.1节中卸载JDK步骤。2用XShell传输工具将JDK导入到opt目录下面的software文件夹下面3在Linux系统下的opt目录中查看软件包是否导入成功[atguiguhadoop102 ~]$ ls /opt/software/看到如下结果jdk-8u212-linux-x64.tar.gz4解压JDK到/opt/module目录下[atguiguhadoop102 software]$ tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/5配置JDK环境变量 1新建/etc/profile.d/my_env.sh文件[atguiguhadoop102 ~]$ sudo vim /etc/profile.d/my_env.sh添加如下内容 #JAVA_HOMEexport JAVA_HOME/opt/module/jdk1.8.0_212export PATH$PATH:$JAVA_HOME/bin 2保存后退出:wq 3source一下/etc/profile文件让新的环境变量PATH生效[atguiguhadoop102 ~]$ source /etc/profile6测试JDK是否安装成功[atguiguhadoop102 ~]$ java -version如果能看到以下结果则代表Java安装成功。java version 1.8.0_212注意重启如果java -version可以用就不用重启[atguiguhadoop102 ~]$ sudo reboot2.4 在hadoop102安装HadoopHadoop下载地址https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/1用XShell文件传输工具将hadoop-3.1.3.tar.gz导入到opt目录下面的software文件夹下面2进入到Hadoop安装包路径下[atguiguhadoop102 ~]$ cd /opt/software/3解压安装文件到/opt/module下面[atguiguhadoop102 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/4查看是否解压成功[atguiguhadoop102 software]$ ls /opt/module/hadoop-3.1.35将Hadoop添加到环境变量 1获取Hadoop安装路径[atguiguhadoop102 hadoop-3.1.3]$ pwd/opt/module/hadoop-3.1.3 2打开/etc/profile.d/my_env.sh文件[atguiguhadoop102 hadoop-3.1.3]$ sudo vim /etc/profile.d/my_env.sh在my_env.sh文件末尾添加如下内容shiftg #HADOOP_HOMEexport HADOOP_HOME/opt/module/hadoop-3.1.3export PATH$PATH:$HADOOP_HOME/binexport PATH$PATH:$HADOOP_HOME/sbin保存并退出:wq 3让修改后的文件生效[atguiguhadoop102 hadoop-3.1.3]$ source /etc/profile6测试是否安装成功[atguiguhadoop102 hadoop-3.1.3]$ hadoop versionHadoop 3.1.37重启如果Hadoop命令不能用再重启虚拟机[atguiguhadoop102 hadoop-3.1.3]$ sudo reboot2.5 Hadoop目录结构1查看Hadoop目录结构 [atguiguhadoop102 hadoop-3.1.3]$ ll总用量52drwxr-xr-x. 2 atguigu atguigu 4096 5月 22 2017 bindrwxr-xr-x. 3 atguigu atguigu 4096 5月 22 2017 etcdrwxr-xr-x. 2 atguigu atguigu 4096 5月 22 2017 includedrwxr-xr-x. 3 atguigu atguigu 4096 5月 22 2017 libdrwxr-xr-x. 2 atguigu atguigu 4096 5月 22 2017 libexec-rw-r--r--. 1 atguigu atguigu 15429 5月 22 2017 LICENSE.txt-rw-r--r--. 1 atguigu atguigu 101 5月 22 2017 NOTICE.txt-rw-r--r--. 1 atguigu atguigu 1366 5月 22 2017 README.txtdrwxr-xr-x. 2 atguigu atguigu 4096 5月 22 2017 sbindrwxr-xr-x. 4 atguigu atguigu 4096 5月 22 2017 share2重要目录1bin目录存放对Hadoop相关服务hdfsyarnmapred进行操作的脚本2etc目录Hadoop的配置文件目录存放Hadoop的配置文件3lib目录存放Hadoop的本地库对数据进行压缩解压缩功能4sbin目录存放启动或停止Hadoop相关服务的脚本5share目录存放Hadoop的依赖jar包、文档、和官方案例第3章 Hadoop运行模式1Hadoop官方网站http://hadoop.apache.org/2Hadoop运行模式包括本地模式、伪分布式模式以及完全分布式模式。本地模式单机运行只是用来演示一下官方案例。生产环境不用。伪分布式模式也是单机运行但是具备Hadoop集群的所有功能一台服务器模拟一个分布式的环境。个别缺钱的公司用来测试生产环境不用。完全分布式模式多台服务器组成分布式环境。生产环境使用。3.1 本地运行模式官方WordCount1创建在hadoop-3.1.3文件下面创建一个wcinput文件夹[atguiguhadoop102 hadoop-3.1.3]$ mkdir wcinput2在wcinput文件下创建一个word.txt文件[atguiguhadoop102 hadoop-3.1.3]$ cd wcinput3编辑word.txt文件[atguiguhadoop102 wcinput]$ vim word.txt在文件中输入如下内容hadoop yarnhadoop mapreduceatguiguatguigu保存退出:wq4回到Hadoop目录/opt/module/hadoop-3.1.35执行程序[atguiguhadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput输入路径 wcoutput输出路径6查看结果[atguiguhadoop102 hadoop-3.1.3]$ cat wcoutput/part-r-00000看到如下结果atguigu 2hadoop 2mapreduce 1yarn 13.2 完全分布式运行模式开发重点分析 1准备3台客户机关闭防火墙、静态IP、主机名称 2安装JDK 3配置环境变量 4安装Hadoop 5配置环境变量 6配置集群 7单点启动 8配置ssh 9群起并测试集群3.2.1 虚拟机准备详见2.1、2.2两节。3.2.2 编写集群分发脚本xsync1scpsecure copy安全拷贝1scp定义scp可以实现服务器与服务器之间的数据拷贝。from server1 to server2简单说就是把一台虚拟机的内容服务到其他的虚拟机上2基本语法scp -r $pdir/$fname $user$host:$pdir/$fname命令 递归 要拷贝的文件路径/名称 目的地用户主机:目的地路径/名称3案例实操前提在hadoop102、hadoop103、hadoop104都已经创建好的/opt/module、 /opt/software两个目录并且已经把这两个目录修改为atguigu:atguigu[atguiguhadoop102 ~]$ sudo chown atguigu:atguigu -R /opt/module在hadoop102上将hadoop102中/opt/module/jdk1.8.0_212目录拷贝到hadoop103上。[atguiguhadoop102 ~]$ scp -r /opt/module/jdk1.8.0_212 atguiguhadoop103:/opt/module在hadoop103上将hadoop102中/opt/module/hadoop-3.1.3目录拷贝到hadoop103上。rm -rf jdk1.8.0_212/[atguiguhadoop103 ~]$ scp -r atguiguhadoop102:/opt/module/hadoop-3.1.3 /opt/module/在hadoop103上操作将hadoop102中/opt/module目录下所有目录拷贝到hadoop104上。[atguiguhadoop103 opt]$ scp -r atguiguhadoop102:/opt/module/* atguiguhadoop104:/opt/module2rsync远程同步工具rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。rsync和scp区别用rsync做文件的复制要比scp的速度快rsync只对差异文件做更新。scp是把所有文件都复制过去。也就是两个都是用了复制的rsync效率更高因为是差异复制这两个命令都要求目标路径不存在不然会报错 1基本语法rsync -av $pdir/$fname $user$host:$pdir/$fname命令 选项参数 要拷贝的文件路径/名称 目的地用户主机:目的地路径/名称 选项参数说明注意这里-av是组合在一起的不能拆开用选项功能-a归档拷贝-v显示复制过程2案例实操 a删除hadoop103中/opt/module/hadoop-3.1.3/wcinput这个文件[atguiguhadoop103 hadoop-3.1.3]$ rm -rf wcinput/ b同步hadoop102中的/opt/module/hadoop-3.1.3到hadoop103[atguiguhadoop102 module]$ rsync -av hadoop-3.1.3/ atguiguhadoop103:/opt/module/hadoop-3.1.3/3xsync集群分发脚本1需求循环复制文件到所有节点的相同目录下专门用了复制文件的可以把文件从一个虚拟机复制到多台虚拟机的相同目录下通常在多个虚拟机的情况下每一个虚拟机都被称为节点 2需求分析arsync命令原始拷贝写这个脚本的具体需求这个操作不用写只是根据这个来写下面的脚本rsync -av /opt/module roothadoop103:/opt/b期望脚本xsync要同步的文件名称例如xsync /home/saodai/binc期望脚本在任何路径都能使用脚本放在声明了全局环境变量的路径[roothadoop102 ~]$ echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/root/bin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin这里由于我没有使用echo $PATH命令后全局环境变量没有/home/saodai/bin所以我把脚本都放在了/usr/local/bin里面3脚本实现a在/home/atguigu/bin目录下创建xsync文件也就是一个脚本[saodaihadoop102 opt]$ cd /home/saodai/bin[saodaihadoop102 bin]$ vim xsync在xsync文件中编写如下代码看完这个代码可以发现xsync底层还是rsync这个脚本的作用就是把当前节点Hadoop102的文件同步到Hadoop103、Hadoop104上#!/bin/bash#1. 判断参数个数 $#是获取输入的参数个数
if [ $# -lt 1 ]
thenecho Not Enough Arguement!exit;
fi#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
doecho $host #3. 遍历所有目录挨个发送 $是获取所有的值可以理解为一个host数组for file in $do#4. -e是判断文件是否存在if [ -e $file ]then#5. 获取父目录 ;就是指的这是两句合在一起的先执行前面这句pdir$(cd -P $(dirname $file); pwd)#6. basename是获取当前文件的名称fname$(basename $file)#7.ssh是连接其他虚拟机的命令然后强制创建目录-p是强制的意思ssh $host mkdir -p $pdir#8.使用rsync复制到其他节点rsync -av $pdir/$fname $host:$pdirelseecho $file does not exists!fidone
doneb修改脚本 xsync 具有执行权限[saodaihadoop102 bin]$ chmod x xsyncc测试脚本编写脚本并且配置环境变量后就可以把这个脚本当命令来用后面接的路径就是要同步到其他节点的文件的路径[saodaihadoop102 ~]$ xsync /root/bind将脚本复制到/bin中以便全局调用[saodaihadoop102 bin]$ cp xsync /root/bin/e同步环境变量配置例如之前的在hadoop102配置的jdk和hadoop的环境变量同步到hadoop102、hadoop103上面去[roothadoop102 ~]$xsync /etc/profile.d/my_env.sh注意如果用了sudo那么xsync一定要给它的路径补全。让环境变量生效这里我没有这一步应该是直接用的root权限[saodaihadoop103 bin]$ source /etc/profile[saodaihadoop104 opt]$ source /etc/profile3.2.3 SSH无密登录配置1配置ssh(只有执行了ssh后在home路径下找到.ssh【要用ls -al查看】-al是指的查看隐藏文件)1基本语法ssh另一台电脑的IP地址2ssh连接时出现Host key verification failed的解决方法[atguiguhadoop102 ~]$ ssh hadoop103如果出现如下内容Are you sure you want to continue connecting (yes/no)? 输入yes并回车3退回到hadoop102[atguiguhadoop103 ~]$ exit2无密钥配置1免密登录原理 2生成公钥和私钥[atguiguhadoop102 .ssh]$ pwd
/home/atguigu/.ssh[atguiguhadoop102 .ssh]$ ssh-keygen -t rsa然后敲三个回车就会生成两个文件id_rsa私钥、id_rsa.pub公钥要到这个.ssh路径下才可以执行这两个命令3将公钥拷贝到要免密登录的目标机器上[atguiguhadoop102 .ssh]$ ssh-copy-id hadoop102[atguiguhadoop102 .ssh]$ ssh-copy-id hadoop103[atguiguhadoop102 .ssh]$ ssh-copy-id hadoop104注意还需要在hadoop103上采用atguigu账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。还需要在hadoop104上采用atguigu账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。还需要在hadoop102上采用root账号配置一下无密登录到hadoop102、hadoop103、hadoop1044测试连接其他虚拟机[saodaihadoop103 ~]$ ssh hadoop102
Last login: Sat Feb 25 12:01:02 2023 from hadoop104
[saodaihadoop102 ~]$ ssh hadoop104
Last login: Sat Feb 25 12:01:40 2023 from hadoop102
[saodaihadoop104 ~]$ .ssh文件夹下~/.ssh的文件功能解释known_hosts记录ssh访问过计算机的公钥public keyid_rsa生成的私钥id_rsa.pub生成的公钥authorized_keys存放授权过的无密登录服务器公钥3.2.4 集群配置1集群部署规划注意NameNode和SecondaryNameNode不要安装在同一台服务器ResourceManager也很消耗内存不要和NameNode、SecondaryNameNode配置在同一台机器上。 hadoop102 hadoop103hadoop104HDFS NameNodeDataNode DataNodeSecondaryNameNodeDataNodeYARN NodeManagerResourceManagerNodeManager NodeManager2配置文件说明Hadoop配置文件分两类默认配置文件和自定义配置文件只有用户想修改某一默认配置值时才需要修改自定义配置文件更改相应属性值。这四个核心配置文件在hadoop安装目录下的/etc/hadoop目录1默认配置文件要获取的默认文件文件存放在Hadoop的jar包中的位置[core-default.xml]hadoop-common-3.1.3.jar/core-default.xml[hdfs-default.xml]hadoop-hdfs-3.1.3.jar/hdfs-default.xml[yarn-default.xml]hadoop-yarn-common-3.1.3.jar/yarn-default.xml[mapred-default.xml]hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml2自定义配置文件 core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上用户可以根据项目需求重新进行修改配置。3配置集群1核心配置文件配置core-site.xml[atguiguhadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop[atguiguhadoop102 hadoop]$ vim core-site.xml文件内容如下 ?xml version1.0 encodingUTF-8??xml-stylesheet typetext/xsl hrefconfiguration.xsl?configuration!-- 指定NameNode的地址 --propertynamefs.defaultFS/namevaluehdfs://hadoop102:8020/value/property!-- 指定hadoop数据的存储目录 --propertynamehadoop.tmp.dir/namevalue/opt/module/hadoop-3.1.3/data/value/property!-- 配置HDFS网页登录使用的静态用户为saodai --propertynamehadoop.http.staticuser.user/namevaluesaodai/value/property/configuration这里注意在复制的时候要先从一般模式切换到写入模式再复制进去如果是在一般模式上写有时候会丢失内容这里解释一下上面的hadoop.http.staticuser.user配置的含义不配这个的话你在hadoop的hdfs提供的web页面是没有权限去删除里面的文件的然后这个配置就是赋予你这个saodai角色的权限这样就可以在web页面删除文件了2HDFS配置文件配置hdfs-site.xml[atguiguhadoop102 hadoop]$ vim hdfs-site.xml文件内容如下 ?xml version1.0 encodingUTF-8??xml-stylesheet typetext/xsl hrefconfiguration.xsl?configuration!-- nn web端访问地址--propertynamedfs.namenode.http-address/namevaluehadoop102:9870/value/property!-- 2nn web端访问地址--propertynamedfs.namenode.secondary.http-address/namevaluehadoop104:9868/value/property/configuration3YARN配置文件配置yarn-site.xml[atguiguhadoop102 hadoop]$ vim yarn-site.xml文件内容如下?xml version1.0 encodingUTF-8?
?xml-stylesheet typetext/xsl hrefconfiguration.xsl?configuration!-- 指定MR走shuffle协议 --propertynameyarn.nodemanager.aux-services/namevaluemapreduce_shuffle/value/property!-- 指定ResourceManager的地址--propertynameyarn.resourcemanager.hostname/namevaluehadoop103/value/property!-- 环境变量的继承 --propertynameyarn.nodemanager.env-whitelist/namevalueJAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME/value/property
/configuration4MapReduce配置文件配置mapred-site.xml[atguiguhadoop102 hadoop]$ vim mapred-site.xml文件内容如下?xml version1.0 encodingUTF-8?
?xml-stylesheet typetext/xsl hrefconfiguration.xsl?configuration!-- 指定MapReduce程序运行在Yarn上 --propertynamemapreduce.framework.name/namevalueyarn/value/property
/configuration4在集群上分发配置好的Hadoop配置文件这里我是切换到root账号来同步的[atguiguhadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/5去103和104上查看文件分发情况[atguiguhadoop103 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml[atguiguhadoop104 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml3.2.5 群起集群1配置workers[atguiguhadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers在该文件中增加如下内容hadoop102
hadoop103
hadoop104注意该文件中添加的内容结尾不允许有空格文件中不允许有空行。同步所有节点配置文件[atguiguhadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc2启动集群1初始化如果集群是第一次启动需要在hadoop102节点格式化NameNode注意格式化NameNode会产生新的集群id导致NameNode和DataNode的集群id不一致集群找不到已往数据。如果集群在运行过程中报错需要重新格式化NameNode的话一定要先停止namenode和datanode进程并且要删除所有机器的data和logs目录然后再进行格式化[atguiguhadoop102 hadoop-3.1.3]$ hdfs namenode -format2启动HDFS[atguiguhadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh3在配置了ResourceManager的节点启动YARN注意这个命令是在hadoop103上面执行[atguiguhadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh4Web端查看HDFS的NameNodea浏览器中输入http://hadoop102:9870 b查看HDFS上存储的数据信息5Web端查看YARN的ResourceManagera浏览器中输入http://hadoop103:8088 b查看YARN上运行的Job信息3集群如果缺少namenode、datanode等等其他的节点没有启动起来的解决办法 1、首先进入到hadoop的sbin目录下来停止所有的服务注意格式化NameNode会产生新的NameNode然后NameNode的id会变导致NameNode和DataNode的集群id不一致集群找不到已往数据。如果集群在运行过程中报错需要重新格式化NameNode的话一定要先停止namenode和datanode进程并且要删除所有机器的data和logs目录然后再进行格式化2、删除每一个节点的data和logs注意是每一个节点3、格式化namenode节点4、重新启动hdfs和yarn节点5、所有节点运行情况4集群基本测试1上传文件到集群上传小文件[atguiguhadoop102 ~]$ hadoop fs -mkdir /input[atguiguhadoop102 ~]$ hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input 上传大文件[atguiguhadoop102 ~]$ hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz /2上传文件后查看文件存放在什么位置查看HDFS文件存储路径[atguiguhadoop102 subdir0]$ pwd/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1436128598-192.168.10.102-1610603650062/current/finalized/subdir0/subdir0查看HDFS在磁盘存储文件内容 [atguiguhadoop102 subdir0]$ cat blk_1073741825hadoop yarnhadoop mapreduce atguiguatguigu3拼接 cat blk_1073741836tmp.tar.gz和cat blk_1073741837tmp.tar.gz是把这两个拼接成一个jdk压缩包然后解压发现就是上传的jdk压缩包所以可以确定hdfs实际上内容存储的位置就是在这里。这里为什么会把jdk的压缩包分为两部分呢原因就是在hadoop里存储的容量是128MB为一个块然后jdk的压缩包有180MB所以一个块存不下需要两个块注意块的序号是从0开始的-rw-rw-r--. 1 atguigu atguigu 134217728 5月 23 16:01 blk_1073741836
-rw-rw-r--. 1 atguigu atguigu 1048583 5月 23 16:01 blk_1073741836_1012.meta
-rw-rw-r--. 1 atguigu atguigu 63439959 5月 23 16:01 blk_1073741837
-rw-rw-r--. 1 atguigu atguigu 495635 5月 23 16:01 blk_1073741837_1013.meta
[atguiguhadoop102 subdir0]$ cat blk_1073741836tmp.tar.gz
[atguiguhadoop102 subdir0]$ cat blk_1073741837tmp.tar.gz
[atguiguhadoop102 subdir0]$ tar -zxvf tmp.tar.gz4下载[atguiguhadoop104 software]$ hadoop fs -get /jdk-8u212-linux-x64.tar.gz ./5执行wordcount程序[atguiguhadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output3.2.6 配置历史服务器为了查看程序的历史运行情况需要配置一下历史服务器。具体配置步骤如下1配置mapred-site.xml先执行cd $HADOOP_HOME/etc/hadoop[atguiguhadoop102 hadoop]$ vim mapred-site.xml在该文件里面增加如下配置。 !-- 历史服务器端地址 --propertynamemapreduce.jobhistory.address/namevaluehadoop102:10020/value/property!-- 历史服务器web端地址 --propertynamemapreduce.jobhistory.webapp.address/namevaluehadoop102:19888/value/property2分发配置[atguiguhadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml3在hadoop102启动历史服务器如果启动了yarn就需要先停止然后再启动因为配置文件改了[atguiguhadoop102 hadoop]$ mapred --daemon start historyserver4查看历史服务器是否启动[atguiguhadoop102 hadoop]$ jps5查看JobHistoryhttp://hadoop102:19888/jobhistory3.2.7 配置日志的聚集日志聚集概念应用运行完成以后将程序运行日志信息上传到HDFS系统上。日志聚集功能好处可以方便的查看到程序运行详情方便开发调试。注意开启日志聚集功能需要重新启动NodeManager 、ResourceManager和HistoryServer。开启日志聚集功能具体步骤如下1配置yarn-site.xml[atguiguhadoop102 hadoop]$ vim yarn-site.xml在该文件里面增加如下配置。 !-- 开启日志聚集功能--propertynameyarn.log-aggregation-enable/namevaluetrue/value/property!-- 设置日志聚集服务器地址--property nameyarn.log.server.url/name valuehttp://hadoop102:19888/jobhistory/logs/value/property!-- 设置日志保留时间为7天 --propertynameyarn.log-aggregation.retain-seconds/namevalue604800/value/property2分发配置[atguiguhadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml3关闭NodeManager 、ResourceManager和HistoryServer[atguiguhadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh//停止历史服务器[atguiguhadoop103 hadoop-3.1.3]$ mapred --daemon stop historyserver4启动NodeManager 、ResourceManage和HistoryServer[atguiguhadoop103 ~]$ start-yarn.sh[atguiguhadoop102 ~]$ mapred --daemon start historyserver5删除HDFS上已经存在的输出文件[atguiguhadoop102 ~]$ hadoop fs -rm -r /output6执行WordCount程序[atguiguhadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output7查看日志 1历史服务器地址http://hadoop102:19888/jobhistory 2历史任务列表 3查看任务运行日志 4运行日志详情3.2.8 集群启动/停止方式总结1各个模块分开启动/停止配置ssh是前提常用 1整体启动/停止HDFSstart-dfs.sh/stop-dfs.sh 2整体启动/停止YARNstart-yarn.sh/stop-yarn.sh2各个服务组件逐一启动/停止 1分别启动/停止HDFS组件hdfs --daemon start/stop namenode/datanode/secondarynamenode 2启动/停止YARNyarn --daemon start/stop resourcemanager/nodemanager3.2.9 编写Hadoop集群常用脚本1Hadoop集群启停脚本包含HDFSYarnHistoryservermyhadoop.sh[atguiguhadoop102 ~]$ cd /usr/local/bin这里由于我没有使用echo $PATH命令后全局环境变量没有/home/saodai/bin所以我把脚本都放在了/usr/local/bin里面[atguiguhadoop102 bin]$ vim myhadoop.sh输入如下内容#!/bin/bashif [ $# -lt 1 ]
thenecho No Args Input...exit ;
ficase $1 in
start)echo 启动 hadoop集群 echo --------------- 启动 hdfs ---------------ssh hadoop102 /opt/module/hadoop-3.1.3/sbin/start-dfs.shecho --------------- 启动 yarn ---------------ssh hadoop103 /opt/module/hadoop-3.1.3/sbin/start-yarn.shecho --------------- 启动 historyserver ---------------ssh hadoop102 /opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver
;;
stop)echo 关闭 hadoop集群 echo --------------- 关闭 historyserver ---------------ssh hadoop102 /opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserverecho --------------- 关闭 yarn ---------------ssh hadoop103 /opt/module/hadoop-3.1.3/sbin/stop-yarn.shecho --------------- 关闭 hdfs ---------------ssh hadoop102 /opt/module/hadoop-3.1.3/sbin/stop-dfs.sh
;;
*)echo Input Args Error...
;;
esac保存后退出然后赋予脚本执行权限[atguiguhadoop102 bin]$ chmod x myhadoop.sh2查看三台服务器Java进程脚本jpsall[saodaihadoop102 ~]$ cd /usr/local/bin[saodaihadoop102 bin]$ vim jpsall输入如下内容#!/bin/bashfor host in hadoop102 hadoop103 hadoop104
doecho $host ssh $host jps
done保存后退出然后赋予脚本执行权限[saodaihadoop102 bin]$ chmod x jpsall3分发/usr/local/bin目录保证自定义脚本在三台机器上都可以使用[saodaihadoop102 ~]$ xsync /usr/local/bin3.2.10 常用端口号说明端口名称Hadoop2.xHadoop3.xNameNode内部通信端口8020 / 90008020 / 9000/9820NameNode HTTP UI(对外暴露的给用户使用的web页面的端口号)500709870MapReduce查看执行任务端口80888088历史服务器通信端口19888198883.2.11 集群时间同步如果服务器在公网环境能连接外网可以不采用集群时间同步因为服务器会定期和公网时间进行校准如果服务器在内网环境必须要配置集群时间同步否则时间久了会产生时间偏差导致集群执行任务时间不同步。1需求找一个机器作为时间服务器所有的机器与这台集群时间进行定时的同步生产环境根据任务对时间的准确程度要求周期同步。测试环境为了尽快看到效果采用1分钟同步一次。2时间服务器配置必须root用户1查看所有节点ntpd服务状态和开机自启动状态[atguiguhadoop102 ~]$ sudo systemctl status ntpd[atguiguhadoop102 ~]$ sudo systemctl start ntpd[atguiguhadoop102 ~]$ sudo systemctl is-enabled ntpd2修改hadoop102的ntp.conf配置文件[atguiguhadoop102 ~]$ sudo vim /etc/ntp.conf修改内容如下a修改1授权192.168.10.0-192.168.10.255网段上的所有机器可以从这台机器上查询和同步时间#restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap为restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap b修改2集群在局域网中不使用其他互联网上的时间 server 0.centos.pool.ntp.org iburstserver 1.centos.pool.ntp.org iburstserver 2.centos.pool.ntp.org iburstserver 3.centos.pool.ntp.org iburst为#server 0.centos.pool.ntp.org iburst#server 1.centos.pool.ntp.org iburst#server 2.centos.pool.ntp.org iburst#server 3.centos.pool.ntp.org iburstc添加3当该节点丢失网络连接依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步server 127.127.1.0fudge 127.127.1.0 stratum 10 3修改hadoop102的/etc/sysconfig/ntpd 文件[atguiguhadoop102 ~]$ sudo vim /etc/sysconfig/ntpd增加内容如下让硬件时间与系统时间一起同步SYNC_HWCLOCKyes4重新启动ntpd服务[atguiguhadoop102 ~]$ sudo systemctl start ntpd5设置ntpd服务开机启动[atguiguhadoop102 ~]$ sudo systemctl enable ntpd3其他机器配置必须root用户1关闭所有节点上ntp服务和自启动[atguiguhadoop103 ~]$ sudo systemctl stop ntpd[atguiguhadoop103 ~]$ sudo systemctl disable ntpd[atguiguhadoop104 ~]$ sudo systemctl stop ntpd[atguiguhadoop104 ~]$ sudo systemctl disable ntpd2在其他机器配置1分钟与时间服务器同步一次[atguiguhadoop103 ~]$ sudo crontab -e编写定时任务如下*/1 * * * * /usr/sbin/ntpdate hadoop1023修改任意机器时间[atguiguhadoop103 ~]$ sudo date -s 2021-9-11 11:11:1141分钟后查看机器是否与时间服务器同步[atguiguhadoop103 ~]$ sudo date学习地址https://www.bilibili.com/video/BV1Qp4y1n7EN?p37第4章 常见错误及解决方案1防火墙没关闭、或者没有启动YARNINFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:80322主机名称配置错误3IP地址配置错误4ssh没有配置好5root用户和atguigu两个用户启动集群不统一6配置文件修改不细心7不识别主机名称java.net.UnknownHostException: hadoop102: hadoop102at java.net.InetAddress.getLocalHost(InetAddress.java:1475)at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:146)at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)解决办法1在/etc/hosts文件中添加192.168.10.102 hadoop102 2主机名称不要起hadoop hadoop000等特殊名称8DataNode和NameNode进程同时只能工作一个这个可以参考3.2.5的第三点解决9执行命令不生效粘贴Word中命令时遇到-和长–没区分开。导致命令失效解决办法尽量不要粘贴Word中代码。10jps发现进程已经没有但是重新启动集群提示进程已经开启。原因是在Linux的根目录下/tmp目录中存在启动的进程临时文件将集群相关进程删除掉再重新启动集群。11jps不生效原因全局变量hadoop java没有生效。解决办法需要source /etc/profile文件。128088端口连接不上[atguiguhadoop102 桌面]$ cat /etc/hosts注释掉如下代码#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4#::1 hadoop102回炉重造地址https://www.bilibili.com/video/BV1Qp4y1n7EN?p38vd_sourceeb68502f30a10ee7e5e6328b4db887ac