EmmmuaCode EmmmuaCode
首页​
导航🚀​
  • 数据结构
  • 计算机网络
  • Java基础

    • JavaSE
    • JVM虚拟机
    • JUC并发编程
  • JavaWeb

    • Servlet
    • MVC
    • filter|listener
  • HTML
  • CSS
  • JavaScript
  • Vue
  • uni-app
  • Spring5
  • SpringMVC
  • SpringBoot2
  • SpringCloud
  • SpringSecurity
  • 搜索引擎

    • ElasticSearch
  • 消息队列

    • RabbitMQ
  • 服务器

    • Nginx🌐
  • 服务框架

    • Dubbo
  • Python基础
  • 数据分析
  • Hadoop
  • SQL 数据库

    • MySQL
  • NoSQL 数据库

    • NoSQL数据库概论
    • Redis
    • MongoDB
    • HBase
  • 框架

    • MyBatis
    • MyBatis-Plus
    • ShardingSphere
  • 部署

    • Linux
    • Docker
  • 管理

    • Maven
    • Git
  • 友情链接
  • 优秀博客文章
  • 索引

    • 分类
    • 标签
    • 归档
  • 其他

    • 关于
Github (opens new window)

wufan

海内存知己,天涯若比邻。
首页​
导航🚀​
  • 数据结构
  • 计算机网络
  • Java基础

    • JavaSE
    • JVM虚拟机
    • JUC并发编程
  • JavaWeb

    • Servlet
    • MVC
    • filter|listener
  • HTML
  • CSS
  • JavaScript
  • Vue
  • uni-app
  • Spring5
  • SpringMVC
  • SpringBoot2
  • SpringCloud
  • SpringSecurity
  • 搜索引擎

    • ElasticSearch
  • 消息队列

    • RabbitMQ
  • 服务器

    • Nginx🌐
  • 服务框架

    • Dubbo
  • Python基础
  • 数据分析
  • Hadoop
  • SQL 数据库

    • MySQL
  • NoSQL 数据库

    • NoSQL数据库概论
    • Redis
    • MongoDB
    • HBase
  • 框架

    • MyBatis
    • MyBatis-Plus
    • ShardingSphere
  • 部署

    • Linux
    • Docker
  • 管理

    • Maven
    • Git
  • 友情链接
  • 优秀博客文章
  • 索引

    • 分类
    • 标签
    • 归档
  • 其他

    • 关于
Github (opens new window)
  • Python 基础

    • Python 基础篇(一)
    • Python 基础篇(二)
    • Python 基础篇(三)
    • Python 基础篇(四)
    • Python 基础篇 (五)
    • Python 列表
    • Python 字典
    • Python 元组和集合
    • Python 字符串
    • Python 函数与变量作用域
    • Python 异常处理
    • Python 面向对象
    • Python 模块与包
    • Python 文件
    • 学生信息管理系统
  • 数据分析

    • 数据分析介绍
    • 环境搭建
    • Numpy库
    • Pandas 库
  • 大数据

    • 大数据基本导论
  • Hadoop

    • hadoop集群搭建
      • 1. hadoop概念及其发展
      • 2. hadoop的历史版本介绍
      • 3. hadoop三大公司发型版本介绍
        • 3.1 免费开源版本apache
        • 3.2 免费开源hortonWorks
        • 3.3 软件收费版本ClouderaManager
      • 4. hadoop的模块组成
      • 5. hadoop的架构模型
        • 5.1 1.x的版本架构模型介绍
        • 5.2 2.x的版本架构模型
      • 6.standAlone,伪分布,分布式环境介绍
      • 7. CDH版本hadoop重新编译
        • 7.1 为什么要重新编译
        • 7.2 编译环境的准备
        • 7.2.1 准备linux环境
        • 7.2.2 安装jdk1.7
        • 7.2.3 安装maven
        • 7.2.4 安装findbugs
        • 7.2.5 在线安装相关依赖
        • 7.2.6 安装protobuf
        • 7.2.7 安装snappy
        • 7.2.8 下载cdh源码准备编译
        • 7.2.9 常见编译错误
      • 8 CDH的hadoop集群搭建
      • 9. hadoop集群初体验
        • 9.1 HDFS 使用初体验
        • 9.2 mapreduce程序初体验
      • 10. MapReduce的jobHistory介绍
      • 11. HDFS的垃圾桶机制
        • 11.1 垃圾桶机制配置的详解
        • 11.2 垃圾桶机制验证
    • HDFS详解
    • HDFS API
    • MapReduce
    • MapReduce原理及API
    • YARN
  • zookeeper

    • zookeeper详细文档
  • Hive

    • Hive基础
    • Hive SQL语法大全
    • Hive性能调优
  • 工具

    • Flume 详细文档
    • Sqoop详细文档
    • Azkaban详细文档
  • studynotes
  • bigdata
  • Hadoop
wufan
2024-04-21
目录
1. hadoop概念及其发展
2. hadoop的历史版本介绍
3. hadoop三大公司发型版本介绍
3.1 免费开源版本apache
3.2 免费开源hortonWorks
3.3 软件收费版本ClouderaManager
4. hadoop的模块组成
5. hadoop的架构模型
5.1 1.x的版本架构模型介绍
5.2 2.x的版本架构模型
6.standAlone,伪分布,分布式环境介绍
7. CDH版本hadoop重新编译
7.1 为什么要重新编译
7.2 编译环境的准备
7.2.1 准备linux环境
7.2.2 安装jdk1.7
7.2.3 安装maven
7.2.4 安装findbugs
7.2.5 在线安装相关依赖
7.2.6 安装protobuf
7.2.7 安装snappy
7.2.8 下载cdh源码准备编译
7.2.9 常见编译错误
8 CDH的hadoop集群搭建
9. hadoop集群初体验
9.1 HDFS 使用初体验
9.2 mapreduce程序初体验
10. MapReduce的jobHistory介绍
11. HDFS的垃圾桶机制
11.1 垃圾桶机制配置的详解
11.2 垃圾桶机制验证

hadoop集群搭建

配套资源:https://github.com/emmmua/bigdata 学习视频: https://b23.tv/fyGKOEZ

# 1. hadoop概念及其发展

​ Hadoop最早起源于Nutch。Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随 着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题。

2003年、2004年谷歌发表的两篇论文为该问题提供了可行的解决方案。

  • 分布式文件系统(GFS),可用于处理海量网页的存储
  • 分布式计算框架MAPREDUCE,可用于处理海量网页的索引计算问题。

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

狭义上来说,hadoop就是单独指代hadoop这个软件, 广义上来说,hadoop指代大数据的一个生态圈,包括很多其他的软件

# 2. hadoop的历史版本介绍

0.x系列版本:hadoop当中最早的一个开源版本,在此基础上演变而来的1.x以及2.x的版本

1.x版本系列:hadoop版本当中的第二代开源版本,主要修复0.x版本的一些bug等,是0.20.x发行版的延续

2.x版本系列:架构产生重大变化,引入了yarn平台等许多新特性,是0.23.x发行版的延续

# 3. hadoop三大公司发型版本介绍

# 3.1 免费开源版本apache

http://hadoop.apache.org/ (opens new window)

优点:拥有全世界的开源贡献者,代码更新迭代版本比较快,

缺点:版本的升级,版本的维护,版本的兼容性,版本的补丁都可能考虑不太周到,学习可以用,实际生产工作环境尽量不要使用

apache所有软件的下载地址(包括各种历史版本):

http://archive.apache.org/dist/

# 3.2 免费开源hortonWorks

https://hortonworks.com/ (opens new window)

​ hortonworks主要是雅虎主导Hadoop开发的副总裁,带领二十几个核心成员成立Hortonworks,核心产品软件HDP(ambari),HDF免费开源,并且提供一整套的web管理界面,供我们可以通过web界面管理我们的集群状态,web管理界面软件HDF网址(http://ambari.apache.org/ (opens new window))

# 3.3 软件收费版本ClouderaManager

https://www.cloudera.com/ (opens new window)

​ cloudera主要是美国一家大数据公司在apache开源hadoop的版本上,通过自己公司内部的各种补丁,实现版本之间的稳定运行,大数据生态圈的各个版本的软件都提供了对应的版本,解决了版本的升级困难,版本兼容性等各种问题,生产环境强烈推荐使用

# 4. hadoop的模块组成

​ 1)Hadoop HDFS:一个高可靠、高吞吐量的分布式文件系统。

​ 2)Hadoop MapReduce:一个分布式的离线并行计算框架。

​ 3)Hadoop YARN:作业调度与集群资源管理的框架。

​ 4)Hadoop Common:支持其他模块的工具模块。

# 5. hadoop的架构模型

# 5.1 1.x的版本架构模型介绍

文件系统核心模块:

​ NameNode:集群当中的主节点,主要用于管理集群当中的各种数据

​ secondaryNameNode:主要能用于hadoop当中元数据信息的辅助管理

​ DataNode:集群当中的从节点,主要用于存储集群当中的各种数据

数据计算核心模块:

​ JobTracker:接收用户的计算请求任务,并分配任务给从节点

​ TaskTracker:负责执行主节点JobTracker分配的任务

# 5.2 2.x的版本架构模型

【NameNode与ResourceManager单节点架构模型】

文件系统核心模块:

​ NameNode:集群当中的主节点,主要用于管理集群当中的各种数据

​ secondaryNameNode:主要能用于hadoop当中元数据信息的辅助管理

​ DataNode:集群当中的从节点,主要用于存储集群当中的各种数据

数据计算核心模块:

​ ResourceManager:接收用户的计算请求任务,并负责集群的资源分配

​ NodeManager:主要用于接收applicationMaster分配的任务

​ applicationMaster: resourcemanager为每个计算任务启动一个appMaster, appMatser主要负责资源的申请, 任务的分配

​ 【NameNode单节点与ResourceManager高可用架构模型】

文件系统核心模块:

​ NameNode:集群当中的主节点,主要用于管理集群当中的各种数据

​ secondaryNameNode:主要能用于hadoop当中元数据信息的辅助管理

​ DataNode:集群当中的从节点,主要用于存储集群当中的各种数据

数据计算核心模块:

​ ResourceManager:接收用户的计算请求任务,并负责集群的资源分配,以及计算任务的划分,通过zookeeper实现ResourceManager的高可用

​ NodeManager:负责执行主节点ResourceManager分配的任务

【NameNode高可用与ResourceManager单节点架构模型】

文件系统核心模块:

​ NameNode:集群当中的主节点,主要用于管理集群当中的各种数据,其中nameNode可以有两个,形成高可用状态

​ DataNode:集群当中的从节点,主要用于存储集群当中的各种数据

​ JournalNode:文件系统元数据信息管理

数据计算核心模块:

​ ResourceManager:接收用户的计算请求任务,并负责集群的资源分配,以及计算任务的划分

​ NodeManager:负责执行主节点ResourceManager分配的任务

【NameNode与ResourceManager高可用架构模型】

文件系统核心模块:

​ NameNode:集群当中的主节点,主要用于管理集群当中的各种数据,一般都是使用两个,实现HA高可用

​ JournalNode:元数据信息管理进程,一般都是奇数个

​ DataNode:从节点,用于数据的存储

数据计算核心模块:

​ ResourceManager:Yarn平台的主节点,主要用于接收各种任务,通过两个,构建成高可用

​ NodeManager:Yarn平台的从节点,主要用于处理ResourceManager分配的任务

# 6.standAlone,伪分布,分布式环境介绍

hadoop 文档

http://hadoop.apache.org/ (opens new window)

Hadoop总共有三种运行方式。本地模式(Local (Standalone) Mode),伪分布式(Pseudo-Distributed Mode),分布式(Fully-Distributed Mode)

    1. StandAlone(local mode)运行模式
	无需运行任何守护进程(daemon),所有程序都在单个JVM上执行。由于在本机模式下测试和调试MapReduce程序较为方便,因此,这种模式适宜用在开发阶段。	
1
    1. 伪分布式环境运行模式
	如果Hadoop对应的Java进程都运行在一个物理机器上,称为伪分布运行模式,也就是说使用单台服务器来运行hadoop的所有进程,伪分布式环境通信过程与完全分布式通信过程完全相同。
1
    1. 集群运行模式
	如果Hadoop对应的Java进程运行在多台物理机器上,称为集群模式.[集群就是有主有从]。这种模式适用于测试机集群,线上部署机集群等
1

# 7. CDH版本hadoop重新编译

# 7.1 为什么要重新编译

​ 由于CDH的所有安装包版本都给出了对应的软件版本,一般情况下是不需要自己进行编译的,但是由于cdh给出的hadoop的安装包没有提供带C程序访问的接口,所以我们在使用本地库(本地库可以用来做压缩,以及支持C程序等等)的时候就会出问题

# 7.2 编译环境的准备

# 7.2.1 准备linux环境

​ 准备一台linux环境,内存4G或以上,硬盘40G或以上,我这里使用的是Centos6.9 64位的操作系统(注意:一定要使用64位的操作系统)

​ 虚拟机联网,关闭防火墙,关闭selinux

【关闭防火墙命令】

service  iptables   stop
chkconfig   iptables  off 
1
2

【关闭selinux】

vim /etc/selinux/config
1

# 7.2.2 安装jdk1.7

注意:亲测证明hadoop-2.6.0-cdh5.14.0 (opens new window) 这个版本的编译,只能使用jdk1.7,如果使用jdk1.8那么就会报错

    1. 查看linux中是否自带jdk
rpm -qa | grep java 
1

    1. 将查询到的jdk全部卸载掉
rpm -e xxxxxxx:  xxxxxx表示在上图中看到的内容
1
    1. 上传jdk安装包(jdk1.7),并解压指定目录
cd /export/softwares
rz 上传
tar -zxvf jdk-7u71-linux-x64.tar.gz -C ../servers/
1
2
3
    1. 配置环境变量
vim /etc/profile

export JAVA_HOME=/export/servers/jdk1.7.0_71
export PATH=:$JAVA_HOME/bin:$PATH
1
2
3
4
    1. 重新加载环境变量, 生效最新的环境变量
source /etc/profile
1

# 7.2.3 安装maven

​ 这里使用maven3.x以上的版本应该都可以,不建议使用太高的版本,强烈建议使用3.0.5的版本即可

​ 将maven的安装包上传到/export/softwares,然后解压maven的安装包到/export/servers

cd /export/softwares/
tar -zxvf apache-maven-3.0.5-bin.tar.gz -C ../servers/
1
2

【配置maven的环境变量】

vim /etc/profile

export MAVEN_HOME=/export/servers/apache-maven-3.0.5
#export MAVEN_OPTS="-Xms4096m –Xmx4096m"
export PATH=:$MAVEN_HOME/bin:$PATH
1
2
3
4
5

【让修改立即生效】

source /etc/profile
1

【解压maven的仓库,我已经下载好了的一份仓库,用来编译hadoop会比较快】

上传资料中 mvnrepository.tar.gz 
cd /export/softwares
rz 上传
tar -zxvf mvnrepository.tar.gz -C /export/servers/
1
2
3
4

【修改maven的配置文件】

cd  /export/servers/apache-maven-3.0.5/conf
vim settings.xml

1) 指定我们本地仓库存放的路径
1
2
3
4

2) 添加一个我们阿里云的镜像地址,会让我们下载jar包更快 
	<mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
1
2
3
4
5
6
7

# 7.2.4 安装findbugs

    1. 下载 findbugs
cd  /export/softwares
wget --no-check-certificate https://sourceforge.net/projects/findbugs/files/findbugs/1.3.9/findbugs-1.3.9.tar.gz/download -O findbugs-1.3.9.tar.gz
1
2
    1. 解压 解压findbugs
cd  /export/softwares
tar -zxvf findbugs-1.3.9.tar.gz -C ../servers/
1
2
    1. 配置findbugs的环境变量
vim /etc/profile

export JAVA_HOME=/export/servers/jdk1.7.0_75
export PATH=:$JAVA_HOME/bin:$PATH

export MAVEN_HOME=/export/servers/apache-maven-3.0.5
export PATH=:$MAVEN_HOME/bin:$PATH
# 主要配置这个内容: 
export FINDBUGS_HOME=/export/servers/findbugs-1.3.9
export PATH=:$FINDBUGS_HOME/bin:$PATH
1
2
3
4
5
6
7
8
9
10
    1. 让环境变量生效
source /etc/profile
1

# 7.2.5 在线安装相关依赖

yum install -y autoconf automake libtool cmake
yum install -y ncurses-devel
yum install -y openssl-devel
yum install -y lzo-devel zlib-devel gcc gcc-c++
yum install -y  bzip2-devel
1
2
3
4
5

# 7.2.6 安装protobuf

protobuf下载百度网盘地址 https://pan.baidu.com/s/1pJlZubT (opens new window)

下载之后上传到 /export/softwares 解压protobuf并进行编译

cd /export/softwares
rz 上传
tar -zxvf protobuf-2.5.0.tar.gz -C ../servers/
cd   /export/servers/protobuf-2.5.0
./configure
make && make install
1
2
3
4
5
6

# 7.2.7 安装snappy

snappy下载地址: http://code.google.com/p/snappy/ (opens new window)

cd /export/softwares/
rz 上传刚下载好的snappy
tar -zxf snappy-1.1.1.tar.gz  -C ../servers/
cd ../servers/snappy-1.1.1/
./configure
make && make install
1
2
3
4
5
6

# 7.2.8 下载cdh源码准备编译

源码下载地址为: http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.14.0-src.tar.gz (opens new window)

下载源码进行编译
cd  /export/softwares
wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.14.0-src.tar.gz
tar -zxvf hadoop-2.6.0-cdh5.14.0-src.tar.gz -C ../servers/
cd  /export/servers/hadoop-2.6.0-cdh5.14.0
1
2
3
4
5
  • 编译不支持snappy压缩:
mvn package -Pdist,native -DskipTests –Dtar   
1
  • 编译支持snappy压缩:
mvn package -DskipTests -Pdist,native -Dtar -Drequire.snappy -e -X
1

​ 编译完成之后我们需要的压缩包就在下面这个路径里面

# 7.2.9 常见编译错误

如果编译时候出现这个错误:

An Ant BuildException has occured: exec returned: 2

这是因为tomcat的压缩包没有下载完成,需要自己下载一个对应版本的apache-tomcat-6.0.53.tar.gz的压缩包放到指定路径下面去即可

这两个路径下面需要放上这个tomcat的 压缩包

# 8 CDH的hadoop集群搭建

安装环境服务部署规划

  • 第一步: 上传压缩包并解压
将我们重新编译之后支持snappy压缩的hadoop包上传到第一台服务器并解压
第一台机器执行以下命令

cd /export/softwares/
mv hadoop-2.6.0-cdh5.14.0-自己编译后的版本.tar.gz hadoop-2.6.0-cdh5.14.0.tar.gz
tar -zxvf hadoop-2.6.0-cdh5.14.0.tar.gz -C ../servers/
1
2
3
4
5
6
  • 第二步: 查看hadoop支持的压缩方式以及本地库
cd /export/servers/hadoop-2.6.0-cdh5.14.0
bin/hadoop checknative
1
2

​ 如果出现openssl为false,那么所有机器在线安装openssl即可,执行以下命令,虚拟机联网之后就可以在线进行安装了

yum -y install openssl-devel
1
  • 第三步: 修改配置文件

【修改core-site.xml】

cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
vim core-site.xml

<configuration>
    <!-- 指定HDFS访问的域名地址  -->
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://node01:8020</value>
	</property>
    <!-- 临时文件存储目录  -->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/tempDatas</value>
	</property>
	<!--  缓冲区大小,实际工作中根据服务器性能动态调整 -->
	<property>
		<name>io.file.buffer.size</name>
		<value>4096</value>
	</property>

	<!--  开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟 -->
	<property>
		<name>fs.trash.interval</name>
		<value>10080</value>
	</property>
</configuration>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

【修改hdfs-site.xml】

cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
vim hdfs-site.xml

<configuration>
	<!-- NameNode存储元数据信息的路径,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用,进行分割   --> 
	<!--   集群动态上下线 
	<property>
		<name>dfs.hosts</name>
		<value>/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/accept_host</value>
	</property>
	
	<property>
		<name>dfs.hosts.exclude</name>
		<value>/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/deny_host</value>
	</property>
	 -->
	 
	 <property>
			<name>dfs.namenode.secondary.http-address</name>
			<value>node01:50090</value>
	</property>
	<!--  hdfs的集群的web  访问地址  -->
	<property>
		<name>dfs.namenode.http-address</name>
		<value>node01:50070</value>
	</property>
	<property>
		<name>dfs.namenode.name.dir</name>
		<value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas</value>
	</property>
	<!--  定义dataNode数据存储的节点位置,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用逗号进行分割  -->
	<property>
		<name>dfs.datanode.data.dir</name>
		<value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/datanodeDatas</value>
	</property>
	  <!-- edits产生的文件存放路径 -->
	<property>
		<name>dfs.namenode.edits.dir</name>
		<value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/edits</value>
	</property>
    
	<property>
		<name>dfs.namenode.checkpoint.dir</name>
		<value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/snn/name</value>
	</property>
	<property>
		<name>dfs.namenode.checkpoint.edits.dir</name>
		<value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/snn/edits</value>
	</property>
    <!-- 默认文件存储的副本数量 -->
	<property>
		<name>dfs.replication</name>
		<value>3</value>
	</property>
    <!-- 关闭hdfs的文件权限 -->
	<property>
		<name>dfs.permissions</name>
		<value>false</value>
	</property>
    <!-- 默认 文件的存储的块的大小 -->
	<property>
		<name>dfs.blocksize</name>
		<value>134217728</value>
	</property>
</configuration>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

【修改hadoop-env.sh】

cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
vim hadoop-env.sh

export JAVA_HOME=/export/servers/jdk1.8.0_141
1
2
3
4

【修改mapred-site.xml】

cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
vim mapred-site.xml

<configuration>
    <!--指定运行mapreduce的环境是yarn -->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
	<!--开启job的小任务模式-->
	<property>
		<name>mapreduce.job.ubertask.enable</name>
		<value>true</value>
	</property>
	 <!-- MapReduce JobHistory Server IPC host:port -->
	<property>
		<name>mapreduce.jobhistory.address</name>
		<value>node01:10020</value>
	</property>
	<!-- MapReduce JobHistory Server Web UI host:port -->
	<property>
		<name>mapreduce.jobhistory.webapp.address</name>
		<value>node01:19888</value>
	</property>
</configuration>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

【修改yarn-site.xml】

cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
vim yarn-site.xml

<configuration>
    <!-- yarn resourcesmanager 的主机地址 -->
	<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>node01</value>
	</property>
    <!-- 逗号隔开的服务列表,列表名称应该只包含a-zA-Z0-9_,不能以数字开始-->
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
	<!-- 启用日志聚合功能,应用程序完成后,收集各个节点的日志到一起便于查看 -->
	<property>
		<name>yarn.log-aggregation-enable</name>
		<value>true</value>
	</property>
    <property>
		 <name>yarn.log.server.url</name>
		 <value>http://node01:19888/jobhistory/logs</value>
</property>
    <!--多长时间将聚合删除一次日志 此处 30 day -->
	<property>
		<name>yarn.log-aggregation.retain-seconds</name>
		<value>2592000</value>
	</property>
    <!--时间在几秒钟内保留用户日志。只适用于如果日志聚合是禁用的-->
<property>
        <name>yarn.nodemanager.log.retain-seconds</name>
        <value>604800</value><!--7 day-->
</property>
    
    <!--指定文件压缩类型用于压缩汇总日志-->
    <property>
            <name>yarn.nodemanager.log-aggregation.compression-type</name>
            <value>gz</value>
    </property>
    <!-- nodemanager本地文件存储目录-->
    <property>
            <name>yarn.nodemanager.local-dirs</name>
            <value>/export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/yarn/local</value>
    </property>
    <!-- resourceManager  保存最大的任务完成个数 -->
    <property>
            <name>yarn.resourcemanager.max-completed-applications</name>
            <value>1000</value>
    </property>
</configuration>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

【修改slaves文件 】

cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
vim slaves

node01
node02
node03
1
2
3
4
5
6
  • 第四步: 创建文件存放的目录
mkdir -p /export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/tempDatas
mkdir -p /export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas
mkdir -p /export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/datanodeDatas 
mkdir -p /export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/edits
mkdir -p /export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/snn/name
mkdir -p /export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/snn/edits
1
2
3
4
5
6
  • 第五步: 安装包的分发
cd /export/servers/
scp -r hadoop-2.6.0-cdh5.14.0/ node02:$PWD
scp -r hadoop-2.6.0-cdh5.14.0/ node03:$PWD
1
2
3
  • 第六步: 配置hadoop的环境变量
    • 三台机器都要进行配置hadoop的环境变量
三台机器执行以下命令:

vim  /etc/profile

在文件中添加以下内容:
export HADOOP_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
export PATH=:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
1
2
3
4
5
6
7
  • 第七步: 让环境变量立即生效
三台都需要执行:
source /etc/profile
1
2
  • 第八步: 集群启动
要启动 Hadoop 集群,需要启动 HDFS 和 YARN 两个集群。 
注意:首次启动HDFS时,必须对其进行格式化操作。本质上是一些清理和准备工作,因为此时的 HDFS 在物理上还是不存在的

bin/hdfs namenode  -format或者bin/hadoop namenode –format

启动方式一: 单机节点依次启动

在主节点上使用以下命令启动 HDFS NameNode: 
	hadoop-daemon.sh start namenode 
在每个从节点上使用以下命令启动 HDFS DataNode: 
	hadoop-daemon.sh start datanode 
在主节点上使用以下命令启动 YARN ResourceManager: 
	yarn-daemon.sh  start resourcemanager 
在每个从节点上使用以下命令启动 YARN nodemanager: 
	yarn-daemon.sh start nodemanager 
	
以上脚本位于$HADOOP_PREFIX/sbin/目录下。如果想要停止某个节点上某个角色,只需要把命令中的start 改为stop 即可。

启动方式二: 脚本一键启动
	如果配置了 etc/hadoop/slaves 和 ssh 免密登录,则可以使用程序脚本启动所有Hadoop 两个集群的相关进程,在主节点所设定的机器上执行。
	
node01节点上执行以下命令:
第一台机器执行以下命令
cd /export/servers/hadoop-2.6.0-cdh5.14.0/
sbin/start-dfs.sh
sbin/start-yarn.sh
sbin/mr-jobhistory-daemon.sh start historyserver

停止集群: 一般没什么问题, 不要停止集群
sbin/stop-dfs.sh
sbin/stop-yarn.sh
sbin/mr-jobhistory-daemon.sh stop historyserver
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
  • 第九步: 浏览器查看启动页面
hdfs集群访问地址
	http://192.168.52.100:50070/dfshealth.html#tab-overview  
yarn集群访问地址
	http://192.168.52.100:8088/cluster
jobhistory访问地址:
	http://192.168.52.100:19888/jobhistory
1
2
3
4
5
6

# 9. hadoop集群初体验

# 9.1 HDFS 使用初体验

需求: 从Linux 本地上传一个文本文件到 hdfs 的/test/input 目录下

hadoop fs -mkdir -p /test/input 
hadoop fs -put /root/install.log  /test/input 
1
2

# 9.2 mapreduce程序初体验

在 Hadoop 安装包的

hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce 下有官方自带的mapreduce 程序。我们可以使用如下的命令进行运行测试。

示例程序jar:

hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar

计算圆周率:

hadoop jar  /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar  pi  2 5
1

​ 关于圆周率的估算,感兴趣的可以查询资料 Monte Carlo 方法来计算 Pi 值。

# 10. MapReduce的jobHistory介绍

​ 我们可以通过hadoop jar的命令来实现我们的程序jar包的运行,关于运行的日志,我们一般都需要通过启动一个服务来进行查看,就是我们的JobHistoryServer,我们可以启动一个进程,专门用于查看我们的任务提交的日志

    1. node01修改mapred-site.xml

node01服务器修改mapred-site.xml,添加以下配置(之前已经添加过这两个配置,不用添加了)

cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
vim mapred-site.xml

添加以下内容: 
	<!--MapReduce在执行过程中需要将日志发送到那个节点下-->
	<property>
		<name>mapreduce.jobhistory.address</name>
		<value>node01:10020</value>
	</property>
	<!-- 查看日志文件的ip和端口号  -->
	<property>
		<name>mapreduce.jobhistory.webapp.address</name>
		<value>node01:19888</value>
	</property>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    1. node01修改yarn-site.xml

node01服务器修改yarn-site.xml,添加以下配置(配置已经存在,不用修改了)

cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
vim yarn-site.xml

<!--开启日志的聚合功能; 必须为true, 否则jobHistory无法使用-->
<property>
	<name>yarn.log-aggregation-enable</name>
	<value>true</value>
</property>
<!-- 单位为秒  30天-->
<property>
	<name>yarn.log-aggregation.retain-seconds</name>
	<value>2592000</value>
</property>

<!--指定文件压缩类型用于压缩汇总日志-->
<property>
        <name>yarn.nodemanager.log-aggregation.compression-type</name>
        <value>gz</value>
</property>
<!-- nodemanager本地文件存储目录-->
<property>
        <name>yarn.nodemanager.local-dirs</name>
        <value>/export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/yarn/local</value>
</property>
<!-- resourceManager  保存最大的任务完成个数 -->
<property>
        <name>yarn.resourcemanager.max-completed-applications</name>
        <value>1000</value>
</property>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    1. 修改后的文件分发到其他机器上面去

将node01修改后的mapred-site.xml和yarn-site.xml分发到其他机器上面去node01执行以下命令(三台机器都配置过了,不用发送了)

cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
scp mapred-site.xml  yarn-site.xml node02:$PWD
scp mapred-site.xml  yarn-site.xml node03:$PWD
1
2
3
    1. 重启yarn集群以及jobHistoryServer服务进程

node01执行以下命令重启yarn集群(没有修改配置文件,就不用重启了)

重启yarn集群
cd /export/servers/hadoop-2.6.0-cdh5.14.0/
sbin/stop-yarn.sh
sbin/start-yarn.sh

重启jobhistoryserver

sbin/mr-jobhistory-daemon.sh start historyserver
1
2
3
4
5
6
7
8
    1. 页面访问jobhistoryserver

http://node01:19888/jobhistory

【更多关于日志收集的配置项详解】

yarn.log-aggregation-enable      true        执行结束后收集各个container本地的日志
yarn.log-aggregation.retain-seconds  2592000    收集的日志的保留时间,以秒为单位,到时后被删除,保留30天后删除
yarn.log.server.url   http://hostname:19888/jobhistory/logs   log server的地址
yarn.nodemanager.local-dirs   /hadoop/yarn/local  存放application执行本地文件的根目录,执行完毕后删除,按用户名存储
yarn.nodemanager.log-dirs  /hadoop/yarn/log 存放application本地执行日志的根目录,执行完毕后删除,按用户名存储
yarn.nodemanager.log.retain-second 604800  日志的保留时间,log aggregation没有enable时,有效
yarn.nodemanager.remote-app-log-dir  /app-logs  聚合日志后在hdfs的存放地址
yarn.nodemanager.remote-app-log-dir-suffix  logs   集合日志后的存放地址由 ${remote-app-log-dir}/${user}/{thisParam}构成
yarn.nodemanager.delete.debug-delay-sec 600  application执行结束后延迟10min删除本地文件及日志
1
2
3
4
5
6
7
8
9

# 11. HDFS的垃圾桶机制

​ 每一个文件系统都会有垃圾桶机制,便于我们将删除的数据回收到垃圾桶里面去,避免垃圾桶,避免我们某些误操作错误的删除一些重要文件,回收到垃圾桶里里面的资料数据,都可以进行恢复

# 11.1 垃圾桶机制配置的详解

​ 三台服务器修改core-site.xml添加以下这两个配置

<property>
     <name>fs.trash.interval</name>
     <value>10080</value>
     <description>检查点被删除后的分钟数。 如果为零,垃圾桶功能将被禁用。 
     该选项可以在服务器和客户端上配置。 如果垃圾箱被禁用服务器端,则检查客户端配置。 
     如果在服务器端启用垃圾箱,则会使用服务器上配置的值,并忽略客户端配置值。</description>
</property>
<property>
     <name>fs.trash.checkpoint.interval</name>
     <value>0</value>
     <description>垃圾检查点之间的分钟数。 应该小于或等于fs.trash.interval。 
     如果为零,则将该值设置为fs.trash.interval的值。 每次检查指针运行时,
     它都会从当前创建一个新的检查点,并删除比fs.trash.interval更早创建的检查点。</description>
</property>
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 11.2 垃圾桶机制验证

​ 如果启用垃圾箱配置,dfs命令删除的文件不会立即从HDFS中删除。相反,HDFS将其移动到垃圾目录(每个用户在/user/<username>/.Trash下都有自己的垃圾目录)。只要文件保留在垃圾箱中,文件可以快速恢复。

​ 最近删除的文件移动到当前的垃圾目录(/user/<username>/.Trash/Current),并且在一个可配置的时间间隔内,HDFS创建检查点(在/ user / <username> /.Trash / <date>下)查找当前垃圾目录中的文件,并在旧的检查点过期时删除它们。查看关于垃圾检查点的FS shell的删除命令。

​ 在垃圾桶里过期后,NameNode将从HDFS命名空间中删除该文件。删除文件会导致与文件关联的块被释放。请注意,用户删除文件的时间与HDFS中相应增加可用空间的时间之间可能存在明显的时间延迟。


​ 以下是一个将显示FS Shell如何从HDFS中删除文件的示例。我们在目录delete下创建了2个文件(test1&test2)

    1. 创建两个文件夹
[root@node01 bin]$ hdfs dfs  -mkdir -p delete/test1
[root@node01 bin]$ hdfs dfs  -mkdir -p delete/test2
[root@node01 bin]$ hdfs dfs  -ls delete
Found 2 items
drwxr-xr-x   - root supergroup          0 2018-03-03 13:45 delete/test1
drwxr-xr-x   - root supergroup          0 2018-03-03 13:45 delete/test2
1
2
3
4
5
6
    1. 删除其中的一个文件夹

我们将删除文件test1。下面的注释显示该文件已被移至垃圾箱目录

[root@node01 bin]$ hdfs dfs  -rm -r delete/test1
18/03/03 13:46:03 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 10 minutes, Emptier interval = 0 minutes.
18/03/03 13:46:03 INFO fs.TrashPolicyDefault: Moved: 'hdfs://localhost:9000/user/root/delete/test1' to trash at: hdfs://localhost:9000/user/root/.Trash/Current/user/root/delete/test1
Moved: 'hdfs://localhost:9000/user/root/delete/test1' to trash at: hdfs://localhost:9000/user/root/.Trash/Current
1
2
3
4
    1. 跳过垃圾桶选项 :慎用

现在我们将使用skipTrash选项删除文件,该选项不会将文件发送到垃圾箱。它将从HDFS中完全删除。

[root@node01 bin]$ hdfs dfs  -rm -r -skipTrash delete/test2
Deleted delete/test2
1
2

​ 我们现在可以看到垃圾目录仅包含文件test1。

[root@node01 bin]$ hdfs dfs  -ls .Trash/Current/user/root/delete/
Found 1 items
drwxr-xr-x   - root supergroup          0 2018-03-03 13:45 .Trash/Current/user/root/delete/test1
1
2
3

​ 所以文件test1进入垃圾箱,文件test2被永久删除。

    1. 恢复垃圾桶数据

执行以下命令,重新恢复垃圾桶数据

hdfs dfs -mv /user/root/.Trash/Current/user/root/delete/test1 /user/root/delete/ 
1
#Hadoop
上次更新: 2024/04/21, 09:42:22
大数据基本导论
HDFS详解

← 大数据基本导论 HDFS详解→

最近更新
01
微信支付功能的实现与流程
11-21
02
购物车与结算区域的深入优化与功能完善
11-21
03
购物车与结算区域的功能实现与优化
11-21
更多文章>
Theme by Vdoing | Copyright © 2023-2025 EmmmuaCode | 黔ICP备2022009864号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式