课程介绍
大数据基本介绍
4V特征
体量大:体量庞大
高速:数据产生速度快、存储速度快、处理速度快
多样化:数据的种类和来源多样化。结构化、非结构化、半结构化数据
价值:密度低。体量庞大,有价值的数据相对来讲比较少
Hadoop平台特点
低成本、高可靠性、高效性、可扩展性
课程所需环境
Vmware+CentOS7
注意:本门课程的Linux系统与其他课程分开
XShell、SecureCRT:连接虚拟机,进行指令操作
winSCP:在Windows和Linux之间进行文件传输
notePad++:文本编辑器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ie0Ddj5E-1647349327846)(C:\Users\ADMINI~1\AppData\Local\Temp\1614688009667.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VMlg3n0y-1647349327847)(C:\Users\ADMINI~1\AppData\Local\Temp\1614688019165.png)]
参考资料
软件下载:
链接:https://pan.baidu.com/s/1sKVDY7ok_ke_v4VwqANCSw
提取码:doop
Linux基本操作
用户和组
root:超级用户,进入后显示#
普通用户:hadoop,进入后显示的是$
用户的切换使用指令:su 用户名
每个用户的主目录/home/用户名,root用户的主目录是/root
文件权限
r:读权限,w:写权限,x:执行权限
文件权限描述分三组:
1文件/目录创建者的权限描述
2同组其他用户的权限描述
3其他组用户的权限描述
Hadoop平台简介
Hadoop起源
来自于谷歌的三篇论文,分别出现了HDFS,MapReduce,Yarn框架,创始者是Dung Cutting
Hadoop生态圈
Hadoop核心组件
数据传输:Sqoop,Kafka,Flume
数据存储:HDFS,HBase
资源调度:Yarn
计算:MapReduce,Hive,Spark,Storm
协调者:Zookeeper
Hadoop安装
虚拟机环境准备
CentOS7安装
配置网络
目的:Linux虚拟机与Windows客户机互联互通,也就是说Linux能正常上网。
-
虚拟机网络连接方式:NAT
-
查看虚拟机的虚拟网关地址:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gkARLFXl-1647349327848)(assets/1614924659625-1614924661270.png)]
图片中示例的网段为192.168.136.0,网关192.168.136.1
-
虚拟机IP地址设置
目的:设置虚拟机为静态IP,将集群中的每台电脑IP地址固定下来
规划:
master:192.168.136.11
slave1:192.168.136.12
slave2:192.168.136.13
配置IP地址:
vi指令解释: vi指的是编辑某个文本文件/配置文件,vi就可以打开并编辑该文件。如果该文件存在,它会直接打开;如果该文件不存在,那么该指令会创建一个同名文件,并打开,等待编辑。 注意事项:使用vi指令打开配置文件后,如果要进行编辑,需要在键盘上敲i,进入insert(插入)模式,这时才可以对该文件进行修改。
#修改网络配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 #小窍门:注意结合tab键使用。sysc+tab键就可以自动补全sysconfig
完成如下配置:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UsHjM6Rh-1647349327848)(assets/1614926251701-1614926253479.png)]
#退出vi模式 Esc键,如果保存退出:wq,然后回车;如果不保存就退出:q;强制退出:!q,文件内容不会被保存。 #注意都是小写字母
-
重启网络服务
虚拟机网卡重新启动
systemctl restart network
注意:↑可以帮助大家快速找到之前输入过的指令
-
网络测试
ping百度,退出ping测试,ctrl+c
-
网络常用问题
- 重启虚拟机,如果无法解决,尝试重启vmware
- ping一下网关地址,看是否能通ping 192.168.136.2
- 网关能ping通后,看是否能ping通Windows机器的ip地址
- Windows能否ping通虚拟机IP地址
- 如果Windows和虚拟机不通,需要检查Windows配置
- 检查服务是否正常开启
- 检查Windows的网络适配器
关闭防火墙
关闭防火墙,并且从开启启动项中删除自动重启。指令:
#查看防火墙状态
systemctl status firewalld
#关闭防火墙
systemctl stop firewalld
#禁止防火墙随机自启
systemctl disable firewalld
克隆虚拟机
为分布式Hadoop集群环境创建3台虚拟机。
虚拟机的基本指令:
#关闭虚拟机
shutdown -h now
#重启虚拟机
reboot
选中虚拟机,右键,“管理”->”克隆“,创建完整克隆:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lksrPQnX-1647349327848)(assets/1615249116553-1615249117697.png)]
克隆2次,得到三台虚拟机,分别为:
master:192.168.136.11
slave1:192.168.136.12
slave2:192.168.136.13
修改slave1和slave2的IP地址:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-539RKwlP-1647349327849)(assets/1615249797435-1615249798462.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Px4CKLXZ-1647349327849)(assets/1615249853048-1615249854399.png)]
重启网络服务,查看IP地址,测试网络是否连通。
SecureCRT软件连接
配置连接:
连接协议:SSH2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yRFdoMZi-1647349327849)(assets/1615250508925-1615250510797.png)]
修改会话选项:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VfRpPQyP-1647349327850)(assets/1615251181975-1615251183389.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AWqoyMmx-1647349327850)(assets/1615251240924-1615251242029.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gqQIqyxQ-1647349327850)(assets/1615251335515-1615251337382.png)]
修改主机名
给虚拟机起个主机名,分别为master,slave1,slave2
指令(secureCRT中ctrl+alt+c复制指令,右键粘贴指令):
[root@localhost ~]# vi /etc/hostname
master
#重启虚拟机即可
修改映射文件
映射文件是ip地址和主机名的对应关系的文件。
[root@master ~]# vi /etc/hosts
192.168.136.11 master
192.168.136.12 slave1
192.168.136.13 slave2
配置时钟同步
ntp是一种自动在互联网上同步电脑时间的服务,使用之前需要先进行安装。(三台虚拟机都需要进行安装)
-
安装ntp服务
[root@master ~]# yum install ntp
-
配置ntp
[root@master ~]# vi /etc/sysconfig/ntpd # Command line options for ntpd OPTIONS="-g" YS_HWLOCK=yes
-
启动服务
[root@master ~]# systemctl start ntpd [root@master ~]# systemctl status ntpd [root@master ~]# date
winSCP安装及使用
该软件用于在linux虚拟机和windows物理机之间进行文件传输。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B2gGoV6F-1647349327850)(assets/1615290586776-1615290587861.png)]
安装JDK
注意:所有的软件安装包放在路径/usr/local/src下,所有的软件安装路径为/usr/local/src
-
将jdk安装包放在/usr/local/src下
[root@master ~]# cd /usr/local/src/ [root@master src]# ll 总用量 185340 -rw-r--r--. 1 root root 189784266 8月 27 2020 jdk-8u152-linux-x64.tar.gz
-
检查操作系统是否已安装openJDK,如果是的话,将其卸载#
#先查询 [root@master src]# rpm -qa | grep java java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64 javapackages-tools-3.4.1-11.el7.noarch tzdata-java-2017b-1.el7.noarch #再卸载 [root@master src]# rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64 [root@master src]# rpm -e --nodeps javapackages-tools-3.4.1-11.el7.noarch [root@master src]# rpm -e --nodeps tzdata-java-2017b-1.el7.noarch
-
创建文件夹/usr/local/src
[root@master src]# cd /opt [root@master opt]# mkdir software [root@master opt]# ll 总用量 0 drwxr-xr-x. 2 root root 6 3月 9 19:57 software
-
将安装包解压到/usr/local/src中
[root@master ~]# tar -zxf /usr/local/src/jdk-8u152-linux-x64.tar.gz -C /usr/local/src/ #重命名文件夹为java [root@master software]# mv /usr/local/src/jdk1.8.0_152/ /usr/local/src/java
-
修改用户权限
我们使用root用户进行解压、重命名,此时java文件夹的使用权限归root用户。因为后期使用集群时,我们使用的是hadoop用户,所以我们需要将java文件夹的权限赋值给hadoop用户。
添加hadoop用户:
[root@master home]# useradd hadoop [root@master home]# passwd hadoop #输入2次新密码,密码为hadoop
[root@master ~]# chown -R hadoop:hadoop /usr/local/src/java/
-
修改环境变量文件并生效
全局环境变量文件是/etc/profile,在最后两行添加,保存退出
[root@master ~]# vi /etc/profile export JAVA_HOME=/usr/local/src/java export PATH=$PATH:$JAVA_HOME/bin [root@master ~]# source /etc/profile
-
测试jdk是否安装成功
[root@master ~]# java -version java version "1.8.0_152" Java(TM) SE Runtime Environment (build 1.8.0_152-b16) Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
将三台虚拟机的jdk都安装好。
问题:
如果不小心把/etc/profile文件改坏了,导致任何指令无法输入,怎么办?
- 重新传一份profile文件
- 在命令行中输入:export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin
单机模式
-
解压安装包
[root@master src]# tar -zxf /usr/local/src/hadoop-2.7.1.tar.gz -C /usr/local/src/
-
修改解压之后的文件夹名
[root@master software]# mv hadoop-2.7.1/ hadoop
-
配置/etc/profile文件,保存退出,并生效。检查是否配置正确
[root@master software]# vi /etc/profile export HADOOP_HOME=/usr/local/src/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin [root@master software]# source /etc/profile [root@master software]# hadoop version Hadoop 2.7.1 Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 15ecc87ccf4a0228f35af08fc56de536e6ce657a
路径讲解:
[root@master hadoop]# ll 总用量 28 drwxr-xr-x. 2 10021 10021 194 6月 29 2015 bin drwxr-xr-x. 3 10021 10021 20 6月 29 2015 etc drwxr-xr-x. 2 10021 10021 106 6月 29 2015 include drwxr-xr-x. 3 10021 10021 20 6月 29 2015 lib drwxr-xr-x. 2 10021 10021 239 6月 29 2015 libexec -rw-r--r--. 1 10021 10021 15429 6月 29 2015 LICENSE.txt -rw-r--r--. 1 10021 10021 101 6月 29 2015 NOTICE.txt -rw-r--r--. 1 10021 10021 1366 6月 29 2015 README.txt drwxr-xr-x. 2 10021 10021 4096 6月 29 2015 sbin drwxr-xr-x. 4 10021 10021 31 6月 29 2015 share
bin:存放Hadoop运行程序和管理软件
etc:存放Hadoop配置文件(非常重要!)
sbin:存放Hadoop集群启动、停止指令
share:存放说明文档、案例、依赖的jar包
-
修改配置文件$HADOOP_HOME/etc/hadoop/hadoop-env.sh
[root@master hadoop]# vi etc/hadoop/hadoop-env.sh export JAVA_HOME=/usr/local/src/java
保存退出。
-
修改权限,赋予hadoop用户使用权限
[root@master software]# chown -R hadoop:hadoop hadoop/、
-
切换到hadoop用户,测试Hadoop是否能正常运行
[root@master software]# su hadoop
入门程序:WordCount,单词计数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PSmBBx5K-1647349327851)(assets/1615446566097-1615446567339.png)]
输入文件:/usr/local/src/input/hello.txt
输出:/usr/local/src/out(不能提前创建好)
执行hadoop jar指令,运行wordcount案例jar包测试Hadoop是否能正常计算:
[hadoop@master input]$ hadoop jar /usr/local/src/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount /usr/local/src/input/hello.txt /usr/local/src/out
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rEwgiFP4-1647349327851)(assets/1615447156438-1615447157816.png)]
查看输出文件内容:
[hadoop@master out]$ cat part-r-00000 bigdata 2 hadoop 2 hello 1 world 1
Hadoop的核心组件
HDFS,MapReduce和Yarn是Hadoop的三大核心组件。HDFS用于海量分布式数据的存储;MapReduce用于对海量数据进行分布式处理;Yarn用于进行资源调度。
HDFS
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LJUIJSFn-1647349327851)(assets/1615530224369-1615530225534.png)]
- NameNode,存储着FSImage和edits。它有4个方面的职责:
- 管理HDFS的namespace:维护着文件系统树以及文件树中所有文件的元数据。FSImage文件存储HDFS上文件的元数据,如文件名、文件目录结构、文件属性(文件生成时间、副本数、权限、大小等)以及文件的数据块所在的DataNode等。edits文件记录着所有对文件系统的写操作(如上传、修改等)。
- 管理DataNode上的数据块:NameNode决定了文件数据块存储到哪个DataNode上。
- 处理客户端的读写请求:读取文件时,NameNode将文件所在的块列表反馈给客户端;写文件时,反馈一组DataNode给客户端用于进行写操作。写成功之后,将操作记录在edits文件中。
- 配置副本策略:NameNode根据用户确定的副本策略(默认3个副本)管理HDFS中数据的副本。当HDFS中某个数据块的副本少于设定值时,它会指定其中一个块自动复制到其他DataNode上。
- DateNode(数据节点)负责存储数据,把每个HDFS数据块(默认128M)存储在本地文件系统的单独文件。
- 存储实际的数据块
- 处理客户端的读写请求,执行数据块的读和写
- 向NameNode定期汇报数据块信息,并且向NameNode发送心跳信号保持联系。
- SecondaryNameNode(2NN,第二名称节点)主要用于合并数据文件FSImage。它会每隔一段时间(默认为3600秒)将NameNode上的FSImage和edits文件复制到本地,然后将二者合并成新的FSImage文件,并复制回NameNode。
MapReduce
(1)MapReduce是面向大型数据处理的、简化的、并行计算模型。
(2)将用户编写的业务逻辑代码和自带的默认组件整合成一个完整的分布式运算程序,使得开发并行计算应用程序变得很容易。
(3)MapReduce把对大数据的操作分发给多个子节点并行处理,然后整合各个子节点的输出结果,得到最终的计算结果。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bQN7rwn1-1647349327852)(assets/1615852542735-1615852543952.png)]
优点:
(1)易于编程:使用它的一些简单接口,就可以完成一个分布式程序。
(2)良好的拓展性:当计算资源不足时,可以简单地通过增加计算机的数量来扩展它的计算能力。
(3)高容错性:当运算节点出现故障时,MapReduce的计算任务可以自动转移到另一个节点运行,不需要人工干预。
(4)适合处理离线大数据:能够处理PB级的离线数据。
缺点:
(1)不适合实时计算:MapReduce达不到在秒级以内反馈运算结果。
(2)不适合流式计算:流式计算处理的数据是动态的,而MapReduce只能处理静态的数据。
(3)不适合有向图计算:对于有向图计算,MapReduce在处理数据的过程中,每个任务的输出结果都会写入磁盘,会造成大量的磁盘读写,形成瓶颈,降低系统的性能。
Yarn
伪分布式
仅需要在master一个节点上进行安装即可。大致步骤为解压->修改配置文件->启动相应进程->测试集群状态
SSH免密登录
与用户相关。不同的用户产生的秘钥文件是不同的。
思考:需要用哪个用户产生秘钥文件,并进行秘钥文件的分发?
hadoop用户。因此使用hadoop用户进行秘钥文件的生成和分发。
-
切换到hadoop用户
-
三台虚拟机分别生成秘钥文件
[hadoop@master ~]$ ssh-keygen -t rsa [hadoop@slave1 ~]$ ssh-keygen -t rsa [hadoop@slave2 ~]$ ssh-keygen -t rsa
-
三台虚拟机分别分发三次秘钥文件
[hadoop@master ~]$ ssh-copy-id master [hadoop@master ~]$ ssh-copy-id slave1 [hadoop@master ~]$ ssh-copy-id slave2
-
SSH登录测试
[hadoop@master ~]$ ssh slave1 Last failed login: Tue Mar 16 20:06:37 CST 2021 from slave2 on ssh:notty There was 1 failed login attempt since the last successful login. Last login: Tue Mar 16 19:55:51 2021 [hadoop@slave1 ~]$ exit 登出 Connection to slave1 closed
修改配置文件
配置文件功能:
-
core-site.xml:配置的是集群全局参数,用于定义系统级别的参数,如HDFS的URL(主节点位置)、Hadoop的临时目录等;
-
hdfs-site.xml:HDFS参数,包括NameNode和DataNode的存放位置、文件副本个数、文件读取权限等;
-
mapred-site.xml:MapReduce参数
-
yarn-site.xml:Yarn的系统参数。如ResourceManager、NodeManager的通信端口,web监控端口等;
-
解压
[root@master software]# tar -zxf /usr/local/src/hadoop-2.7.1.tar.gz -C /usr/local/src/ [root@master software]# mv hadoop-2.7.1/ hadoop
-
配置/etc/profile文件并生效
[root@master ~]# vi /etc/profile export HADOOP_HOME=/usr/local/src/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin [root@master ~]# source /etc/profile
-
将hadoop安装文件夹赋予hadoop用户权限,切换到hadoop用户
[root@master software]# chown -R hadoop:hadoop hadoop/ [root@master software]# su hadoop
-
修改配置文件core-site.xml
[hadoop@master hadoop]# vi core-site.xml <property> <!--hdfs地址--> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <!-- 指定hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/src/hadoop/data/tmp</value> </property>
-
修改配置文件hadoop-env.sh
[hadoop@master hadoop]# vi hadoop-env.sh export JAVA_HOME=/usr/local/src/java
-
修改hdfs-site.xml
[hadoop@master hadoop]# vi hdfs-site.xml <!--副本集个数--> <property> <name>dfs.replication</name> <value>1</value> </property>
-
修改yarn-env.sh
[hadoop@master hadoop]# vi yarn-env.sh export JAVA_HOME=/usr/local/src/java
-
修改yarn-site.xml
[hadoop@master hadoop]# vi yarn-site.xml <!-- reducer获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property>
-
修改mapred-env.sh
[hadoop@master hadoop]# vi mapred-env.sh export JAVA_HOME=/usr/local/src/java
-
修改mapred-site.xml
[hadoop@master hadoop]# cp mapred-site.xml.template mapred-site.xml [hadoop@master hadoop]# vi mapred-site.xml <!-- 指定mr运行在yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn