初学大数据_day1_hadoop

一、Hadoop概述

1、什么是Hadoop

Hadoop是Apache旗下的一个用java语言实现开源软件框架,是一个开发和运行处理大规模数据的软件平台。允许使用简单的编程模型在大量计算机集群上对大型数据集进行分布式处理。

Hadoop基于Java实现 => JDK

Hadoop属于Apache基金会(ASF)下的一个开源框架 => 开源 + 免费

Hadoop主要是对大数据集(数据量比较大 => 适合处理GB级别以上数据集)进行分布式(多台机器)处理。

① 狭义上说,Hadoop指Apache这款开源框架,它的核心组件有:

HDFS(分布式文件系统):解决海量数据存储

YARN(作业调度和集群资源管理的框架):解决资源任务调度

MAPREDUCE(分布式运算编程框架):解决海量数据计算

Map :分,把大数据分解为多个部分,每个部分单独计算

Reduce:合,把每一个Map计算的结果进行合并汇总得出最终计算结论

② 广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈。

在这里插入图片描述

当下的Hadoop已经成长为一个庞大的体系,随着生态系统的成长,新出现的项目越来越多,其中不乏一些非Apache主管的项目,这些项目对HADOOP是很好的补充或者更高层的抽象。

2、Hadoop起源

Hadoop是Apache Lucene创始人 ==Doug Cutting (道格·卡丁)==创建的。最早起源于Nutch(搜索引擎),它是Lucene的子项目。Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题:如何解决数十亿网页的存储和索引问题。

去深圳图书馆 => 找书

去深圳图书馆 => 电脑 => 所有图书目录 => 某个书位于哪个楼层,哪个书架,第几排,第几个

谷歌的三篇文章(重要)

2003年Google发表了一篇论文为该问题提供了可行的解决方案。论文中描述的是谷歌的产品架构,该架构称为:谷歌分布式文件系统(GFS),可以解决他们在网页爬取和索引过程中产生的超大文件的存储需求。Hadoop => HDFS产生 => 海量数据存储

2004年 Google发表论文向全世界介绍了谷歌版的MapReduce系统。

同时期,Nutch的开发人员完成了相应的开源实现HDFS和MAPREDUCE,并从Nutch中剥离成为独立项目HADOOP,到2008年1月,HADOOP成为Apache顶级项目,迎来了它的快速发展期。

2006年Google发表了论文是关于BigTable的,这促使了后来的Hbase的发展。

因此,Hadoop及其生态圈的发展离不开Google的贡献。

3、Hadoop分支

组成不同:

Hadoop1.0版本只有两个组件: HDFS (namenode、secondarynamenode、datanode)和 MapReduce(JobTracker、TaskTracker)

Hadoop2.0版本只有三个 HDFS(物理层面) 和MapReduce(代码层面)、Yarn(物理层面)

Hadoop 3.0相比之前的Hadoop 2.0有一系列的功能增强。目前已经趋于稳定,可能生态圈的某些组件还没有升级、整合完善。

Hadoop1.X

HDFS集群(namenode)

① namenode(NN):负责整个HDFS集群资源管理,负责元数据的存储

什么是元数据?所谓的元数据其实就是描述数据的数据 => 名称、权限、数据还要分片存储,到底每一片存储在哪个位置 => 每个文件占用150B字节大小内存空间

② secondarynamenode(2NN):非namenode备份,辅助namenode完成元数据管理

③ datanode(DN):专门用于实现数据的保存(真正放数据的地方)

MapReduce集群

① jobtracker:负责资源分配管理、负责任务的调度(3颗CPU、128GB * 3)

任务 => jobtracker => 1颗CPU、2GB内存

② tasktracker:负责具体执行任务的节点

缺点:namenode单节点、更严重的是JobTracker是单节点运行,而且只能是单节点。一旦JobTracker出现故障,就形成单点故障,对于整个MR集群时致命的!

Hadoop2.X

HDFS集群

① namenode(NN):负责整个HDFS集群资源管理,负责元数据的存储

什么是元数据?所谓的元数据其实就是描述数据的数据 => 名称、权限、数据还要分片存储,到底每一片存储在哪个位置 => 每个文件占用150B字节大小内存空间

② secondarynamenode(2NN):非namenode备份,辅助namenode完成元数据管理

③ datanode(DN):专门用于实现数据的保存(真正放数据的地方)

没有MR集群了,MR变成了代码层面的任务 => 虽然是代码层面的,但是依然是Hadoop的三大组件之一

YARN资源调度集群

① ResourceManager(RM):负责资源分配管理、负责任务的调度(3颗CPU、128GB * 3)

② NodeManager(NM):负责执行RM分配过来的任务

NodeManager中还存在一个具体的进程,ApplicationMaster(AM) => 分配任务

Hadoop2.X中首先解决的问题就是JobTracker单点故障问题,另外把MapReduce变成代码层面的任务,引入YARN资源调度集群。

我们课程中使用的是:Apache Hadoop 3.X

Hadoop高可用架构 => Zookeeper应用场景:

存在问题:目前Hadoop架构中,namenode、resourcemanager最容易成为性能瓶颈以及单点故障,因为无论是namenode还是resourcemanager都是单点架构,所以所谓的高可用架构就是解决集群中namenode以及resourcemanager单点问题即可。

4、Hadoop特性(优点)

① 扩容能力(Scalable)

Hadoop是在可用的计算机集群间分配数据并完成计算任务的,这些集群可用方便的扩展到数以千计的节点中。

② 成本低(Economical)

Hadoop通过普通廉价的机器组成服务器集群来分发以及处理数据,以至于成本很低。

③ 高效率(Efficient)

通过并发数据,Hadoop可以在节点之间动态并行的移动数据,使得速度非常快。

④ 可靠性(Rellable)

能自动维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。所以Hadoop的按位存储和处理数据的能力值得人们信赖。

副本机制 => 1TB => HDFS有副本机制(默认3副本机制,一个数据会冗余3份)

Hadoop特点:① 扩容能力强 ② 成本低 ③ 高效 ④ 可靠性

有问题:Hadoop支持随机读写么?

答:不是,Hadoop支持随机读(并行读),串行写

5、Hadoop国内外应用

不管是国内还是国外,Hadoop最受青睐的行业是互联网领域,可以说互联网公司是Hadoop的主要使用力量。

国外来说,Yahoo、Facebook、IBM等公司都大量使用Hadoop集群来支撑业务。比如:

Yahoo的Hadoop应用在支持广告系统、用户行为分析、支持Web搜索等。

Facebook主要使用Hadoop存储内部日志与多维数据,并以此作为报告、分析和机器学习的数据源。

国内来说,BAT、美团、JD、滴滴、字节跳动领头的互联网公司是当仁不让的Hadoop使用者、维护者。比如Ali云梯(14年国内最大Hadoop集群)、百度的日志分析平台、推荐引擎系统等。

国内其他非互联网领域也有不少hadoop的应用,比如:

金融行业: 个人征信分析

证券行业: 投资模型分析

交通行业: 车辆、路况监控分析

电信行业: 用户上网行为分析

总之:Hadoop并不会跟某种具体的行业或者某个具体的业务挂钩,它只是一种用来做海量数据分析处理的工具。

二、Hadoop集群搭建

1、Hadoop的社区版与商业版

  • 社区版 免费开源 Apache基金会(Apache Hadoop)
  • 商业版 第三方公司基于免费版的Hadoop开发了一些额外收费功能(Ambari、CDH

选择Linux软件版本一定不要选择最新版(容易成为小白鼠) => 确认大版本,向前推1-2个小版本。3.3.3 => 3.3.0、3.3.1、3.3.2

为什么要有商业版?

答:① 第一个为了赚钱

​ ② Hadoop还有比较大的问题,向前兼容做的不好,Hadoop3.x => Hadoop2.x

2、Hadoop的服务集群搭建

  • 单机版 所有服务运行在一台机器 只有一个主服务主要场景是在进行计算验证式可以搭建单机服务(HDFS、MapReduce、YARN)=> 只适合小型测试
  • 伪分布式 一台机器上运动完整的Hadoop 服务,服务端口会进行区分指定(假装是一个真正的集群)
  • 完全分布式 使用多台不同的机器分别运行不同的服务 => 生产环境

3、Hadoop的三个核心服务

  • 存储 HDFS 分布式文件存储系统
    • namenode 管理服务 master 只有一个
    • datanode 具体负责存储的服务 slave 可以在多台机器上部署
    • secondarynamenode 对name产生数据进行合并存储
  • 资源调度 YARN
    • ResourceManager 管理服务 管理所有机器的资源 只有一个
    • NodeManager 服务监控每台机器的资源汇报给ResourceManager 部署在多台机器
  • 计算 MapReduce
    • 不需要单独启动服务
    • mapreduce需要编写计算逻辑代码,交给MapReduce去运行代码

4、纯净系统搭建

至少准备3台机器,配置基础环境(略)

4.1 上传hadoop压缩包(node1)

上传hadoop压缩包(hadoop-3.3.0-Centos7-64-with-snappy.tar.gz)解压,注意:上传文件位置为 /export/server目录

cd /export/server
tar -xf /export/server/hadoop-3.3.0-Centos7-64-with-snappy.tar.gz

4.2 配置环境变量(node1/node2/node3)

echo 'export HADOOP_HOME=/export/server/hadoop-3.3.0' >> /etc/profile
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> /etc/profile
source /etc/profile

4.3 手动修改配置文件(node1) => 关键点

进入/export/server/hadoop-3.3.0/etc/hadoop目录下进行修改

① hadoop-env.sh文件

文件中设置的是Hadoop运行时需要的环境变量。JAVA_HOME是必须设置的,即使我们当前的系统中设置了JAVA_HOME,它也是不认识的,因为Hadoop即使是在本机上执行,它也是把当前的执行环境当成远程服务器。

# 首先要配置JDK,Java运行环境
export JAVA_HOME=/export/server/jdk1.8.0_241
# 以上配置完成后,在文件最后在添加
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root 
② core-site.xml文件

hadoop的核心配置文件,有默认的配置项core-default.xml。

core-default.xml与core-site.xml的功能是一样的,如果在core-site.xml里没有配置的属性,则会自动会获取core-default.xml里的相同属性的值。

<!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://node1:8020</value>
</property>

<!-- 设置Hadoop本地保存数据路径 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/export/data/hadoop-3.3.0</value>
</property>

<!-- 设置HDFS web UI用户身份 -->
<property>
    <name>hadoop.http.staticuser.user</name>
    <value>root</value>
</property>

<!-- 整合hive 用户代理设置 -->
<property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
</property>

<property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
</property>
③ hdfs-site.xml文件

HDFS的核心配置文件,有默认的配置项hdfs-default.xml。

hdfs-default.xml与hdfs-site.xml的功能是一样的,如果在hdfs-site.xml里没有配置的属性,则会自动会获取hdfs-default.xml里的相同属性的值。

<!-- 设置SNN进程运行机器位置信息 -->
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>node2:9868</value>
</property>
④ mapred-site.xml文件

MapReduce的核心配置文件,有默认的配置项mapred-default.xml。

mapred-default.xml与mapred-site.xml的功能是一样的,如果在mapred-site.xml里没有配置的属性,则会自动会获取mapred-default.xml里的相同属性的值。

<!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->
<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>

<!-- MR程序历史服务器端地址 -->
<property>
  <name>mapreduce.jobhistory.address</name>
  <value>node1:10020</value>
</property>
 
<!-- 历史服务器web端地址 -->
<property>
  <name>mapreduce.jobhistory.webapp.address</name>
  <value>node1:19888</value>
</property>

<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
⑤ yarn-site.xml文件

YARN的核心配置文件,有默认的配置项yarn-default.xml。

yarn-default.xml与yarn-site.xml的功能是一样的,如果在yarn-site.xml里没有配置的属性,则会自动会获取yarn-default.xml里的相同属性的值。

<!-- 设置YARN集群主角色运行机器位置 -->
<property>
	<name>yarn.resourcemanager.hostname</name>
	<value>node1</value>
</property>

<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

<!-- 是否将对容器实施物理内存限制 -->
<property>
    <name>yarn.nodemanager.pmem-check-enabled</name>
    <value>false</value>
</property>

<!-- 是否将对容器实施虚拟内存限制。 -->
<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
</property>

<!-- 开启日志聚集 -->
<property>
  <name>yarn.log-aggregation-enable</name>
  <value>true</value>
</property>

<!-- 设置yarn历史服务器地址 -->
<property>
    <name>yarn.log.server.url</name>
    <value>http://node1:19888/jobhistory/logs</value>
</property>

<!-- 保存的时间7天 -->
<property>
  <name>yarn.log-aggregation.retain-seconds</name>
  <value>604800</value>
</property>
⑥ workers文件

workers文件里面记录的是集群主机名。主要作用是配合一键启动脚本如start-dfs.sh、stop-yarn.sh用来进行集群启动。这时候workers文件里面的主机标记的就是从节点角色所在的机器。

node1
node2
node3

配置完成后进行Hadoop目录转发,直接转发给node2和node3一份即可。

node1操作:

cd /export/server/
scp -r hadoop-3.3.0 root@node2:/export/server/
scp -r hadoop-3.3.0 root@node3:/export/server/

5、修改hadoop的默认配置(不用操作)

  • 格式 xml https://hadoop.apache.org/docs/stable/
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://node1:8020</value>
</property>

# 模板格式

<property>
    <name> hadoop.tmp.dir </name>
    <value>/export/data/hadoop    </value>
</property>

6、启动hadoop服务

  • 数据初始化

    重要:一定要在node1上对namenode进行初始化

      hdfs namenode -format
    

在这里插入图片描述

特别注意:以上格式化操作,只在第一次搭建集群式,操作1次即可,后期一定不要执行这个命令,否则后果自负!!!

  • 启动方式

​ ① 脚本启动:在node1上启动

start-all.sh

在这里插入图片描述

​ ② 单个服务依次启动 当脚本使用不成功时,可以手动依次操作

[root@node1 ~]# hdfs --daemon start namenode
[root@node1 ~]# jps
3889 NameNode
3958 Jps
[root@node1 ~]# hdfs --daemon start datanode
[root@node1 ~]# jps
3889 NameNode
4065 Jps
4010 DataNode
[root@node1 ~]# yarn --daemon start resourcemanager
[root@node1 ~]# jps
4128 ResourceManager
3889 NameNode
4010 DataNode
4172 Jps
[root@node1 ~]# yarn --daemon start nodemanager    
[root@node1 ~]# jps
4128 ResourceManager
3889 NameNode
4404 NodeManager
4521 Jps
4010 DataNode
[root@node1 ~]# 

注:如果采用依次启动的方式,则node2和node3也要执行以上命令

  • 日志查看

    • cd /export/server/hadoop-3.3.0/logs
    • cat hadoop-root-namenode-node1.log | grep ERR
  • 关闭服务

​ ① 脚本关闭

stop-all.sh

​ ② 依次关闭 当脚本使用不成功时,可以手动依次操作

  [root@node1 ~]# hdfs --daemon stop namenode
  [root@node1 ~]# hdfs --daemon stop datanode
  [root@node1 ~]# yarn --daemon stop resourcemanager
  [root@node1 ~]# yarn --daemon stop nodemanager    

7、hadoop使用

  • HDFS服务访问 => 端口 9870
    • 访问namenode服务所在的服务器
  • Yarn服务访问 => 端口 8088 => 查看正在计算的任务成功与否以及日志查看
    • 访问resourcemanager所在的服务器
  • MapReduce的计算
    • cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce
    • hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 20 50

8、Hadoop中HDFS与MR测试过程

HDFS测试:

hadoop fs -put 本地文件名称 远程文件路径(默认已经直接连接到Hadoop的HDFS服务)

案例:删除一个itheima.txt文件到HDFS集群中

touch itheima.txt
hadoop fs -put itheima.txt /

MR测试:

cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce
yarn jar hadoop-mapreduce-examples-3.3.0.jar pi 2 50

涉及到的知识点:蒙特卡洛算法求圆周率

9、使用注意

  • 服务出现问题
    • 关闭所有服务
    • 删除所有服务器的数据文件 /export/data/hadoop-3.3.0/
    • 在node1上重新初始化
    • 再次启动服务
  • 不要忘了配置windows域名

三、Hadoop辅助功能

1、MapReduce jobhistory服务

node1:19888 => 查看job历史信息(默认关闭状态)

  • 背景
默认情况下,yarn上关于MapReduce程序执行历史信息、执行记录不会永久存储;
一旦yarn集群重启 之前的信息就会消失。
  • 功能
保存yarn上已经完成的MapReduce的执行信息。
  • 配置
  • 因为需求修改配置。重启hadoop集群才能生效。
cd /export/server/hadoop-3.3.0/etc/hadoop/
vim mapred-site.xml

<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
</property>

<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
</property>
  • scp同步给其他机器
scp /export/server/hadoop-3.3.0/etc/hadoop/mapred-site.xml node2:/export/server/hadoop-3.3.0/etc/hadoop/

scp /export/server/hadoop-3.3.0/etc/hadoop/mapred-site.xml node3:/export/server/hadoop-3.3.0/etc/hadoop/
  • 重启hadoop集群
  • 自己手动启停jobhistory服务。
#hadoop2.x版本命令
mr-jobhistory-daemon.sh start|stop historyserver

#hadoop3.x版本命令
mapred --daemon start historyserver
mapred --daemon stop historyserver

[root@node1 ~]# jps
13794 JobHistoryServer
13060 DataNode
12922 NameNode
13436 NodeManager
13836 Jps
13327 ResourceManager

2、HDFS 垃圾桶机制(安全保证)

  • 背景 在windows叫做回收站
在默认情况下 hdfs没有垃圾桶 意味着删除操作直接物理删除文件。

[root@node1 ~]# hadoop fs -rm /itcast/1.txt
Deleted /itcast/1.txt
  • 功能:和回收站一种 在删除数据的时候 先去垃圾桶 如果后悔可以复原。
  • 配置
cd /export/server/hadoop-3.3.0/etc/hadoop/
vim core-site.xml

在core-site.xml中开启垃圾桶机制

指定保存在垃圾桶的时间。单位分钟

<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>

实际工作中,可以根据业务的需要调整垃圾桶回收时间1 ~ 7天。

普及一个概念垃圾桶中的checkpoint(删除点),删除点 => 24小时是一个周期,每个周期就可以理解为一个checkpoint。24小时(1个checkpoint)-> 24小时(1个checkpoint),checkpoint周期可以自定义,如果没有设置,默认等同于fs.trash.interval。

  • 集群同步配置 重启hadoop服务。
[root@node1 hadoop]# pwd
/export/server/hadoop-3.3.0/etc/hadoop
[root@node1 hadoop]# scp core-site.xml node2:$PWD
core-site.xml                                              100% 1027   898.7KB/s   00:00    
[root@node1 hadoop]# scp core-site.xml node3:$PWD
core-site.xml 

3、垃圾桶使用

  • 配置好之后 再删除文件 直接进入垃圾桶
[root@node1 ~]# hadoop fs -rm /itcast.txt
INFO fs.TrashPolicyDefault: Moved: 'hdfs://node1:8020/itcast.txt' to trash at: hdfs://node1:8020/user/root/.Trash/Current/itcast.txt
  • 垃圾桶的本质就是hdfs上的一个隐藏目录。
hdfs://node1:8020/user/用户名/.Trash/Current
  • 后悔了 需要恢复怎么做?
hadoop fs -cp /user/root/.Trash/Current/itcast.txt /
  • 就想直接删除文件怎么做?
hadoop fs -rm -skipTrash /itcast.txt

[root@node1 ~]# hadoop fs -rm -skipTrash /itcast.txt
Deleted /itcast.txt
                                        100% 1027   898.7KB/s   00:00    

[root@node1 hadoop]# scp core-site.xml node3:$PWD
core-site.xml


## 3、垃圾桶使用

- 配置好之后 再删除文件  直接进入垃圾桶

[root@node1 ~]# hadoop fs -rm /itcast.txt
INFO fs.TrashPolicyDefault: Moved: ‘hdfs://node1:8020/itcast.txt’ to trash at: hdfs://node1:8020/user/root/.Trash/Current/itcast.txt


- 垃圾桶的本质就是hdfs上的一个隐藏目录。

hdfs://node1:8020/user/用户名/.Trash/Current


- 后悔了 需要恢复怎么做?

hadoop fs -cp /user/root/.Trash/Current/itcast.txt /


- 就想直接删除文件怎么做?

```shell
hadoop fs -rm -skipTrash /itcast.txt

[root@node1 ~]# hadoop fs -rm -skipTrash /itcast.txt
Deleted /itcast.txt
  • 21
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值