下周接着学习hadoop
一、 大数据简介
1. 大数据的定义
⼤数据是指⽆法在⼀定时间范围内⽤常规软件⼯具进⾏捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策⼒、洞察发现⼒和流程优化能⼒的海量、⾼增⻓率和多样化的信息资产。
- 大量
采集、存储和计算的数据量都⾮常⼤。大数据领域数据量基本上以PB为最小单位,而PB级数据量有多⼤?是怎样的⼀个概念?
假如⼿机播放MP3的速度为平均每分钟1MB,⽽1⾸歌曲的平均时⻓为4分钟,那么1PB存量的歌 曲可以连续播放2000年。
1PB 也相当于50%的全美学术研究图书馆藏书咨询内容。
基于IDC的报告预测,从2013年到2020年,全球数据量会从4.4ZB猛增到44ZB!⽽到了2025 年,全球会有163ZB的数据量!根据存储单位换算,1ZB = 1024 * 1024PB,所以全球的数据量已经⼤到爆了!⽽传统的关系型数据库根本处理不了如此海量的数据! - 高速
在⼤数据时代,数据的创建、存储、分析都要求被⾼速处理,⽐如电商⽹站的个性化推荐尽可能要 求实时完成推荐,这也是⼤数据区别于传统数据挖掘的显著特征。 - 多样
数据形式和来源多样化。包括结构化、半结构化和⾮结构化数据,具体表现为⽹络⽇志、⾳频、视频、图⽚、地理位置信息等等,多类型的数据对数据的处理能⼒提出了更⾼的要求。 - 真实
确保数据的真实性,才能保证数据分析的正确性 - 低价值
数据价值密度相对较低,或者说是浪⾥淘沙却⼜弥⾜珍贵。互联⽹发展催⽣了⼤量数据,信息海 量,但价值密度较低,如何结合业务逻辑并通过强⼤的机器算法来挖掘数据价值,是⼤数据时代最 需要解决的问题,也是⼀个有难度的课题。
3. 大数据的应用场景
随着⼤数据的发展,⼤数据技术已经⼴泛应⽤在众多⾏业,⽐如仓储物流、电商零售、汽⻋、电信、⽣物医学、⼈⼯智能、智慧城市等等领域,包括在疫情防控战中,⼤数据技术也发挥了重要的作⽤。
- 仓储物流
- 电商零售
- 个性推荐
- “双十一购物节”实时销售额大屏
- 汽车无人驾驶领域
- 电信
- 生物医学
- 人工智能
- 智慧城市
1. 什么是Hadoop
Hadoop 是⼀个适合⼤数据的分布式存储和计算平台。
从狭义上讲: Hadoop 就是一个框架平台,它包括以下三部分:
- HDFS:分布式文件系统
- Map Reduce:分布式离线计算框架。负责计算
- Yarn:分布式资源调度框架,负责资源调度
由此我们可以得出,狭义上的Hadoop解决的是海量数据的存储和离线计算
从广义上讲: Hadoop不仅仅包括狭义上的内容,还包括其他辅助框架,实际上指的是一个大数据生态圈,例如:
- Flume:日志数据采集
- Sqoop:关系型数据库数据采集(ETL工具
- Hive:数据仓库工具
- Kafka:高吞吐消息中间件
- HBase:海量列式非关系型数据库
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/)
Hadoop的优点
- Hadoop具有存储和处理数据能⼒的⾼可靠性。
- Hadoop通过可⽤的计算机集群分配数据,完成存储和计算任务,这些集群可以⽅便地扩展到数以千计的节点中,具有⾼扩展性。
- Hadoop能够在节点之间进⾏动态地移动数据,并保证各个节点的动态平衡,处理速度⾮常快,具有⾼效性。
- Hadoop能够⾃动保存数据的多个副本,并且能够⾃动将失败的任务重新分配,具有⾼容错性。
Hadoop的缺点
- Hadoop不适⽤于低延迟数据访问。
- Hadoop不能⾼效存储⼤量⼩⽂件。
- Hadoop不⽀持多⽤户写⼊并任意修改⽂件。
- NameNode(nn): 存储⽂件的元数据,⽐如⽂件名、⽂件⽬录结构、⽂件属性(⽣成时间、副本 数、⽂件权限),以及每个⽂件的块列表和块所在的DataNode等。
- SecondaryNameNode(2nn):辅助NameNode更好的⼯作,⽤来监控HDFS状态的辅助后台程 序,每隔⼀段时间获取HDFS元数据快照。
- DataNode(dn): 在本地⽂件系统存储⽂件块数据,以及块数据的校验
- ResourceManager(rm): 处理客户端请求、启动/监控ApplicationMaster、监控NodeManager、资 源分配与调度;
- NodeManager(nm): 单个节点上的资源管理、处理来⾃ResourceManager的命令、处理来⾃ ApplicationMaster的命令;
- ApplicationMaster(am): 数据切分、为应⽤程序申请资源,并分配给内部任务、任务监控与容错。
- Container: 对任务运⾏环境的抽象,封装了CPU、内存等多维资源以及环境变量、启动命令等任务运 ⾏相关的信息。
- ResourceManager是⽼⼤,NodeManager是⼩弟,ApplicationMaster是计算任务专员。
- 软件和操作系统版本
- Hadoop框架是采⽤Java语⾔编写,需要java环境(jvm)
- JDK版本:JDK8版本
- Hadoop搭建方式
- 单机模式:单节点模式,⾮集群,⽣产不会使⽤这种⽅式
- 单机伪分布式模式:单节点,多线程模拟集群的效果,⽣产不会使⽤这种⽅式
- 完全分布式模式:多台节点,真正的分布式Hadoop集群的搭建(⽣产环境建议使⽤这种⽅式)
安装Hadoop
- 登录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
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集群配置
- 将JDK路径明确配置给HDFS(修改hadoop-env.sh)
- 指定NameNode节点以及数据存储⽬录(修改core-site.xml)
- 指定SecondaryNameNode节点(修改hdfs-site.xml)
- 指定DataNode从节点(修改etc/hadoop/slaves⽂件,每个节点配置信息占⼀⾏)
- MapReduce集群配置
- 将JDK路径明确配置给MapReduce(修改mapred-env.sh)
- 指定MapReduce计算框架运⾏Yarn资源调度框架(修改mapred-site.xml)
- Yarn集群配置
- 将JDK路径明确配置给Yarn(修改yarn-env.sh)
- 指定ResourceManager⽼⼤节点所在计算机节点(修改yarn-site.xml)
- 指定NodeManager节点(会通过slaves⽂件内容确定)
4.1 HDFS集群配置
- 进入配置文件目录
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
# 增加以下内容
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://linux121:9000</value>
</property>
<!-- 指定Hadoop运⾏时产⽣⽂件的存储⽬录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/lagou/servers/hadoop-2.9.2/data/tmp</value>
</property> - 指定secondarynamenode节点(修改hdfs-site.xml)
官方默认配置:https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
vim hdfs-site.xml
# 增加以下内容
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>linux123:50090</value>
</property>
<!--副本数量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property> - 指定datanode从节点(修改slaves⽂件,每个节点配置信息占⼀⾏)
vim slaves
# 增加以下内容
linux121
linux122
linux123
注:该⽂件中添加的内容结尾不允许有空格,⽂件中不允许有空⾏
4.2 MapReduce集群配置
- 指定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
# 增加以下内容
<!-- 指定MR运⾏在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
4.3 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的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>linux123</value>
</property>
<!-- Reducer获取数据的⽅式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property> - 指定NodeManager节点
在HDFS配置时已经配置了slaves⽂件,此时无需配置
注意:
Hadoop安装⽬录所属⽤户和所属⽤户组信息,默认是501 dialout,⽽我们操作Hadoop集群的⽤户使⽤的是虚拟机的root⽤户
所以为了避免出现信息混乱,修改Hadoop安装⽬录所属⽤户和⽤户组!!
chown -R root:root /opt/lagou/servers/hadoop-2.9.2
4.4 分发配置
4.4.1 rsync 远程同步⼯具
- rsync主要⽤于备份和镜像。具有速度快、避免复制相同内容和⽀持符号链接的优点。
- rsync和scp区别:
- rsync做⽂件的复制要⽐scp的速度快
- rsync只对差异⽂件做更新。scp是把所有⽂ 件都复制过去
- rsync基本语法
rsync -rvl $pdir/$fname $user@$host:$pdir/$fname
- 命令 选项参数 要拷⻉的⽂件路径/名称 ⽬的⽤户@主机:⽬的路径/名称
- 选项参数说明
- -r :递归
- -v:显示复制过程
- -l:拷⻉符号连接
- rsync案例
- 三台虚拟机安装rsync (执⾏安装需要保证机器联⽹)
yum install -y rsync - 把linux121机器上的/opt/lagou/software⽬录同步到linux122服务器的root⽤户下的/opt/⽬录
rsync -rvl /opt/lagou/software/root@linux122:/opt/lagou/software
4.4.2 集群分发脚本编写
- 需求:循环复制⽂件到集群所有节点的相同⽬录下
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
- Apache Hadoop 原始版本