一、Hadoop概述
1.1 Hadoop是什么
1)Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
2)主要解决,海量数据的存储和海量数据的分析计算问题。
3)广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈。
1.2 Hadoop优势(4高)
1)高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。
2)高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。
3)高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。
4)高容错性:能够自动将失败的任务重新分配。
1.3 Hadoop组成
1.3.1 HDFS架构概述
Hadoop Distributed File System,简称HDFS,是一个分布式文件系统。
1)NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等。
2)DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和。一个文件会被拆分成多个block,有一个blockSize属性,默认是128M。如果有一个130M的文件,将会被拆分成两个文件,一个128M一个2M。这些blocks被存储在多个DataNodes上面。DataNode定期向NameNode发送心跳信息,汇报本身及其存储的block信息,健康状况。HDFS是一个高可靠的存储非常大的文件,而且这些文件是夸节点的,在一个集群里面。一个文件会被分割成很多块,存储在节点里面。一个文件会被拆分成一个有序的blocks。这些blocks都是以多副本的方式存储的,为了容错。因为如果只存储在一个节点上,那个节点挂掉就没办法访问了。如果是多副本存储,及时其中的几个节点不能访问了,其他节点依然能正常访问blocks的副本。
3)Secondary NameNode(2nn):每隔一段时间对NameNode元数据备份。
1.3.2 YARN架构概述
Yet Another Resource Negotiator简称YARN ,另一种资源协调者,是Hadoop的资源管理器。
1.3.3 MapReduce架构概述
MapReduce将计算过程分为两个阶段:Map和Reduce
1)Map阶段并行处理输入数据
2)Reduce阶段对Map结果进行汇总
1.3.4 HDFS、YARN、MapReduce三者关系
Mapreduce,Yarn,Hdfs三者之间的关系,可以用电脑来进行解释。大体可以理解为:windows系统电脑上的一个视频播放软件(mapreduce),通过windows操作系统(yarn)找到存在电脑硬盘(hdfs)上的电影,然后视频播放器播放电影
Yarn 相当于电脑的操作系统,统管电脑的资源调配
Mapreduce相当于电脑上的一个应用程序,电脑上可以有很多应用程序
Hdfs相当于电脑的硬盘,存储文件
Yarn,Mapreduce,Hdfs三者是解藕的,电脑必须要有操作系统,目前Yarn比较合适,电脑必须要有硬盘存储数据,目前一般用Hdfs;但是电脑可以有很多应用程序,所以Spark,Mapreduce,Kafka等都可以当作运行在Yarn系统上的应用程序。
Yarn Mapreduece Hdfs 联系
1、mapreduce在客户端启动mapreduce application master(简称mam),mam
2、mam想resourcemanager申请运算资源
3、mam拿到运算资源后,遍历hdfs上的文件,然后规划启动多少个maptask和reducetask
4、mam把mapreduce程序分发到各个节点
5、各个节点利用nodemanager管理运算资源,各个节点启动container容器进行运算,即执行maptask,reduecetask
1.4 大数据技术生态体系
图中涉及的技术名词解释如下:
1)Sqoop:Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySQL)间进行数据的传递,可以将一个关系型数据库(例如:MySQL,Oracle 等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
2)Flume:Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;
3)Kafka:Kafka是一种高吞吐量的分布式发布订阅消息系统;
4)Spark:Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算。
5)Flink:Flink是当前最流行的开源大数据内存计算框架。用于实时计算的场景较多。
6)Oozie:Oozie是一个管理Hadoop作业(job)的工作流程调度管理系统。
7)Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
8)Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
9)ZooKeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。
1.5 推荐系统框架图
二、 Hadoop运行环境搭建
2.1 虚拟机环境准备
2.1.1 虚拟环境下安装Linux
参考:https://www.yuque.com/asange-3skzu/wzvyls/him84g
2.1.1 虚拟环境下克隆2台主机
2.1.2 设置2台主机的IP和主机名
nano-salve01:192.168.100.201
nano-salve02:192.168.100.202
1、启动nano-salve01
2、设置IP

3、设置主机名

4、重启系统
以同样的方法修改nano-salve02的主机名和IP。
2.2 Hadoop环境搭建
2.2.1 安装文件准备
1、jdk:jdk-8u211-linux-x64.tar.gz下载
提取码:6r5f
2、hadoop hadoop-2.9.2.tar.gz
3、用Xshell连接nano,在nano opt/目录下创建software目录,将下载的文件传到software目录下
(1)创建software目录
(2)进入software目录
(3)上传文件
(Xshell上传文件,需要安装lrzsz包)
安装lrzsz包后,用rz指令上传文件
2.2.2 关闭防火墙
2.2.3 SSH免密登录
1、SSH 远程登录主机
用ssh 从一台机器登录到另一台机器(ssh IP,退出exit)需要用户名和密码
2、配置免密码登录
(1)生成公钥和私钥
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
(2)将公钥拷贝到要免密登录的目标机器上(3台都要复制)
ssh-copy-id 192.168.100.200
ssh-copy-id 192.168.100.201
ssh-copy-id 192.168.100.202
这时登录192.168.100.201,192.168.100.202就不需要密码了
注意:
还需要在nano-salve01,nano-salve02采用相同的方法配置免密登录。
2.2.4 安装JDK
1、卸载虚拟机自带的JDK,注意:如果你的虚拟机是最小化安装不需要执行这一步。
rpm -qa | grep -i java | xargs -n1 rpm -e —nodeps
Ø rpm -qa:查询所安装的所有rpm软件包
Ø grep -i:忽略大小写
Ø xargs -n1:表示每次只传递一个参数
Ø rpm -e –nodeps:强制卸载软件
2、安装JDK
(1)在nano主机opt目录下创建module目录
(2)进入/opt/software目录,将jdk安装到module目录下

(3)配置环境变量
在文件最后配置下面信息:
配置完成后让新的环境变量PATH生效:
JDK安装完成。
2.2.5 安装Hadoop
1、安装Hadoop
(1)与安装JDK相同,将hadoop安装到/opt/module目录下

(2)配置环境变量


(3) Hadoop目录结构
- bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本
- etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
- lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
- sbin目录:存放启动或停止Hadoop相关服务的脚本
- share目录:存放Hadoop的依赖jar包、文档、和官方案例
2、配置域名
为了方便配置和访问,将IP改成域名的方式访问。
| nano | nano-salve01 | nano-salve02 | |
|---|---|---|---|
| IP | 192.168.100.200 | 192.168.100.201 | 192.168.100.202 |
| 域名 | master | salve01 | salve02 |

将hosts里面的内容删除,填写以下内容:
配置完成后,我们访问192.168.100.201主机就可以用域名salve01来代替了
如:ssh 192.168.100.201 写在 ssh salve01
将hosts文件复制到其它2台主机
scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)
scp -r 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
3、集群部署规划
注意:
Ø NameNode和SecondaryNameNode不要安装在同一台服务器。
Ø ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上,但可以配置在同一台机器。
| master | salve01 | salve02 | |
|---|---|---|---|
| HDFS |
NameNode DataNode |
DataNode |
SecondaryNameNode DataNode |
| YARN | NodeManager | NodeManager ResourceManager |
NodeManager |
【hadoop配置文件存放在hadoop安装路径的etc/hadoop目录下】
(1)配置Jdk
找到红框位置,配置JDK路径
(2)核心配置文件:core-site.xml

配置core-site.xml
文件内容如下:
<?xml version=”1.0” encoding=”UTF-8”?>
<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>

(3)HDFS配置文件:hdfs-site.xml
<?xml version=”1.0” encoding=”UTF-8”?>
<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>


(4)YARN配置文件:yarn-site.xml
文件内容如下:
<?xml version=”1.0” encoding=”UTF-8”?>
<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>

(5)MapReduce配置文件:mapred-site.xml
文件内容如下:
<?xml version=”1.0” encoding=”UTF-8”?>
<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>
目录下找不到mapred-site.xml文件,需要将mapred-site.xml.template重命名

(6)配置集群文件:slaves
清空文件原来的内容,填写以下内容:
4、启用集群
(1)将/etc/profile文件复制到salve01,salve02
(2)将jdk、hadoop复制到salve01,salve02
在salve01,salve02两台主机的opt目录下创建module目录
回到master,复制jdk和hadoop
(3)复制完成后,让salve01,salve02的环境变量PATH生效:
(4)在master主机格式化NameNode(第一次启动)
(5)在master启动hdfs(每次启动)
参考规划表
| master | salve01 | salve02 | |
|---|---|---|---|
| HDFS |
NameNode DataNode |
DataNode |
SecondaryNameNode DataNode |
| YARN | NodeManager | NodeManager ResourceManager |
NodeManager |
启动:start-dfs.sh
停止:stop-dfs.sh
(6)在salve01启动yarn(每次启动)
启动:start-yarn.sh
停止:stop-yarn.sh
(7)在salve02查看进程(jps)
(8)在windows主机用web端口打开hdfs
http://192.168.100.200:50070
(9)用域名方式 在windows主机用web端口打开hdfs
在windows主机配置域名服务
进入C:\Windows\System32\drivers\etc路径,编辑hosts文件,在文件末尾加入如下内容
以后就可以用master来代替192.168.100.200了
在浏览器用http://master:50070同样能打开hdfs
大功告成!。



