Hadoop3部署+笔记

Hadoop基本概念

数据处理最典型应用: 公司产品运营情况分析  电商推荐系统    精准广告推送系统


基本概念

1.有海量数据 .

2.有对海量数据进行挖掘的需求.

3.对海量数据进行挖掘的软件工具(hadoopsparkstormflinktezimpala ...

海量数据 存储、运算  =====分布式 存储、运算 ------已经有大量的框架

存储框架

---> HDFS  分布式文件存储系统   (各种文件结构)hadoop 提供的存储框架

---> Hbase 分布式数据库系统       (结构化存储)

---> Kafka 分布式消息缓存系统  (容量大、数据存储单元---消息--一条消息)

kafka 实时流式数据处理场景中 应用广泛

运算框架 (要解决的核心问题就是帮用户将处理逻辑在很多机器上并行)

---> MapReduce     离线批处理/hadoop 中的运算框架       -----最底层的实现机制

---> spark      离线批处理/实时流式计算  (spark 可替代 storm 实时流失计算----是对mapreduce的再封装

---> storm     实时流式计算

  spark  这三个运算框架中的王者

辅助类的工具解放大数据工程师的一些繁琐工作

----> Hive   数据仓库工具  可以接收SQL  翻译成mapReduce 或者 spark 程序运行。(本质是mapReduce 或者spark

----> Flume     数据自动采集

----> Sqoop      数据迁移      (hadoop 系统里面的数据 <===> 关系型数据库)

----> elastic search  ------分布式搜索引擎

hadoop 中有3个核心组件

分布式文件系统 Hdfs  ----实现将文件分布式存储在很多服务器上

分布式运算编程框架 mapReduce ----实现在很多机器上分布式并行运算

分布式资源调度框架 YARN  ---帮助用户调度大量的mapReduce程序 ,并合理分配运算资源。

hdfs部署

hadoop端口说明

9000  客户端与namenode交互内部端口

【2.8.1】50070 || 【3.1.1】9870

 客户端与namenode交互端口 namenode内置的web服务namenode启动后,这个内置服务就启动了

1. 下载安装包&解压
[root@node1 software]# wget https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz --no-check-certificate

#tar -zxvf hadoop-3.3.1.tar.gz

bin  下面的目录是一些功能命令
sbin  下面是一些管理命令
share   存放 jar包     进入share/ 目录  删除文档    rm -rf doc/
----
2. 进入etc /hadoop/目录。改配置文件   核心配置参数
----|  指定hadoop的默认文件系统为hdfs
----|  指定hdfs的namenode 节点为哪台机器
----|  指定namenode 软件存储元数据的本地目录
----|  指定datanode 软件存放文件块的本地目录

1).修改hadoop-env.sh    配置 java 的安装目录  export JAVA_HOME=/usr/local/jdk1.8.0_251

    
2).修改core-site.xml
<configuration>
   <property>
       <name>fs.defaultFS</name>
       <value>hdfs://192.168.6.130:9000/</value>    <!-- URI 指定hdfs的namenode 节点为哪台机器-->
  </property>
</configuration>
3).修改hdfs-site.xml   
<configuration>
   <property>
       <name>dfs.namenode.name.dir</name>    <!--hdfs  namenode  存放元数据的工作目录 -->
       <value>/app/hdpdata/name</value>   
  </property>
   <property>
       <name>dfs.datanode.data.dir</name>    <!--hdfs  datanode  存放数据的工作目录 -->
       <value>/app/hdpdata/data</value>   
  </property>
   <property>
       <name>dfs.namenode.secondary.http-address</name>   <!--secondarynamenode-->
       <value>192.168.6.131:50090</value>   <!--node2机器启动secondarynamenode -->
  </property>
</configuration>
4).启动hadoop 前 初始化 namenode 元数据工作目录
要在namenode 机器上执行hadoop 的一个命令来初始化namenode 的元数据存储目录
【2.8.1】hadoop namenode -format       #需要配置hadoop 环境变量
【3.1.1】hdfs    namenode     -format

5).启动namenode 
a.手动启动   hadoop-daemon.sh  start  namenode

b.脚本启动   
 ①配置免密登录   ② 进入hadoop 安装目录 后找到 /etc/hadoop/slaves   文件|| workers   文件 【3.1.1版本】
③ 将要启动的namenode、datanode  域名配置在 slaves     一个域名一行。
④进入sbin 目录,启动用 start-dfs.sh    \  停止 用 stop-dfs.sh

配置node环境变量

export TERM=xterm
export JAVA_HOME=/usr/local/jdk1.8.0_251
export HADOOP_HOME=/app/hadoop-3.3.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
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
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

多机器部署配置免密登录

#在本地机器上使用ssh-keygen产生公钥私钥对

ssh-keygen

#ssh-copy-id将公钥复制到远程机器中

ssh-copy-id   192.168.6.130

ssh-copy-id   192.168.6.131

ssh-copy-id   192.168.6.132

集群启动/停止 namenode、datanode

1.配置文件修改

 将要启动的namenode、datanode  域名配置在/app/hadoop-3.3.1/etc/hadoop/workers  一个域名一行。


2.进入sbin 目录,启动用 start-dfs.sh    \  停止 用 stop-dfs.sh


启动namenode 报错

解决方法:

vim /app/hadoop-3.3.1/sbin/start-dfs.sh 

vim /app/hadoop-3.3.1//sbin/stop-dfs.sh

文件头部添加

HDFS_DATANODE_USER=root

HADOOP_SECURE_DN_USER=hdfs

HDFS_NAMENODE_USER=root

HDFS_SECONDARYNAMENODE_USER=root


WEB-UI 

1.先关闭防火墙

1、命令行界面输入命令“systemctl status firewalld.service”并按下回车键。

2、然后在下方可度以查看得到“active(running)”,此时说明防火墙已经被打开了。

3、在命令行中输入systemctl stop firewalld.service命令,进行关闭防火墙。

4、然后再使用命令systemctl status firewalld.service,在下方出现disavtive(dead),这权样就说明防火墙已经关闭。

5、再在命令行中输入命令“systemctl disable firewalld.service”命令,即可永久关闭防火墙。

2.特别注意:Hadoop3.0之前web访问端口是50070   hadoop3.0之后web访问端口为9870

hdfs核心原理

1.什么是元数据?

hdfs的目录结构及每一个文件的块信息(块的id,块的副本数量,块的存放位置<datanode>

2.元数据由谁负责管理?   namenode

3.namenode把元数据存放在哪?

namenode的实时完整的元数据存储在内存中:namenode 还会在磁盘中(dfs.namenode.name.dir)存储内存元数据在某个时间点上的镜像文件。namenode会把引起元数据变化的客户端操作记录在edits日志文件中;

---------------------------

secondarynamenode 会定期从namenode上下载fsimage镜像和新生成的edits日志,然后加载fsimage镜像到内存中,然后顺序解析edits 文件。对内存中的元数据对象进行修改(整合)整合完成后,将内存元数据序列化成一个新的fsimage.  并将这个fsimage 镜像文件上传给namenode.

------

上述过程叫做:checkpoint操作

提示:secondary namenode每次做checkpoint操作时,都需要从namenode上下载上次的fsimage镜像文件吗?

第一次checkpoint需要下载,以后就不用下载了,因为自己的机器上就已经有了。


4.hdfs文件写入和读取过程

4.1 写入过程

1、客户端(Client)发出请求(将请求发给namenode,通过RPC与namenode建立通信),这里以 将大小为300M的a.txt文件上传到 根目录下(/a.txt)为例

2、namenode对收到的请求做出检测;检测1:检测客户端是否有上传权限,检测2:所上传的路径下是否存在重名文件,(即根目录下是否有a.txt)

3、检测通过,反馈给客户端 可以上传的指令

4、客户端接到反馈,将文件进行预处理(a.txt大小为300M,一个block的大小默认为128M,因此分为3个block(如上图红、蓝、浅紫色三块block),编号为block1,block2,block3,其中block3不满128M),向namenode发出上传block1的请求。

5、namenode根据集群中网络拓扑和机架感知以及副本机制进行文件分配,选出可以上传的3个主机地址列表(默认为三个,一份存放于本地,一份存放于同机架内的datanode,一份存放于不同机架内的datanode),分别是datanode1,datanode2,datanode3(注意,namenode实际上并没有和datanode直接通信,只是选出三个可用的datanode的地址)

6、namenode将datanode地址列表返回给客户端Client。

7、客户端Client与datanode1进行通信(本质是RPC调用),建立pipeline,用于传输文件。当datanode1收到请求后会去与datanode2进行通信并建立pipeline(注意,这里不是客户端Client与datanode2进行通信),然后datanode2收到请求后会向datanode3进行通信并建立pipeline,如此一级接一级,直到pipeline建立完成,再逐级返回给Client。

8、客户端Client准备上传第一个block1(先从磁盘读取数据然后放到本地内存缓存),先将大小为128M的block1切分为64KB的数据包packet(2000个packet)(单位为packet,64KB)。

9、datanode1接收到第一个packet数据包并缓存到对应的目录下,再将第一个packet通过pipeline传输给datanode2,将packet传送完成后datanode1会加入一个等待应答队列等待datanode2应答,同理datanode2接收packet信息并缓存到对应目录下,再传给datanode3,datanode2将packet传送完成后会加入一个应答队列等待datanode3应答,datanode3接收packet并缓存。

10、 datanode3缓存第一个packet后会给datanode2发送一个ack的正确应答,然后datanode2向datanode1发送正确应答ack,最后由datanode1向客户端Client发送ack,至此第一个block0的第一个packed传输完成,客户端开始发送下一个packet,直到第一个block0传输完成。

11、跳转到第四步,客户端向namenode发出上传block1的请求,重复4-10(注意,新的三个datanode地址列表不一定和之前的datanode相同),直到第三个block传输完成后,写入完成。

---------------------------------------------------------------------------------------

4.2 读取过程

步骤

hdfs client向namenode请求读取/下载 /a.txt,来确定请求文件block所在的位置
namenode进行权限检查,获取block的所有DataNode 的信息,并根据一些规则(就近原则、集群拓扑结构等)选出block所在的DataNode的主机,并返回 /a.txt 文件的主机列表
namenode 向 hdfs client 响应文件的主机列表 {blk1:dn1, blk2:dn2, blk3:dn3}
hdfs client 与每一个blokc所在的主机建立pipieline管道(以多线程的方式同时建立的)
client 开始数据的读取,并以package 为单位(大小是64K)
将block 进行合并,合并成一个完整的文件。
 


MapReduce与YARN

1.mapReduce框架的两个阶段

【map 阶段----程序MapTask  】mapTask 按照文件大小划分多少个任务。一个文件会被分成多个任务。多个任务可以分批运行。

 context.getInputSplit()   

InputSplit 输入切片:用于描述每个maptask所处理的数据任务范围。

如果maptask 读取的是文件,划分范围应该用(文件路径+偏移量范围)信息描述...

 

map task:

读数据:Input Format -->TextInputFormat 读文本文件

                                       SequenceFileInputFormat  读Sequence文件

                                        DBInputFormat 读数据库

处理数据:maptask通过调用Mapper类的map()方法实现对数据的处理。

分区:将map阶段产生 key-value数据,分发给若干个reduce task 来分担负载,maptask调用Partitioner类的getPartition()方法来决定如何划分数据给不同的reduce task

对key-value数据做排序:调用key.compareTo()方法来实现对key-value数据排序。

【reduce 阶段 ---程序ReduceTask 】相同key的数据作为一组进行处理。对每一组的数据都处理一次。聚合

reduce task:

读取数据:通过HTTP方式从maptask产生的数据文件中下载属于自己的"区" 的数据到本地磁盘。然后将多个"同区文件" 做合并(归并排序)

处理数据:通过调用GroupingComparator的compare() 方法来判断文件中的那些key-value 属于同一组,然后将这一组数据传给Reduce类的reduce() 方法聚合一次。

输出结果:调用OutputFormat 组件将结果key-value 数据写出去。

OutputFormat--->TextOutputFormat 写文本文件(一对key-value写一行 分隔符用\t)

                        --->SequenceFileOutputFormat 写Sequence文件(直接将key-value对象序列化到文件中)

                        --->DBOutputFormat

2.yarn

mapreduce 程序应该是在很多机器上并行启动,而且先执行maptask,当众多的maptask都处理完自己的数据后,还需要启动众多的reducetask,

这个过程如果用户自己手动调度不太现实,需要一个自动化的调度平台【YARN】hadoop 中就为运行mapreduce之类的分布式运算程序开发了一个自动化调度平台----yarn

yarn  集群

                        Resource Manager (只能在一台机器上有,负责任务调度)

                        Node  Manager(可以有多个,负责创建容器-运行程序

3.MapReduce程序在YARN上启动-运行-注销的全流程


yarn 集群安装

a.修改 yarn-site.xml 指定 ResourceManager 是哪台机器。

b.复制配置文件到其他机器上。

[root@node1 hadoop]# pwd
/app/hadoop-3.3.1/etc/hadoop
[root@node1 hadoop]# scp yarn-site.xml node2:$PWD

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

c.启动yarn 。start-yarn.sh 此脚本在Resource Manager 机器上执行

[root@node1 hadoop-3.3.1]# ./sbin/start-yarn.sh 
Starting resourcemanager
上一次登录:二 8月  9 23:25:41 CST 2022pts/0 上
Starting nodemanagers
上一次登录:二 8月  9 23:44:07 CST 2022pts/0 上
[root@node1 hadoop-3.3.1]# 

<!-- yarn-site.xml -->

<configuration>
   <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.resource.memory-mb</name>     <!--内存-->
      <value>-1</value>
   </property>

  <property>
      <name>yarn.nodemanager.resource.cpu-vcores</name>    <!--cpu核数-->
      <value>-1</value>
   </property>
    <!-- 配置为true,表示可让yarn自动探测服务器的资源,比如cpu和内存等 -->
    <property>
        <name>yarn.nodemanager.resource.detect-hardware-capabilities</name>
        <value>true</value>
    </property>

</configuration>

d. ResourceManager  web-UI

[root@node1 hadoop-3.3.1]# jps
3301 NodeManager
3162 ResourceManager
2620 NameNode

[root@node1 hadoop-3.3.1]# netstat -ntlp|grep 3162
tcp        0      0 192.168.6.130:8088      0.0.0.0:*               LISTEN      3162/java 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值