1.Hadoop的前世今生
1)搜索引擎:网络爬虫+索引服务器(生成索引+检索)
2)Doung Cutting写了lucence包(生成索引+检索)
3)Nutch:网络爬虫+索引服务器(lucence封装)
a.分布式存储??
b.分布式计算???
4)2002年谷歌开源了GFS论文,Doung Cutting写了HDFS模块
5)2004年谷歌开源了MapReduce论文,Doung Cutting写了MapReduce模块
6)Nutch0.9版本后将HDFS和MapReduce模块拆分出来,形成了一个大数据处理框架Hadoop
2.Hadoop概述
1)四大模块
common、HDFS、MapReduce、yarn
2)HDFS(Hadoop distributed file system):分布式文件系统
a.文件系统:文件管理+block块管理
单机文件系统
Windows:FAT16、FAT32、NTFS
Linux:ext2/3/4、VFS
b.分布式文件系统
多个服务器存储文件
c.三大组件
<1>NameNode
①元数据:文件名、目录名、属性(生成时间、权限、副本)
②文件名与block列表映射关系
③block与DateNode列表的映射关系
<2>DataNode:
block块数据、校验和编码
<3>SecondaryNameNode:
分担NameNode压力,合并编辑日志edits和镜像文件fsimage(因为合并操作需要占用很大的资源,影响客户端请求),合并后将最终的及镜像文件fsimage返回给NameNode进行处理。
3)yarn:资源管理和任务管理
a.四大组件
ResourceManager(RM)、NodeManager(NM)、ApplicationMaster(AM)、Container
- ResourceManager
①处理client请求
②启动/监控ApplicationMaster
③监控NodeManager
④资源分配与调度
- NodeManager
①单个节点上的资源管理
②处理来自ResourceManager的命令
③处理来自ApplicationMaster的命令
- ApplicationMaster
①程序切分
②为应用程序申请资源,并分配任务
③任务控制与容错
- Container
①对任务运行环境的抽象,丰庄路CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息
b.执行流程
图片
<1>client连接RM提交作业,RM给client一个Job ID(注:ApplicationsManager和RESourceScheduler)
<2>RM中的ApplicationManager连接一个RM,让RM创建一个AM处理客户作业请求
<3>AM连接RM中的ApplicationManager申请Nodemanager
<4>AM去ResourceManager给client的作业申请资源(CPU、内存、磁盘、网络)
<5>AM连接NM,发送client job作业程序和申请的资源(CPU、内存、磁盘、网络)
<6>NM启动Container进程运行job的不同任务
<7>Container进程运行状态实时反馈给AM
<8>AM反馈任务状态信息给RM中的ApplicationsManager
<9>client端可以连接RM或AM,查询job的执行情况
- 注:NM启动后去AM上进行注册,会不断发送心跳,说明处于存活状态。
4)MapReduce
a)概述
- 将分布式计算过程分为两个阶段,Map和Reduce
- Map阶段并行处理输入数据
- Reduce阶段对Map结果进行汇总
- Shuffle连接Map和Reduce两个阶段
- Map Task将数据写到本地磁盘
- Reduce Task从每个Map Task上读取一份数据
- 仅适合离线批处理,速度慢
- 具有很好的容错性和扩展性
- 适合简单的批处理方式
- 缺点明显
- 系统开销大,各个Task需要不断申请释放资源,过多使用磁盘导致效率低下等
b) 执行流程
<1>输入文件切片
<2>mapper进程处理切片
<3>shuffle流程
<4>reducer进程聚合数据
<5>输出文件
3.Hadoop生态系统
图片
1)Hadoop:分布式存储、分布式计算、资源调度与任务管理
HDFS、MapReduce、yarn、common
2)Luncene:索引检索工具包
3) Nutch:开源的搜索引擎
4)HBase/Cassandra:基于谷歌的BigTable开源的列式存储的非关系型数据库
5)Hive:基于SQL的分布式计算引擎,同时是一个数据仓库
Pig:基于Pig Latin脚本的计算引擎
6)Thrift/Avro:RPC框架,用于网络通信
7)BigTop:项目测试、打包、部署
8)Oozie/Azakban:大数据的工作流框架
9)Chukwa/Scribe/Flume:数据收集框架
10)Wgirr:部署为云服务的库
11)Sqoop:数据迁移工具
12)Zoopkeeper:分布式协调服务框架
13)HAMA:图计算框架
14)Mahout:机器学习的框架,封装了很多的算法
4.hadoop环境搭建
1)三个环境
单机环境、伪分布式环境、分布式环境
2)三个分支
Apache版本
cdh版本
hdp版本
3)
4)
5)Hadoopde安装配置
a.单机模式
b.伪分布式
<1>HDFS
④启动HDFS进程
sbin/satrt-dfs.sh
或
sbin/hadoop-damon.sh start namenode
sbin/hadoop-damon.sh start datanode
sbin/hadoop-damon.sh start secondarynamenode
⑤浏览器访问
http://<主机名>:50070
注:50070是http的协议端口号,8020是RPC tcp协议的端口号
<2>YARN
①
②
③启动YARN进程:Resourcemanager、NodeManager
sbin/start-yarn.sh
或
sbin/yarn-damon.sh satrt resourcemanager
sbin/yarn-domon.sh start nodemanager
④浏览器访问
http://<主机名>:8088
注:8032是RPC tcp协议的端口号,8088是http协议的端口号
c.分布式环境(Distributed)(多个服务器运行Hadoop进程)
①机器规格
机器1:NameNode DataNode NodeManager(NM)
机器2: DataNode ResourceManager NodeManager(NM)
机器3:DataNode SecondaryNameNode NodeManager(NM)
②克隆服务器
VMware克隆/复制
注:机器2/3的MAC地址需要重新生成
拷贝源文件
③修改网卡并配置
修改网卡
④ntp时间服务器
1)作用:
同步三个时间服务器的时间,保持服务器时间的一致
注:机器1当成时间服务器,机器2/3同步机器1的时间
2)机器1上配置ntp时间服务器
vim /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes
vim /etc/ntp.conf
server xxx
server 127.127.1.0
fudge 127,.127.1.0 xxx
restrict 192.168.83.0 xxx
3)重启ntp服务
service ntpd reatsrt
4)机器1设置时间
date -s yyyy-mm-dd
date -s hh:mm:ss
5)机器2/3同步时间
手动同步:
/usr/sbin/ntpdate <主机名>
定时同步:
crontab -e:
0-59/10 * * * * /usr/sbin/ntpdate master
注:crontab格式:分 小时 天 月 周 <command>
6)Hadoop配置文件配置
①core-site.xml
namenode访问地址
②yarn-site.xml
secondarynamenode访问地址
③slaves
从节点的主机名
注:scp -r software/hadoop-2.7.3/etc/hadoop root@slave1:software/hadoop-2.7.3/etc/hadoop
scp -r software/hadoop-2.7.3/etc/hadoop root@slave1:software/hadoop-2.7.3/etc/hadoop
7)SSH免密码登陆
生成公钥/私钥对
ssh-keygen -t rsa
拷贝公钥至远程主机或本地authorized_keys文件
ssh-copy-id<主机名>
5.初识MapReduce
1)启动Hadoop服务器
sbin/start-all.sh
2)浏览器访问
HDFS http://master:50070
YARN http://master:18088
3)各个指标
a.Cluster Metrics
集群指标:app(提交、排队、运行、完成)、Container个数、资源(内存、CPU)
b.Cluster Nodes Metrics
机器状态:active、decommissioning、decommisioned、lost、unhealth、reboot
c.Scheduler Metrics
Tapacity Type、Scheduing Resource Type、MInimum Allocation、Maxinum Allocation
d.作业指标
4)聚合日志
a.含义:
①分布式计算作业放到NodeManager运行,日志信息放在Nodemanager本地目录:
yarn.nodemanager.http.logs:${yarn.log.dir}/userlogs
②通过配置将本地日志放到HDFS服务器上,即聚合日志的概念
yarn.nodemanager.log.retain-seconds
当不启用日志聚合此参数生效,日志文件保存在本地的时间,单位为s
yarn.nodemanager.remote-app-log-dir
当应用程序运行结束后,日志被转移到的HDFS目录(启用日志聚集功能时有效), 修改为保存的日志文件夹
yarn.nodemanager.remote-app-log-dir-suffix
远程日志目录子目录名称(启用日志聚集功能时有效)
b.配置yarn-site.xml
<!--启用日志聚合功能>
<property>
<name> yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--启用多长时间>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>3600</value>
</property>
5)历史服务器
a.配置项
mapreduce.jobhistory.address jobhistory的rpc访问地址
mapreduce.jobhistory.webapp.address Jobhistory的http访问地址
启动 sbin/mr-jobhistory-daemon.sh start historyserver
WEB UI http://<主机名>:19888
停止 sbin/mr-jobhistory-daemon.sh stop historyserver