文章目录
大数据
概念
- 指无法在一定时间范围内用常规软件工具进行捕捉,管理和处理的数据集合,是需要新处理模式才能具有更强的决策力,洞察发现力和流程优化能力的海量,高增长率和多样化的信息资产
- 大数据主要是为了解决海量数据的采集,储存和分析计算的问题
特点
- 大量:数据量很大
- 高速:能够快速实时的计算技术
- 多样:数据会被分成结构化数据和非结构化数据
- 结构化数据:以数据库/文本为主
- 非结构化数据:网络日志,音频,视频,图片,地理位置信息
- 低价值密度:价值密度的高低与数据总量的大小成反比,也就是说需要快速对有价值数据“提纯”成为目前大数据背景下需要解决的问题
应用场景
- 抖音会推荐的都是你喜欢的视频
- 电商站内广告推荐
- 分析用户消费习惯,为用户购买商品提供便利
- 物流仓储,上午下单下午送达
- 保险,海量数据的挖掘以及风险预测能力
- 金融,多维度体现用户特征,帮助金融机构推荐优质的客户
- 房产,大数据全面主力房地产行业,打造精准投资与营销
- 人工智能,5G,物联网,虚拟与现实
Hadoop
概述
- Hadoop是一个由Apache基金会所开发的分布式系统基础架构
- 主要解决海量数据的存储和海量数据的分析计算问题
- 我们一般指的Hadoop主要指的是Hadoop的生态圈
hadoop发展历史
- Hadoop的创始人Doug Cutting,为了实现类似于Google的搜索功能,在Luence框架的基础上进行优化升级,查询引擎和索引引擎
- 因为Luence框架有存储海量数据,检索海量速度慢等缺点,所以模仿google解决这问题的办法,使用微型版的Nutch,通过借鉴三篇论文来实现下面三个新的框架
- GFS -----》HDFS
- Map-Reduce -------》MR
- BigTable -------》 HBase
- 2003-2004年,Google公开了部分GFS和MapReduce思想的细节,以此为基础Doug Cutting等人用了2年业余时间实现了DFS和MapReduce机制,使Nutch性能飙升。
- 2005 年Hadoop 作为 Lucene的子项目 Nutch的一部分正式引入Apache基金会。
- 2006 年 3 月份,Map-Reduce和Nutch Distributed File System (NDFS)分别被纳入到 Hadoop 项目中,Hadoop就此正式诞生,标志着大数据时代来临。
- 名字来源于Doug Cutting儿子的玩具大
hadoop三大发行版本
- Apache:最原始版本,用于入门学习最好
- 官网:https://hadoop.apache.org/
- 下载地址:https://hadoop.apache.org/releases.html
- Cloudera:内部集成许多大数据框架,更好的使用系统,对应版本CDH
- 官网:https://www.cloudera.com/downloads/cdh
- 下载地址:https://docs.cloudera.com/documentation/enterprise/6/releasenotes/topics/rg_cdh_6_download.html
- Hortonworks:跟Cloudera类似,不过文档更好,对应产品HDP
- 官网地址:https://hortonworks.com/products/data-center/hdp/
- 下载地址:https://hortonworks.com/downloads/#data-platform
hadoop的优势
-
高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失
-
高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点,可以动态增加服务器
-
高效性:在MapReduce的思想下,Hadoop是并行工作,以加快任务处理速度
-
高容错性:能够自动将失败的任务重新分配
hadoop的组成
- Hadoop 1.x 的组成部分
- Hadoop 2.x 的组成部分,跟1.x的区别在于,1.x的MapReduce同时处理业务逻辑运算和资源的调度,耦合性较大。所以将资源调度这一功能划分出来,用Yarn进行资源调度
- Hadoop的3.x组成部分
HDFS
- Hadoop Distributed File System,简称 HDFS,是一个分布式文件系统。
- 主要由三个部分组成
- NameNode(nn):存储文件的元数据,也就是文件名,文件目录结构,文件属性,文件的块列表,块所在的DataNode等等,也就是存储数据的地理信息的本身信息
- DataNode(dn):就是本地系统存储文件的快数据,以及快数据的校验和
- Secondary NameNode(2nn):是NameNode的备份,每隔一段时间就会对NameNode的元数据进行备份
YARN
- Yet Another Resource Negotiator 简称 YARN ,另一种资源协调者,是 Hadoop 的资源管理器。
- Yarn主要由下面几个部分组成:
- ResourceManager(rm):处理客户端请求、启动/监控ApplicationMaster、监控NodeManager、资源分配与调度;
- NodeManager(nm):单个节点上的资源管理、处理来自ResourceManager的命令、处理来自ApplicationMaster的命令;
- ApplicationMaster:数据切分、为应用程序申请资源,并分配给内部任务、任务监控与容错。
- Container:对任务运行环境的抽象,封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息。
MapReduce
- 主要是用于计算的功能,计算的过程分为两个阶段:
- Map:Map阶段并行处理输入数据
- Reduce:对Map结果进行汇总
三者之间的关系
-
第一阶段HDFS进行数据存储
-
第二阶段YARN进行资源管理
-
第三阶段当用户发出请求要求找到1.avi,调用MapReduce进行Map阶段
-
第四阶段调用MapReduce进行Reduce阶段进行汇总,将结果返回并且备份到2nn节点
在这里插入图片描述
大数据技术生态体系
- 数据传输层:
- Sqoop:Sqoop 是一款开源的工具,主要用于在 Hadoop、Hive 与传统的数据库(MySQL)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中。
- Flume:Flume 是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume 支持在日志系统中定制各类数据发送方,用于收集数据;
- Kafka:Kafka 是一种高吞吐量的分布式发布订阅消息系统;
- 数据存储层:
- Hbase:HBase 是一个分布式的、面向列的开源数据库。HBase 不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
- 资源管理层:
- 数据计算层:
- Spark:Spark 是当前最流行的开源大数据内存计算框架。可以基于 Hadoop 上存储的大数据进行计算。
- Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务进行运行。其优点是学习成本低,可以通过类 SQL 语句快速实现简单的 MapReduce 统计,不必开发专门的 MapReduce 应用,十分适合数据仓库的统计分析。
- Flink:Flink 是当前最流行的开源大数据内存计算框架。用于实时计算的场景较多。
- 任务调度层:
- Oozie 是一个管理 Hadoop 作业(job)的工作流程调度管理系统。
- ZooKeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。
Hadoop的运行环境搭建
模板虚拟机搭建
安装VMware Workstation 15
- 双击安装软件
- 一直下一步,安装路径可以自己更改,更新计划和一些你不想要的配置可以不配
- 双击安装好的软件,如果需要密钥的话,就上baidu搜索一下就好了,网址:https://www.cnblogs.com/98han/p/13170117.html
- 安装好后的界面
安装Centos
第一步安装硬件
- 打开VMware 然后点击创建新的虚拟机
- 选择自定义
- 然后下一步,再下一步,到了这一步,选择稍后安装操作系统
- 下一步选择操作系统
- 配置虚拟机名称和存放位置
- 配置处理器,处理器数量和每个处理器内核数不要超过本机的cpu数
- 如何查看cpu数量,打开任务管理器,点击打开资源监视器
- 点击CPU数你的CPU数量
- 如何查看cpu数量,打开任务管理器,点击打开资源监视器
- 配置虚拟机内存
- 配置网络
- 一直下一步直到指定磁盘,推荐50G
- 配置磁盘文件,推荐放到自己指定目录下,方便配置
- 最后点击完成
第二步安装软件
-
安装操作系统前,首先看一下电脑的虚拟化技术打开了没有,在任务管理器上看
-
要开始安装了,点击 CD/DVD 磁盘
-
选择镜像,选择操作系统文件
-
插入之后,就点击开启虚拟机
-
进来之后敲击回车
-
耐心等待安装
-
安装完成之后就会来到这个页面,选择中文和简体中文
-
进来之后,先选日期和时间
-
配置日期和时间
-
完成之后,选择软件选择
-
如果你想要命令行操作的话,选择默认的最小安装,但是新手推荐图形化界面,GNOME桌面
-
完成之后,选择安装位置
-
进去之后,选择我要分区,然后点击完成
-
-
然后点击完成,下一步选择KDUMP
-
KDUMP的作用主要是为了防止系统崩溃信息丢失,所以这个是开辟一部分内存进行备份,学习阶段就不开启了
-
然后开始配置网络和主机名
-
然后配置主机名,打开网络
-
然后开始安装
-
等待安装的时候可以配置root密码
-
安装成功后,点击重启
-
成功之后进入这个页面,点击第一个
-
点击我同意,再点击完成
-
点击完成配置,然后选择语言
-
然后再下一步,隐私看有没有打开,有打开就下一步,然后到达时区,点击允许
-
选择上海
-
下一个就跳过,到关于您,就随你自己意愿设置
-
下一个密码就跟你之前设置的密码一样就行了,然后点击使用
第三步配置IP地址
- 先配置VM的IP地址,先点击编辑,选择里面的虚拟网路编辑器
- 选择VMnet8
- 点击更改设置,然后再次点击VMnet8,更改一些配置,点击NAT设置
- 接下来就是更改win10的配置,点击右下角的网络
- 再选择更改适配器选项
- 选择VMnet8右键点击属性进行设置
- 选择相关配置
- 配置相关配置
- 右键打开终端
- su root 命令进入root用户下
- 输入
vim /etc/sysconfig/network-scripts/ifcfg-ens33
这个命令行,进入文件进行修改
- 修改主机名称映射,
vim /etc/hosts
命令,将地址放进去
- 然后重启
第四步使用Xshell访问
-
因为服务器肯定放在机房使用,所以办公人员需要使用远程访问
-
安装Xshell(自行安装,百度上一堆)
-
打开Xshell文件,点击新建
-
写入主机IP地址
-
点击用户身份验证,填写用户和密码
6. 接受并保存,就可以了
安装软件包
- 首先先要安装安装 epel-release,打开终端,输入命令
yum install -y epel-release
- 等下载完成之后,需要将系统的jdk删除,
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
- 关闭防火墙
systemctl stop firewalld
,关闭防火墙开机自启systemctl disable firewalld.service
- 配置 本地用户具有 root 权限,方便后期加 sudo 执行 root 权限的命令,使用命令修改
vim /etc/sudoers
- 在/opt 目录下创建文件夹,并修改所属主和所属组
mkdir /opt/module
mkdir /opt/software
chown 本地用户:本地用户 /opt/module
chown 本地用户:本地用户 /opt/software
- 最后重启虚拟机
安装JDK
- 用 XShell 传输工具将 JDK 导入到 opt 目录下面的 software 文件夹下面
- 在 Linux 系统下的 opt 目录中查看软件包是否导入成功,通过命令
ls /opt/software/
- 解压 JDK 到/opt/module 目录下,压缩命令
tar -zxvf jdk-8u212-linuxx64.tar.gz -C /opt/module/
- 配置 JDK 环境变量,需要切换到root用户,使用命令
cd /etc/profile.d
,查看发现都是启动配置类,所以我们也需要写一个
- 使用
exit
退出 root用户,使用命令sudo vim /etc/profile.d/my_env.sh
写配置类,并且在配置类配置如下配置
- 保存后退出,然后使用命令
source /etc/profile
,让新的环境变量 PATH 生效 - 使用命令
reboot
进行重启
安装Hadoop
- 操作跟上面一样,就是配置类的配置不一样,配置类需要配置的如下图
Hadoop的运行模式
- Hadoop的运行模式官网上说主要有3种,第一种为本地模式,第二种为伪分布式模式,第三种为完全分布式模式
- 本地模式:就是相当于单机运行
- 伪分布式模式:也是单机运行,但是具备 Hadoop 集群的所有功能,一台服务器模拟一个分布式的环境。
- 完全分布式模式:多台服务器组成分布式环境。
本地运行模式
-
现在hadoop-3.1.3文件下创建一个wcinput文件夹,
mdkir wcinput
-
在wcinput文件下创建一个word.txt文件,
cd wcinput
-
编辑word.txt文件
vim word.txt
-
回到hadoop目录
-
演示一下,统计之前编辑文档中名字的次数,使用命令
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput/ wcoutput
-
进入到之前命令创建的文件中wcoutput,使用命令
cat part-r-00000
进行查看
完全分布式运行模式
准备环境:
- 准备三台客户机(关闭防火墙,静态IP,主机名称)
- 安装JDK
- 配置环境变量
- 安装Hadoop
- 配置环境变量
- 配置集群
- 单点启动
- 配置ssh
- 群起并测试集群
编写集群分发脚本xsync
- scp安全拷贝:scp可以实现服务器与服务器之间的数据拷贝
- 基本语法:scp -r p d i r / pdir/ pdir/fname u s e r @ user@ user@host: p d i r / pdir/ pdir/fname(命令 -r 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/文件名称)
- 实践开始,把 hadoop102 服务器上的 jdk 和 hadoop 传递到 hadoop103 和 hadoop104 上
- 以上三台服务器都有JDK和Hadoop的包
rsync远程同步工具
- 何为rsync主要用户备份和镜像,具有速度快,避免复制相同内容和支持符号链接的优点,而跟scp的区别在于,rsync只对有差异的文件做更新,而scp是把所有文件都复制过去
- 基本语法:rync -av p d i r / pdir/ pdir/fname u s e r @ user@ user@host: p d i r / pdir/ pdir/fname(命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称)
xsync集群分发脚本
-
能够循环复制文件到所有节点的相同目录下,相当于备份和同步
-
脚本实现,首先在一个目录下创建XSYNC文件(目录我的是/home/lwb/bin)
-
在文档中写下如下代码
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
- 修改脚本XSYNC具有的执行权限
chmod +x xsync
- 测试脚本
xsync /home/atguigu/bin
- 将脚本复制到/bin中,以便全局调用
sudo cp xsync /bin/
- 同步环境变量配置
sudo ./bin/xsync /etc/profile.d/my_env.sh
- 然后到各自的服务器上使用命令
source /etc/profile
让环境变量生效
SSH无密码登录配置
- 先来看看无密码登陆的原理图
- 然后进行实践,使用命令生成公钥和私钥,
ssh-keygen -t rsa
- 然后将公钥拷贝到需要免密登录的服务器上
- 对于文件功能解释
- 如何配置ssh,只需要
ssh 主机
- 使用exit就能退出
集群配置
- 首先我们配置了三台服务器,但是他们三者之间并没有关联,所以我们需要将三者关联起来,这个时候就需要像之前讲的一样,配置NameNode,SecondaryNameNode和ResourceManager,如下图所示
- 然后就是配置文件的说明,Hadoop的配置文件分为两大类:一类是默认配置文件,一类是自定义配置文件,只有用户修改某一默认配置值得时候,才需要修改自定义配置文件。
- 自定义配置文件为core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 这四个配置文件,他们存放在hadoop目录下的/etc/hadoop路径下,用户可以根据项目需求重新进行修改配置。
- 进入文件夹之后就可以配置了,
vim core-site.xml
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 atguigu -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>atguigu</value>
</property>
</configuration>
- 配置hdfs-site.xml文件
<configuration>
<!-- nn web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
- 配置yarn-site.xml文件
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
</property>
</configuration>
- 配置MapReduce配置文件
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
- 使用命令
xsync /hadoop/
,复制到其他服务器 - 配置workers,在
/etc/hadoop
文件下进行编辑vim workers
-
使用命令
xsync workers
进行同步 -
现在开始启动集群,启动集群的命令在sbin目录下,所以我们需要到hadoop 3.1.3目录下
-
首先使用命令
sbin/start-dfs.sh
启动服务,使用jps命令进行查看
-
然后还需要启动nodemanger节点,我们需要在hadoop103上启动,因为我们配置yarn在hadoop103上,使用命令
sbin/start-yarn.sh
,启动完毕后,同样使用jps进行查看
-
配置完成之后,登录
http://192.168.10.103:8088/
和http://192.168.10.102:9870/
这两个网址,就会有指定的页面
-
随后我们测试一下
-
首先执行命令
hadoop fs -mkdir /wcinput
,会发现在网页上有显示
-
然后测试上传一个小的文件,使用命令
hadoop fs -put wcinput/word.txt /wcinput
- 执行wordcount程序进行计算任务,来看一下 ,使用命令
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput
配置历史服务器
- 上面我们运行起来了hadoop集群,并且通过hadoop集群完成了计算任务,但是我们并不能查看,yarn的历史记录,所以我们这一步就来配置历史服务器。
- 进入到/etc/hadoop 配置文件夹,使用命令
vim mapred-site.xml
修改配置类,将下面代码复制进去。
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
- 然后进行分发配置
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
- 然后在hadoop102 上启动历史服务器
mapred --daemon start historyserver
- 使用命令
jps
查看是否启动了
- 登录网页
http://192.168.10.102:19888/jobhistory
,进行查看
- 历史服务器是配置完了,但是日志到底聚集到哪里看比较好呢,当然是存储到HDFS伤了,所以为了能够更好将日志信息上传到HDFS上,我们也需要配置
- 这一次我们需要修改的是yarn-site.xml配置文件,将下面代码复制进去
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
- 将文件分配到各个服务器上
xsync yarn-site.xml
- 因为更改了yarn-site.xml的配置所以需要重启NodeManager, ResourceManager, HistoryServer
mapred --daemon stop historyserver
停止历史服务器sbin/stop-yarn.sh
停止NodeManager, ResourceManager
- 将上面的测试再尝试一下
编写Hadoop常用脚本
- 将脚本配置完成之后,使用命令
xsync
进行分发到其他集群服务器上
编写Hadoop集群启动和停止脚本:myhadoop.sh
- 使用命令
cd
回到根目录,然后进入bin目录下,使用命令vim myhadoop.sh
创建脚本 - 输入如下代码
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop 集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 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
historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
- 然后给予这个脚本执行权限,使用命令
chmod +x myhadoop.sh
查看三台服务器JAVA进程脚本:jpsall
- 一样的操作,使用命令编辑脚本
vim jpsall
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
- 保存之后,赋予脚本执行权限
常用端口号说明
总结
用了一周的时间,才完成了入门,跟着尚硅谷的视频进行学习,都是一步一步敲的,出现错误的时候,多看视频几遍,虽然没有用,但是可以加深印象,一般解决都是自己有些点遗漏了,所以需要仔细和细心。