⼤数据是指⽆法在⼀定时间范围内⽤常规软件⼯具进⾏捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策⼒、洞察发现⼒和流程优化能⼒的海量、⾼增⻓率和多样化的信息资产。
⼤数据的特点可以⽤ IBM 曾经提出的 “5V” 来描述,如下:
大量
采集、存储和计算的数据量都⾮常⼤。大数据领域数据量基本上以PB为最小单位,而PB级数据量有多⼤?是怎样的⼀个概念?
假如⼿机播放MP3的速度为平均每分钟1MB,⽽1⾸歌曲的平均时⻓为4分钟,那么1PB存量的歌 曲可以连续播放2000年。
1PB 也相当于50%的全美学术研究图书馆藏书咨询内容。
基于IDC的报告预测,从2013年到2020年,全球数据量会从4.4ZB猛增到44ZB!⽽到了2025 年,全球会有163ZB的数据量!根据存储单位换算,1ZB = 1024 * 1024PB,所以全球的数据量已经⼤到爆了!⽽传统的关系型数据库根本处理不了如此海量的数据!
高速
在⼤数据时代,数据的创建、存储、分析都要求被⾼速处理,⽐如电商⽹站的个性化推荐尽可能要 求实时完成推荐,这也是⼤数据区别于传统数据挖掘的显著特征。
多样
数据形式和来源多样化。包括结构化、半结构化和⾮结构化数据,具体表现为⽹络⽇志、⾳频、视频、图⽚、地理位置信息等等,多类型的数据对数据的处理能⼒提出了更⾼的要求。
真实
确保数据的真实性,才能保证数据分析的正确性
低价值
数据价值密度相对较低,或者说是浪⾥淘沙却⼜弥⾜珍贵。互联⽹发展催⽣了⼤量数据,信息海 量,但价值密度较低,如何结合业务逻辑并通过强⼤的机器算法来挖掘数据价值,是⼤数据时代最 需要解决的问题,也是⼀个有难度的课题。
随着⼤数据的发展,⼤数据技术已经⼴泛应⽤在众多⾏业,⽐如仓储物流、电商零售、汽⻋、电信、⽣物医学、⼈⼯智能、智慧城市等等领域,包括在疫情防控战中,⼤数据技术也发挥了重要的作⽤。
Hadoop 是⼀个适合⼤数据的分布式存储和计算平台。
从狭义上讲: Hadoop 就是一个框架平台,它包括以下三部分:
HDFS:分布式文件系统
Map Reduce:分布式离线计算框架。负责计算
Yarn:分布式资源调度框架,负责资源调度
由此我们可以得出,狭义上的Hadoop解决的是海量数据的存储和离线计算
从广义上讲: Hadoop不仅仅包括狭义上的内容,还包括其他辅助框架,实际上指的是一个大数据生态圈,例如:
⽬前Hadoop发⾏版⾮常多,在企业中主要⽤到的三个版本分别是:Apache Hadoop版本(最原始的,所有发⾏版均基于这个版 本进⾏改进)、Cloudera版本(Cloudera’s Distribution Including Apache Hadoop,简称“CDH”)、 Hortonworks版本(Hortonworks Data Platform,简称“HDP”)。
Apache Hadoop 原始版本
官⽹地址:http://hadoop.apache.org/
优点:拥有全世界的开源贡献,代码更新版本⽐较快
缺点:版本的升级,版本的维护,以及版本之间的兼容性,学习⾮常⽅便
Apache所有软件的下载地址(包括各种历史版本):http://archive.apache.org/dist/
软件收费版本ClouderaManager CDH版本 --⽣产环境使⽤
官⽹地址:https://www.cloudera.com/
Cloudera主要是美国⼀家⼤数据公司在Apache开源Hadoop的版本上,通过⾃⼰公司内部的各种 补丁,实现版本之间的稳定运⾏,⼤数据⽣态圈的各个版本的软件都提供了对应的版本,解决了版 本的升级困难,版本兼容性等各种问题,⽣产环境强烈推荐使⽤
免费开源版本HortonWorks HDP版本--⽣产环境使⽤
官⽹地址:https://hortonworks.com/
Hortonworks主要是雅⻁主导Hadoop开发的副总裁,带领 ⼆⼗⼏个核⼼成员成⽴Hortonworks,核⼼产品软件HDP(ambari),HDF免费开源,并且提供 ⼀整套的web管理界⾯,供我们可以通过web界⾯管理我们的集群状态
web管理界⾯软件HDF⽹ 址(http://ambari.apache.org/)
0.x 系列版本:Hadoop当中最早的⼀个开源版本,在此基础上演变⽽来的1.x以及2.x的版本
1.x 版本系列:Hadoop版本当中的第⼆代开源版本,主要修复0.x版本的⼀些bug等
2.x 版本系列:架构产⽣重⼤变化,引⼊了yarn平台等许多新特性
3.x 版本系列:EC技术、YARN的时间轴服务等新特性
Hadoop的优点
Hadoop的缺点
Hadoop=HDFS(分布式⽂件系统)+MapReduce(分布式计算框架)+Yarn(资源协调框架)+Common模块
Hadoop Distribute File System,⼀个⾼可靠、⾼吞吐量的分布式⽂件系统
分而治之思想,数据切割、制作副本、分散储存
图中涉及到的角色:
注: NN,2NN,DN这些既是⻆⾊名称,进程名称,代指电脑节点名称!
MapReduce计算 = Map阶段 + Reduce阶段
Map阶段就是“分”的阶段,负责并行处理输入数据
Reduce阶段就是“合”的阶段,对Map阶段结果进行汇总
从图中我们可以看出,MapReduce就是一个分布式的离线计算框架,将一个任务进行拆解,分散处理,最终汇总结果,做到一台机器处理不了,那就将任务拆解成多个任务,利用多台机器进行处理,最终汇总各台机器的处理结果。
作业调度与集群资源管理的框架
图中涉及到的角色:
注: 和HDFS一样,这些角色既是⻆⾊名称,进程名称,也代指电脑节点名称!
⽀持其他模块的⼯具模块(Configuration、RPC、序列化机制、⽇志操作)
软件和操作系统版本
Hadoop搭建方式
三台虚拟机(静态IP,关闭防⽕墙,修改主机名,配置免密登录,集群时间同步)
在/opt⽬录下创建⽂件夹
# 软件安装包存放⽬录
mkdir -p /opt/lagou/software
# 软件安装⽬录
mkdir -p /opt/lagou/servers
Hadoop下载地址:
https://archive.apache.org/dist/hadoop/common/hadoop-2.9.2/
Hadoop官⽹地址:
http://hadoop.apache.org/
框架 | linux121 | linux122 | linux123 |
---|---|---|---|
HDFS | NameNode、DataNode | DataNode | SecondaryNameNode、DataNode |
YARN | NodeManager | NodeManager | NodeManager、ResourceManager |
登录linux121节点;进⼊/opt/lagou/software,解压安装⽂件到/opt/lagou/servers
tar -zxvf hadoop-2.9.2.tar.gz -C /opt/lagou/servers
添加Hadoop到环境变量 vim /etc/profile
# HADOOP_HOME
export HADOOP_HOME=/opt/lagou/servers/hadoop-2.9.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
使环境变量⽣效
source /etc/profile
验证hadoop
hadoop version
校验结果:
hadoop⽬录
上图中标注的目录解释:
1:bin⽬录:对Hadoop进⾏操作的相关命令,如hadoop,hdfs等
2:etc⽬录:Hadoop的配置⽂件⽬录,⼊hdfs-site.xml,core-site.xml等
3:lib⽬录:Hadoop本地库(解压缩的依赖)
4:sbin⽬录:存放的是Hadoop集群启动停⽌相关脚本,命令
5:share⽬录:Hadoop的⼀些jar,官⽅案例jar,⽂档等
Hadoop集群配置 = HDFS集群配置 + MapReduce集群配置 + Yarn集群配置
HDFS集群配置
MapReduce集群配置
Yarn集群配置
进入配置文件目录
cd /opt/lagou/servers/hadoop-2.9.2/etc/hadoop
配置:hadoop-env.sh
将JDK路径明确配置给HDFS
vim hadoop-env.sh
# 增加以下内容
export JAVA_HOME=/opt/lagou/servers/jdk1.8.0_231
指定NameNode节点以及数据存储⽬录(修改core-site.xml)
官方默认配置:https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-common/core-default.xml
官方默认hdfs的RPC端口号是 8020,这里改为9000
vim core-site.xml
# 增加以下内容
fs.defaultFS
hdfs://linux121:9000
hadoop.tmp.dir
/opt/lagou/servers/hadoop-2.9.2/data/tmp
指定secondarynamenode节点(修改hdfs-site.xml)
官方默认配置:https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
vim hdfs-site.xml
# 增加以下内容
dfs.namenode.secondary.http-address
linux123:50090
dfs.replication
3
指定datanode从节点(修改slaves⽂件,每个节点配置信息占⼀⾏)
vim slaves
# 增加以下内容
linux121
linux122
linux123
注:该⽂件中添加的内容结尾不允许有空格,⽂件中不允许有空⾏
指定MapReduce使⽤的jdk路径(修改mapred-env.sh)
vim mapred-env.sh
# 增加以下内容
export JAVA_HOME=/opt/lagou/servers/jdk1.8.0_231
指定MapReduce计算框架运⾏Yarn资源调度框架(修改mapred-site.xml)
官方默认配置:https://hadoop.apache.org/docs/r2.9.2/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml
# 复制一份mapred-site.xml.template并改名为mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
# 修改mapred-site.xml
vim mapred-site.xml
# 增加以下内容
mapreduce.framework.name
yarn
指定JDK路径
vim yarn-env.sh
# 增加以下内容
export JAVA_HOME=/opt/lagou/servers/jdk1.8.0_231
指定ResourceMnager的master节点信息(修改yarn-site.xml)
官方默认配置:https://hadoop.apache.org/docs/r2.9.2/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
vim yarn-site.xml
# 增加以下内容
yarn.resourcemanager.hostname
linux123
yarn.nodemanager.aux-services
mapreduce_shuffle
指定NodeManager节点
在HDFS配置时已经配置了slaves⽂件,此时无需配置
注意:
Hadoop安装⽬录所属⽤户和所属⽤户组信息,默认是501 dialout,⽽我们操作Hadoop集群的⽤户使⽤的是虚拟机的root⽤户
所以为了避免出现信息混乱,修改Hadoop安装⽬录所属⽤户和⽤户组!!
chown -R root:root /opt/lagou/servers/hadoop-2.9.2
rsync主要⽤于备份和镜像。具有速度快、避免复制相同内容和⽀持符号链接的优点。
rsync和scp区别:
rsync做⽂件的复制要⽐scp的速度快
rsync只对差异⽂件做更新。scp是把所有⽂ 件都复制过去
rsync基本语法
rsync -rvl $pdir/$fname $user@$host:$pdir/$fname
rsync案例
三台虚拟机安装rsync (执⾏安装需要保证机器联⽹)
yum install -y rsync
把linux121机器上的/opt/lagou/software⽬录同步到linux122服务器的root⽤户下的/opt/⽬录
rsync -rvl /opt/lagou/software/root@linux122:/opt/lagou/software
需求:循环复制⽂件到集群所有节点的相同⽬录下
rsync命令原始拷⻉:rsync -rvl /opt/module root@linux123:/opt/
期望脚本:脚本+要同步的⽂件名称
说明:在/usr/local/bin这个⽬录下存放的脚本,root⽤户可以在系统任何地⽅直接执⾏。
脚本实现
在/usr/local/bin⽬录下创建⽂件rsync-script
touch rsync-script
在⽂件中编写shell代码vim rsync-script
#!/bin/bash
#1 获取命令输⼊参数的个数,如果个数为0,直接退出命令
paramnum=$#
if((paramnum==0)); then
echo no params;
exit;
fi
#2 根据传⼊参数获取⽂件名称
p1=$1
file_name=`basename $p1`
echo fname=$file_name
#3 获取输⼊参数的绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取⽤户名称
user=`whoami`
#5 循环执⾏rsync
for((host=121; host<124; host++)); do
echo ------------------- linux$host --------------
rsync -rvl $pdir/$file_name $user@linux$host:$pdir
done
命令细节说明:
basename 命令可取得文件的文件名,如:
basename /usr/local/bin/rsync-script
,则结果是rsync-script
dirname 命令可取得文件所在目录,如:
dirname /usr/local/bin/rsync-script
,则结果是/usr/local/bin
在脚本文件中要用 这对符号 ``
获取命令的结果,然后才能赋值给变量 ,如:
file_name=`basename $p1`
在以下脚本中,如果拷贝文件的时候,文件名不带路径,那么 dirname
命令得到的结果是 .
,表示当前目录。可以在此命令基础上再加一条命令:cd -P
,表示进入物理路径,如:cd -P .
,此时会进入该目录中,然后通过 pwd
打印出当前目录,即可获得该文件所在目录的路径,以下是一个例子:
pdir=`cd -P $(dirname $p1); pwd`
修改脚本 rsync-script 的执行权限
chmod 777 rsync-script
调⽤脚本形式:rsync-script ⽂件名称
rsync-script /usr/local/bin/rsync-script
调⽤脚本分发Hadoop安装⽬录到其它节点
rsync-script /opt/lagou/servers/hadoop-2.9.2
注意: 如果集群是第⼀次启动,需要在Namenode所在节点格式化NameNode,⾮第⼀次不⽤执⾏格 式化Namenode操作!!
格式化命令:
hadoop namenode -format
格式化命令执⾏效果
格式化后创建的⽂件:/opt/lagou/servers/hadoop-2.9.2/data/tmp/dfs/name/current
在linux121上启动NameNode
[root@linux121 hadoop-2.9.2]$ hadoop-daemon.sh start namenode
[root@linux121 hadoop-2.9.2]$ jps
[root@linux121 hadoop-2.9.2]$ jps
3461 NameNode
3608 Jps
在linux121、linux122以及linux123上分别启动DataNode
[root@linux121 hadoop-2.9.2]$ hadoop-daemon.sh start datanode
[root@linux121 hadoop-2.9.2]$ jps
3461 NameNode
3608 Jps
3561 DataNode
[root@linux122 hadoop-2.9.2]$ hadoop-daemon.sh start datanode
[root@linux122 hadoop-2.9.2]$ jps
3190 DataNode
3279 Jps
[root@linux123 hadoop-2.9.2]$ hadoop-daemon.sh start datanode
[root@linux123 hadoop-2.9.2]$ jps
3237 Jps
3163 DataNode
web端查看Hdfs界⾯
查看HDFS集群正常节点:
Yarn集群单节点启动
[root@linux123 servers]# yarn-daemon.sh start resourcemanager
[root@linux123 servers]# yarn-daemon.sh start nodemanager
[root@linux123 servers]# jps
7881 ResourceManager
8166 NodeManager
8094 Jps
[root@linux122 servers]# yarn-daemon.sh start nodemanager
[root@linux122 servers]# jps
8166 NodeManager
8223 Jps
[root@linux121 servers]# yarn-daemon.sh start nodemanager
[root@linux121 servers]# jps
8166 NodeManager
8223 Jps
启动HDFS
[root@linux121 hadoop-2.9.2]$ sbin/start-dfs.sh
[root@linux121 hadoop-2.9.2]$ jps
4166 NameNode
4482 Jps
4263 DataNode
[root@linux122 hadoop-2.9.2]$ jps
3218 DataNode
3288 Jps
[root@linux123 hadoop-2.9.2]$ jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps
启动YARN
[root@linux122 hadoop-2.9.2]$ sbin/start-yarn.sh
注意:
分别启动/停⽌HDFS组件
hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode
启动/停⽌YARN
yarn-daemon.sh start / stop resourcemanager / nodemanager
整体启动/停⽌HDFS—>常用
start-dfs.sh / stop-dfs.sh
整体启动/停⽌YARN—>常用
start-yarn.sh / stop-yarn.sh
HDFS 分布式存储初体验
# 从linux本地⽂件系统上传下载⽂件验证HDFS集群⼯作正常
# 在hdfs创建一个目录
hdfs dfs -mkdir -p /test/input
#本地hoome⽬录创建⼀个⽂件
cd /root
vim test.txt
hello hdfs
#上传linxu⽂件到Hdfs
hdfs dfs -put /root/test.txt /test/input
#从Hdfs下载⽂件到linux本地
hdfs dfs -get /test/input/test.txt
MapReduce 分布式计算初体验
# 在HDFS⽂件系统根⽬录下⾯创建⼀个wcinput⽂件夹
hdfs dfs -mkdir /wcinput
# 在/root/⽬录下创建⼀个wc.txt⽂件(本地⽂件系统)
cd /root/
touch wc.txt
# 编辑wc.txt⽂件
vim wc.txt
# 在⽂件中输⼊如下内容
hadoop mapreduce yarn
hdfs hadoop mapreduce
mapreduce yarn lagou
lagou
lagou
# 上传wc.txt到Hdfs⽬录/wcinput下
hdfs dfs -put wc.txt /wcinput
# 回到Hadoop⽬录/opt/lagou/servers/hadoop-2.9.2
cd /opt/lagou/servers/hadoop-2.9.2
# 执⾏程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /wcinput /wcoutput
# 查看结果
hdfs dfs -cat /wcoutput/part-r-00000
# 结果如下
hadoop 2
hdfs 1
lagou 3
mapreduce 3
yarn 2
在Yarn中运⾏的任务产⽣的⽇志数据不能查看,为了查看程序的历史运⾏情况,需要配置⼀下历史⽇志 服务器。具体配置步骤如下:
配置mapred-site.xml
vim mapred-site.xml
# 增加以下内容
mapreduce.jobhistory.address
linux121:10020
mapreduce.jobhistory.webapp.address
linux121:19888
分发mapred-site.xml到其它节点
rsync-script mapred-site.xml
启动历史服务器
sbin/mr-jobhistory-daemon.sh start historyserver
查看历史服务器是否启动
jps
查看JobHistory
http://linux121:19888/jobhistory
注意: 开启⽇志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。
开启⽇志聚集功能具体步骤如下:
配置yarn-site.xml
vim yarn-site.xml
# 增加以下内容
yarn.log-aggregation-enable
true
yarn.log-aggregation.retain-seconds
604800
分发yarn-site.xml到集群其它节点
rsync-script yarn-site.xml
关闭NodeManager 、ResourceManager和HistoryManager
[root@linux121 hadoop-2.9.2]$ sbin/yarn-daemon.sh stop resourcemanager
[root@linux121 hadoop-2.9.2]$ sbin/yarn-daemon.sh stop nodemanager
[root@linux121 hadoop-2.9.2]$ sbin/mr-jobhistory-daemon.sh stop historyserver
启动NodeManager 、ResourceManager和HistoryManager
[root@linux121 hadoop-2.9.2]$ sbin/yarn-daemon.sh start resourcemanager
[root@linux121 hadoop-2.9.2]$ sbin/yarn-daemon.sh start nodemanager
[root@linux121 hadoop-2.9.2]$ sbin/mr-jobhistory-daemon.sh start historyserver
删除HDFS上已经存在的输出⽂件
bin/hdfs dfs -rm -R /wcoutput
执⾏WordCount程序
hadoop jar share/hadoop/mapreduce/hadoopmapreduce-examples-2.9.2.jar wordcount /wcinput /wcoutput
查看⽇志,如图所示
地址:http://linux121:19888/jobhistory
对大数据感兴趣的小伙伴可以关注我的公众号:大数据学习宝典,在上面会定期更新学习笔记和一些心得!