文章目录

  • 大数据hadoop发展简史及环境安装
    • 1.hadoop的介绍以及发展历史
    • 2.hadoop的历史版本介绍
    • 3.hadoop三大公司发型版本介绍
      • 3.1免费开源版本apache:
      • 3.2免费开源版本hortonWorks:
      • 3.3软件收费版本ClouderaManager:
    • 4.hadoop的架构模型(1.x,2.x的各种架构模型介绍)
      • 4.1 1.x的版本架构模型介绍
      • 4.2 2.x的版本架构模型介绍
        • 第一种:NameNode与ResourceManager单节点架构模型
        • 第二种:NameNode单节点与ResourceManager高可用架构模型
        • 第三种:NameNode高可用与ResourceManager单节点架构模型
        • 第四种:NameNode与ResourceManager高可用架构模型
    • 5.apache hadoop三种架构介绍(standAlone,伪分布,分布式环境介绍以及安装)
      • 5.1 StandAlone环境搭建
        • 第一步:下载apache hadoop并上传到服务器
        • 第二步:修改配置文件
          • (1)修改core-site.xml
          • (2)修改hdfs-site.xml
          • (3)修改hadoop-env.sh
          • (4.1)修改mapred-site.xml
          • (4.2)修改mapred-site.sh
          • (5)修改yarn-site.xml
          • (6)修改slaves
        • 第三步:启动集群
          • 要启动 Hadoop 集群,需要启动 HDFS 和 YARN 两个模块。
          • 准备启动
          • 三个端口查看界面
      • 5.2 伪分布式环境搭建(适用于学习测试开发集群模式)
        • (1)服务规划
        • (2)删除hadoopDatas然后重新创建文件夹
        • (3)重新创建文件夹
        • (4)修改slaves文件,然后将安装包发送到其他机器,重新启动集群即可
      • 5.3 分布式环境搭建(适用于工作当中正式环境搭建)
        • 集群运行服务规划
        • 第一步:安装包解压
        • 第二步:配置文件的修改
          • (在配置文件头部加上<?xml version="1.0" encoding="UTF-8"?>)
          • (1)修改core-site.xml
          • (2)修改hdfs-site.xml
          • (3)修改hadoop-env.sh
          • (4.1)修改mapred-site.xml
          • (4.2)修改mapred-site.sh
          • (5)修改yarn-site.xml
          • (6)修改slaves
        • 第三步:集群启动过程
          • 启动HDFS过程
          • 启动yarn过程
          • 查看hdfs状态
          • 查看resourceManager状态
          • node3启动jobHistory
          • yarn集群访问查看
          • 历史任务浏览界面
      • 6.CDH版本hadoop重新编译
        • 6.1为什么要编译hadoop
        • 6.2编译环境的准备
          • 6.2.1:准备linux环境
          • 6.2.2:虚拟机联网,关闭防火墙,关闭selinux
          • 6.2.3:安装jdk1.7
          • 6.2.4:安装maven
          • 6.2.5:安装findbugs
          • 6.2.6:在线安装一些依赖包
          • 6.2.7:安装protobuf
          • 6.2.8、安装snappy
          • 6.2.9:下载cdh源码准备编译
          • 6.2.10:常见编译错误
        • 7、CDH版本的zookeeper环境搭建(略)
        • 8.CDH 伪分布式环境搭建
          • 安装环境服务部署规划
          • 第一步:上传压缩包并解压
          • 第二步:查看hadoop支持的压缩方式以及本地库
          • 第三步:修改配置文件
            • (1)修改core-site.xml
            • (2)修改hdfs-site.xml
            • (3)修改hadoop-env.sh
            • (4.1)修改mapred-site.xml
            • (4.2)修改mapred-site.sh
            • (5)修改yarn-site.xml
            • (6)修改slaves
          • 第四步:创建文件存放目录
          • 第五步:安装包的分发
          • 第六步:配置hadoop的环境变量
          • 第七步:集群启动
          • 第八步:浏览器查看启动页面
        • 9.hadoop集群初体验
          • 9.1、HDFS 使用初体验
          • 9.2、mapreduce程序初体验
          • 9.3、HDFS入门介绍
          • 9.4、HDFS的特性
            • 9.4.1、 master/slave 架构
            • 9.4.2、 分块存储
            • 9.4.3、 名字空间(NameSpace)
            • 9.4.4、 Namenode 元数据管理
            • 9.4.5、Datanode 数据存储
            • 9.4.6、 副本机制
            • 9.4.7、 一次写入,多次读出
          • 9.5、hdfs的命令行使用
            • ls
            • lsr
            • mkdir
            • moveFromLocal
            • moveToLocal
            • mv
            • put
            • appendToFile
            • cat
            • cp
            • rm
            • rmr
            • chmod
            • chown
            • expunge
          • 9.6、hdfs的高级使用命令
            • 1、HDFS文件限额配置
            • 2、hdfs的安全模式
        • 10.hadoop的基准测试
          • 测试写入速度
          • 测试读取速度
          • 清除测试数据

大数据hadoop发展简史及环境安装

1.hadoop的介绍以及发展历史

1. Hadoop最早起源于Nutch。Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓
取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解
决数十亿网页的存储和索引问题。
2. 2003年、2004年谷歌发表的两篇论文为该问题提供了可行的解决方案。
——分布式文件系统(GFS),可用于处理海量网页的存储
——分布式计算框架MAPREDUCE,可用于处理海量网页的索引计算问题。
3. 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等
2.x版本系列:架构产生重大变化,引入了yarn平台等许多新特性

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

3.1免费开源版本apache:

http://hadoop.apache.org/
优点:拥有全世界的开源贡献者,代码更新迭代版本比较快,
缺点:版本的升级,版本的维护,版本的兼容性,版本的补丁都可能考虑不太周到,学习可以用,
实际生产工作环境尽量不要使用
apache所有软件的下载地址(包括各种历史版本):
http://archive.apache.org/dist/

3.2免费开源版本hortonWorks:

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

3.3软件收费版本ClouderaManager:

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

4.hadoop的架构模型(1.x,2.x的各种架构模型介绍)

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

文件系统核心模块:
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据
secondaryNameNode:主要能用于hadoop当中元数据信息的辅助管理
DataNode:集群当中的从节点,主要用于存储集群当中的各种数据
数据计算核心模块:
JobTracker:接收用户的计算请求任务,并分配任务给从节点
TaskTracker:负责执行主节点JobTracker分配的任务

4.2 2.x的版本架构模型介绍

第一种:NameNode与ResourceManager单节点架构模型

文件系统核心模块:
hdfs部分:典型的主从架构,没有主备的概念
NameNode:集群当中的主节点,主要用于管理集群当中的各种元数据
secondaryNameNode:主要能用于hadoop当中元数据信息的辅助管理
DataNode:集群当中的从节点,主要用于存储集群当中的各种数据
数据计算核心模块:
ResourceManager:yarn资源调度系统的主节点,接收用户的计算请求任务,并负责集群的资源分配
NodeManager:负责执行主节点APPmaster分配的任务

文件系统:存放的数据,都能够找得到
元数据:描述数据的数据(时间简史这本书 图书管理系统:输入时间简史 书本的分类 楼层 书架的编号 书架的哪一排,哪一格里面)
文件系统:分盘 文件夹 文件名称 创建时间,创建人,修改时间 文件大小,文件名称,文件路径,文件权限 这些信息,全部都是描述性的信息
全部称之为元数据信息:描述数据的数据,称之为元数据信息
mapReduce分布式文件计算系统:
jobTracker:主节点,接收用户请求,分配任务给taskTracker去执行
taskTracker:从节点,主要用于接收jobTracker分配的任务

第二种:NameNode单节点与ResourceManager高可用架构模型

文件系统核心模块:
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据
secondaryNameNode:主要能用于hadoop当中元数据信息的辅助管理
DataNode:集群当中的从节点,主要用于存储集群当中的各种数据
数据计算核心模块:
ResourceManager:接收用户的计算请求任务,并负责集群的资源分配,以及计算任务的划分,通过zookeeper实现ResourceManager的高可用
NodeManager:负责执行主节点ResourceManager分配的任务

第三种:NameNode高可用与ResourceManager单节点架构模型

文件系统核心模块:
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据,其中nameNode可以有两
个,形成高可用状态。
DataNode:集群当中的从节点,主要用于存储集群当中的各种数据
JournalNode:文件系统元数据信息管理,解决元数据共享问题,防止脑裂。
数据计算核心模块:
ResourceManager:接收用户的计算请求任务,并负责集群的资源分配,以及计算任务的划分
NodeManager:负责执行主节点ResourceManager分配的任务
zkfc:namenode守护进程,主要用于监听namenode什么时候死掉,死掉之后通知standby节点

第四种:NameNode与ResourceManager高可用架构模型

文件系统核心模块:
NameNode:集群当中的主节点,主要用于管理集群当中的各种数据,一般都是使用两个,实现
HA高可用
JournalNode:元数据信息管理进程,一般都是奇数个
DataNode:从节点,用于数据的存储
数据计算核心模块:
ResourceManager:Yarn平台的主节点,主要用于接收各种任务,通过两个,构建成高可用
NodeManager:Yarn平台的从节点,主要用于处理ResourceManager分配的任务

namenode与resourceManager的高可用
hadoop 2.0版本引入namenode高可用机制
resourcemanager 2.4.0版本引用高可用机制

5.apache hadoop三种架构介绍(standAlone,伪分布,分布式环境介绍以及安装)

5.1 StandAlone环境搭建

第一步:下载apache hadoop并上传到服务器

下载链接:
http://archive.apache.org/dist/hadoop/common/hadoop-2.7.5/hadoop-2.7.5.tar.gz
解压命令
cd /export/softwares
tar -zxvf hadoop-2.7.5.tar.gz -C ../servers/
hadoop的本地库:
/export/servers/hadoop-2.7.5/lib/native
本地库很重要里面集成了C程序,包括了一些压缩的支持
/export/servers/hadoop-2.7.5/bin/native 检测本地库支持哪些压缩方式默认的apache的版本的压缩方式 snappy不支持
snappy是一种压缩方式:google提供的一种压缩算法  谷歌出品,必属精品
如果压缩的太厉害了,解压的时候CPU消耗会比较大
/export/servers/hadoop-2.7.5/bin/hadoop checknative

第二步:修改配置文件

(1)修改core-site.xml

core-site.xml核心配置文件,主要定义了我们集群是分布式,还是本机运行

第一台机器执行以下命令
cd  /export/servers/hadoop-2.7.5/etc/hadoop
vim  core-site.xml
<configuration><property><name>fs.defaultFS</name><!-- hdfs:// 表示我们使用分布式的文件系统的实现--><value>hdfs://192.168.91.110:8020</value></property><property><name>hadoop.tmp.dir</name><value>/export/servers/hadoop-2.7.5/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>
(2)修改hdfs-site.xml

hdfs-site.xml: 分布式文件系统的核心配置 决定了我们数据存放在哪个路径,数据的副本,数据的block块大小等等

df -lh 查看磁盘信息与挂载信息
第一台机器执行以下命令
cd  /export/servers/hadoop-2.7.5/etc/hadoop
vim hdfs-site.xml
<configuration><!-- NameNode存储元数据信息的路径,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用,进行分割   --> <!--   集群动态上下线 <property><name>dfs.hosts</name><value>/export/servers/hadoop-2.7.4/etc/hadoop/accept_host</value></property><property><name>dfs.hosts.exclude</name><value>/export/servers/hadoop-2.7.4/etc/hadoop/deny_host</value></property>--><!-- 定义了我们secondaryNamenode的通信地址,辅助namenode管理元数据信息--><property><name>dfs.namenode.secondary.http-address</name><value>node1:50090</value></property><!-- 50070这个端口定义了我们通过浏览器来访问我们的hdfs的端口--><property><name>dfs.namenode.http-address</name><value>node1:50070</value></property><!-- 定义了我们元数据fsimage的存储路径,fsimage就是我们的元数据信息,写法是file:///。但是要先明确放哪个磁盘可以使用df -lh查看--><property><name>dfs.namenode.name.dir</name><value>file:///export/servers/hadoop-2.7.5/hadoopDatas/namenodeDatas,file:///export/servers/hadoop-2.7.5/hadoopDatas/namenodeDatas2</value></property><!--  定义dataNode数据存储的节点位置,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用,进行分割  --><property><name>dfs.datanode.data.dir</name><value>file:///export/servers/hadoop-2.7.5/hadoopDatas/datanodeDatas,file:///export/servers/hadoop-2.7.5/hadoopDatas/datanodeDatas2</value></property><!-- edits文件的存放位置 一部分元数据信息--><property><name>dfs.namenode.edits.dir</name><value>file:///export/servers/hadoop-2.7.5/hadoopDatas/nn/edits</value></property><!-- 元数据保存点存放的位置--><property><name>dfs.namenode.checkpoint.dir</name><value>file:///export/servers/hadoop-2.7.5/hadoopDatas/snn/name</value></property><!-- edits元数据存放的位置--><property><name>dfs.namenode.checkpoint.edits.dir</name><value>file:///export/servers/hadoop-2.7.5/hadoopDatas/dfs/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>
(3)修改hadoop-env.sh

hadoop-env.sh 配置我们jdk的home路径

第一台机器执行以下命令
cd  /export/servers/hadoop-2.7.5/etc/hadoop
vim  hadoop-env.sh
export JAVA_HOME=/home/scy/softwares/jdk1.8.0_141
(4.1)修改mapred-site.xml

mapred-site.xml 定义了我们关于mapreduce运行的一些参数

第一台机器执行以下命令
cd  /export/servers/hadoop-2.7.5/etc/hadoop
vim  mapred-site.xml
<configuration><!-- 指定mapreduce运行的框架是yarn --><property><name>mapreduce.framework.name</name><value>yarn</value></property><!-- mapreduce的小任务模式开启 --><property><name>mapreduce.job.ubertask.enable</name><value>true</value></property><!-- 定义了我们jobhistory通信地址,jobhistory是我们查看历史完成任务信息地址 --><property><name>mapreduce.jobhistory.address</name><value>node1:10020</value></property><!-- web界面查看jobhistory的地址  --><property><name>mapreduce.jobhistory.webapp.address</name><value>node1:19888</value></property>
</configuration>
(4.2)修改mapred-site.sh
export JAVA_HOME=/home/scy/softwares/jdk1.8.0_141
(5)修改yarn-site.xml

定义我们的yarn集群

第一台机器执行以下命令
cd  /export/servers/hadoop-2.7.5/etc/hadoop
vim  yarn-site.xml
<configuration><!-- 定义我们resourceManager所在机器 --><property><name>yarn.resourcemanager.hostname</name><value>node1</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!-- 开启日志的聚集功能,可以让我们在19888 jobhistory界面上查看我们运行的日志 --><property><name>yarn.log-aggregation-enable</name><value>true</value></property><property><name>yarn.log-aggregation.retain-seconds</name><value>604800</value></property>
</configuration>
(6)修改slaves

定义了我们的从节点是哪些机器 datanode nodemanager运行在哪些机器上

第一台机器执行以下命令
cd  /export/servers/hadoop-2.7.5/etc/hadoop
vim   slaves
node1

第三步:启动集群

要启动 Hadoop 集群,需要启动 HDFS 和 YARN 两个模块。
注意: 首次启动 HDFS 时,必须对其进行格式化操作。 本质上是一些清理和
准备工作,因为此时的 HDFS 在物理上还是不存在的。
hdfs namenode -format 或者 hadoop namenode –format
启动命令:
创建数据存放文件夹
第一台机器执行以下命令
cd  /export/servers/hadoop-2.7.5
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/tempDatas
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/namenodeDatas
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/namenodeDatas2
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/datanodeDatas
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/datanodeDatas2
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/nn/edits
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/snn/name
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/dfs/snn/edits
准备启动

第一台机器执行以下命令

cd  /export/servers/hadoop-2.7.5/
bin/hdfs namenode -format
sbin/start-dfs.sh
sbin/start-yarn.sh
sbin/mr-jobhistory-daemon.sh start historyserver
节点起不来查看日志:/export/servers/hadoop-2.7.5/logs/
三个端口查看界面
http://node01:50070/explorer.html#/  查看hdfs
http://node01:8088/cluster   查看yarn集群
http://node01:19888/jobhistory  查看历史完成的任务

5.2 伪分布式环境搭建(适用于学习测试开发集群模式)

(1)服务规划

停止单节点集群,删除/export/servers/hadoop-2.7.5/hadoopDatas文件夹,
然后重新创建文件夹。
第一台机器执行以下命令
cd /export/servers/hadoop-2.7.5
sbin/stop-dfs.sh
sbin/stop-yarn.sh
sbin/mr-jobhistory-daemon.sh stop historyserver

(2)删除hadoopDatas然后重新创建文件夹

rm  -rf  /export/servers/hadoop-2.7.5/hadoopDatas

(3)重新创建文件夹

因为已经启动的standalone模式会与伪分布式模式文件发生冲突

mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/tempDatas
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/namenodeDatas
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/namenodeDatas2
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/datanodeDatas
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/datanodeDatas2
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/nn/edits
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/snn/name
mkdir -p /export/servers/hadoop-2.7.5/hadoopDatas/dfs/snn/edits

(4)修改slaves文件,然后将安装包发送到其他机器,重新启动集群即可

第一台机器执行以下命令
cd  /export/servers/hadoop-2.7.5/etc/hadoop
vim slaves
node01
node02
node03安装包的分发
第一台机器执行以下命令
cd  /export/servers/
scp -r hadoop-2.7.5 node02:$PWD
scp -r hadoop-2.7.5 node03:$PWD启动集群
第一台机器执行以下命令
cd  /export/servers/hadoop-2.7.5
bin/hdfs namenode -format
sbin/start-dfs.sh
sbin/start-yarn.sh
sbin/mr-jobhistory-daemon.sh start historyserver脚本挨个启动进程命令:
我们也可以使用命令每个服务挨个启动
node1服务器上面的服务,挨个启动
namnoede:sbin/hadoop-daemon.sh start namenode
datanode:sbin/hadoop-daemon.sh start datanode
seconarynamenode:sbin/hadoop-daemon.sh start secondarynamenoderesourceManager:sbin/yarn-daemon.sh start resourcemanager
nodeManager:   sbin/yarn-daemon.sh start nodemanagernode2/3 datanode:sbin/hadoop-daemon.sh start datanodenodeManager:   sbin/yarn-daemon.sh start nodemanager

5.3 分布式环境搭建(适用于工作当中正式环境搭建)

使用完全分布式,实现namenode高可用,ResourceManager的高可用

集群运行服务规划

hdfs模块:
journalNode:在两个namenode之间同步元数据信息
zkfc:zkFailoverController  守护进程,监看我们namenode运行的健康信息的报告CDH官网:
https://www.cloudera.com/
http://archive.cloudera.com/cdh5/cdh/5/  所有关于CHD软件的安装包的网址

第一步:安装包解压

停止之前的hadoop集群的所有服务,并删除所有机器的hadoop安装包,然后重新解压hadoop压缩包
解压压缩包
第一台机器执行以下命令进行解压
cd /export/softwares
tar -zxvf hadoop-2.7.5.tar.gz -C ../servers/

第二步:配置文件的修改

(在配置文件头部加上<?xml version="1.0" encoding="UTF-8"?>)
(1)修改core-site.xml
<configuration>
<!-- 指定NameNode的HA高可用的zk地址  --><property><name>ha.zookeeper.quorum</name><value>node1:2181,node2:2181,node3:2181</value></property><!-- 指定HDFS访问的域名地址hdfs://node1:8020 单个namenode可以这样hdfs://ns 给我们的集群起了一个逻辑名称 logic name这个逻辑名称下面,挂载了两个namenode,一个active,一个standby--><property><name>fs.defaultFS</name><value>hdfs://ns</value></property><!-- 临时文件存储目录  --><property><name>hadoop.tmp.dir</name><value>/export/servers/hadoop-2.7.5/data/tmp</value></property><!-- 开启hdfs垃圾箱机制,指定垃圾箱中的文件七天之后就彻底删掉单位为分钟--><property><name>fs.trash.interval</name><value>10080</value></property>
</configuration>
(2)修改hdfs-site.xml
<configuration>
<!--  指定命名空间  --><property><name>dfs.nameservices</name><value>ns</value></property>
<!--  指定该命名空间下的两个机器作为我们的NameNode  --><property><name>dfs.ha.namenodes.ns</name><value>nn1,nn2</value></property><!-- 配置第一台服务器的namenode通信地址  --><property><name>dfs.namenode.rpc-address.ns.nn1</name><value>node1:8020</value></property><!--  配置第二台服务器的namenode通信地址  --><property><name>dfs.namenode.rpc-address.ns.nn2</name><value>node2:8020</value></property><!-- 所有从节点之间相互通信端口地址 --><property><name>dfs.namenode.servicerpc-address.ns.nn1</name><value>node1:8022</value></property><!-- 所有从节点之间相互通信端口地址 --><property><name>dfs.namenode.servicerpc-address.ns.nn2</name><value>node2:8022</value></property><!-- 第一台服务器namenode的web访问地址  --><property><name>dfs.namenode.http-address.ns.nn1</name><value>node1:50070</value></property><!-- 第二台服务器namenode的web访问地址  --><property><name>dfs.namenode.http-address.ns.nn2</name><value>node2:50070</value></property><!-- journalNode的访问地址,注意这个地址一定要配置 --><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://node1:8485;node2:8485;node3:8485/ns1</value></property><!--  指定故障自动恢复使用的哪个java类 --><property><name>dfs.client.failover.proxy.provider.ns</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><!-- 故障转移使用的哪种通信机制 --><property><name>dfs.ha.fencing.methods</name><value>sshfence</value></property><!-- 指定通信使用的公钥(普通用户则需要更改私钥的位置)  --><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/root/.ssh/id_rsa</value></property><!-- journalNode数据存放地址  --><property><name>dfs.journalnode.edits.dir</name><value>/export/servers/hadoop-2.7.5/data/dfs/jn</value></property><!-- 启用自动故障恢复功能 --><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property><!-- namenode产生的元数据存放位置 --><property><name>dfs.namenode.name.dir</name><value>file:///export/servers/hadoop-2.7.5/data/dfs/nn/name</value></property><!-- edits产生的文件存放路径 --><property><name>dfs.namenode.edits.dir</name><value>file:///export/servers/hadoop-2.7.5/data/dfs/nn/edits</value></property><!-- dataNode文件存放路径 --><property><name>dfs.datanode.data.dir</name><value>file:///export/servers/hadoop-2.7.5/data/dfs/dn</value></property><!-- 关闭hdfs的文件权限 --><property><name>dfs.permissions</name><value>false</value></property><!-- 指定block文件块的大小 --><property><name>dfs.blocksize</name><value>134217728</value></property>
</configuration>
(3)修改hadoop-env.sh
export JAVA_HOME=/home/scy/softwares/jdk1.8.0_141
(4.1)修改mapred-site.xml
<configuration>
<!--指定运行mapreduce的环境是yarn -->
<property><name>mapreduce.framework.name</name><value>yarn</value>
</property>
<!-- MapReduce JobHistory Server IPC host:port -->
<property><name>mapreduce.jobhistory.address</name><value>node03:10020</value>
</property>
<!-- MapReduce JobHistory Server Web UI host:port -->
<property><name>mapreduce.jobhistory.webapp.address</name><value>node03:19888</value>
</property>
<!-- The directory where MapReduce stores control files.默认 ${hadoop.tmp.dir}/mapred/system -->
<property><name>mapreduce.jobtracker.system.dir</name><value>/export/servers/hadoop-2.7.5/data/system/jobtracker</value>
</property>
<!-- The amount of memory to request from the scheduler for each map task. 默认 1024-->
<property><name>mapreduce.map.memory.mb</name><value>1024</value>
</property>
<!-- <property><name>mapreduce.map.java.opts</name><value>-Xmx1024m</value></property> -->
<!-- The amount of memory to request from the scheduler for each reduce task. 默认 1024-->
<property><name>mapreduce.reduce.memory.mb</name><value>1024</value>
</property>
<!-- <property><name>mapreduce.reduce.java.opts</name><value>-Xmx2048m</value></property> -->
<!-- 用于存储文件的缓存内存的总数量,以兆字节为单位。默认情况下,分配给每个合并流1MB,给个合并流应该寻求最小化。默认值100-->
<property><name>mapreduce.task.io.sort.mb</name><value>100</value>
</property><!-- <property><name>mapreduce.jobtracker.handler.count</name><value>25</value></property>-->
<!-- 整理文件时用于合并的流的数量。这决定了打开的文件句柄的数量。默认值10-->
<property><name>mapreduce.task.io.sort.factor</name><value>10</value>
</property>
<!-- 默认的并行传输量由reduce在copy(shuffle)阶段。默认值5-->
<property><name>mapreduce.reduce.shuffle.parallelcopies</name><value>25</value>
</property>
<property><name>yarn.app.mapreduce.am.command-opts</name><value>-Xmx1024m</value>
</property>
<!-- MR AppMaster所需的内存总量。默认值1536-->
<property><name>yarn.app.mapreduce.am.resource.mb</name><value>1536</value>
</property>
<!-- MapReduce存储中间数据文件的本地目录。目录不存在则被忽略。默认值${hadoop.tmp.dir}/mapred/local-->
<property><name>mapreduce.cluster.local.dir</name><value>/export/servers/hadoop-2.7.5/data/system/local</value>
</property>
</configuration>
(4.2)修改mapred-site.sh
export JAVA_HOME=/home/scy/softwares/jdk1.8.0_141
(5)修改yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- 是否启用日志聚合.应用程序完成后,日志汇总收集每个容器的日志,这些日志移动到文件系统,例如HDFS. -->
<!-- 用户可以通过配置"yarn.nodemanager.remote-app-log-dir"、"yarn.nodemanager.remote-app-log-dir-suffix"来确定日志移动到的位置 -->
<!-- 用户可以通过应用程序时间服务器访问日志 --><!-- 启用日志聚合功能,应用程序完成后,收集各个节点的日志到一起便于查看 --><property><name>yarn.log-aggregation-enable</name><value>true</value></property><!--开启resource manager HA,默认为false-->
<property><name>yarn.resourcemanager.ha.enabled</name><value>true</value>
</property>
<!-- 集群的Id,使用该值确保RM不会做为其它集群的active -->
<property><name>yarn.resourcemanager.cluster-id</name><value>mycluster</value>
</property>
<!--配置resource manager  命名-->
<property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value>
</property>
<!-- 配置第一台机器的resourceManager -->
<property><name>yarn.resourcemanager.hostname.rm1</name><value>node3</value>
</property>
<!-- 配置第二台机器的resourceManager -->
<property><name>yarn.resourcemanager.hostname.rm2</name><value>node2</value>
</property><!-- 配置第一台机器的resourceManager通信地址 -->
<property><name>yarn.resourcemanager.address.rm1</name><value>node3:8032</value>
</property>
<!-- 配置第一台机器的resourceManager任务调度通信地址 -->
<property><name>yarn.resourcemanager.scheduler.address.rm1</name><value>node3:8030</value>
</property>
<!-- 配置第一台机器的resourceManager资源定位追踪通信地址 -->
<property><name>yarn.resourcemanager.resource-tracker.address.rm1</name><value>node3:8031</value>
</property>
<!-- 配置第一台机器的resourceManager管理地址 -->
<property><name>yarn.resourcemanager.admin.address.rm1</name><value>node3:8033</value>
</property>
<!-- 配置第一台机器的resourceManager web界面查看地址 -->
<property><name>yarn.resourcemanager.webapp.address.rm1</name><value>node3:8088</value>
</property><!-- 配置第二台机器的resourceManager通信地址 -->
<property><name>yarn.resourcemanager.address.rm2</name><value>node2:8032</value>
</property>
<!-- 配置第二台机器的resourceManager任务调度通信地址 -->
<property><name>yarn.resourcemanager.scheduler.address.rm2</name><value>node2:8030</value>
</property>
<!-- 配置第二台机器的resourceManager资源定位追踪通信地址 -->
<property><name>yarn.resourcemanager.resource-tracker.address.rm2</name><value>node2:8031</value>
</property>
<!-- 配置第二台机器的resourceManager管理地址 -->
<property><name>yarn.resourcemanager.admin.address.rm2</name><value>node2:8033</value>
</property>
<!-- 配置第二台机器的resourceManager web界面查看地址 -->
<property><name>yarn.resourcemanager.webapp.address.rm2</name><value>node2:8088</value>
</property>
<!--开启resourcemanager自动恢复功能-->
<property><name>yarn.resourcemanager.recovery.enabled</name><value>true</value>
</property>
<!--在node1上配置rm1,在node2上配置rm2,注意:一般都喜欢把配置好的文件远程复制到其它机器上,但这个在YARN的另一个机器上一定要修改,其他机器上不配置此项--><property>       <name>yarn.resourcemanager.ha.id</name><value>rm1</value><description>If we want to launch more than one RM in single node, we need this configuration</description></property><!--用于持久存储的类。尝试开启-->
<property><name>yarn.resourcemanager.store.class</name><value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property><name>yarn.resourcemanager.zk-address</name><value>node2:2181,node3:2181,node1:2181</value><description>For multiple zk services, separate them with comma</description>
</property>
<!--开启resourcemanager故障自动切换,指定机器-->
<property><name>yarn.resourcemanager.ha.automatic-failover.enabled</name><value>true</value><description>Enable automatic failover; By default, it is enabled only when HA is enabled.</description>
</property>
<property><name>yarn.client.failover-proxy-provider</name><value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value>
</property>
<!-- 允许分配给一个任务最大的CPU核数,默认是8 -->
<property><name>yarn.nodemanager.resource.cpu-vcores</name><value>4</value>
</property>
<!-- 每个节点可用内存,单位MB -->
<property><name>yarn.nodemanager.resource.memory-mb</name><value>512</value>
</property>
<!-- 单个任务可申请最少内存,默认1024MB -->
<property><name>yarn.scheduler.minimum-allocation-mb</name><value>512</value>
</property>
<!-- 单个任务可申请最大内存,默认8192MB -->
<property><name>yarn.scheduler.maximum-allocation-mb</name><value>512</value>
</property>
<!--多长时间聚合删除一次日志 此处-->
<property><name>yarn.log-aggregation.retain-seconds</name><value>2592000</value><!--30 day-->
</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.7.5/yarn/local</value>
</property>
<!-- resourceManager  保存最大的任务完成个数 -->
<property><name>yarn.resourcemanager.max-completed-applications</name><value>1000</value>
</property>
<!-- 逗号隔开的服务列表,列表名称应该只包含a-zA-Z0-9_,不能以数字开始-->
<property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value>
</property><!--rm失联后重新链接的时间-->
<property><name>yarn.resourcemanager.connect.retry-interval.ms</name><value>2000</value>
</property>
</configuration>
(6)修改slaves
node1
node2
node3

第三步:集群启动过程

第一台机器执行以下命令:
cd /export/servers
scp -r hadoop-2.7.5/ node2:$PWD
scp -r hadoop-2.7.5/ node3:$PWD
三台机器上共同创建目录
三台机器执行以下命令
mkdir -p /export/servers/hadoop-2.7.5/data/dfs/nn/name
mkdir -p /export/servers/hadoop-2.7.5/data/dfs/nn/edits
mkdir -p /export/servers/hadoop-2.7.5/data/tmp
mkdir -p /export/servers/hadoop-2.7.5/data/dfs/jn
mkdir -p /export/servers/hadoop-2.7.5/data/dfs/dn更改node2的rm2
第二台机器执行以下命令
cd /export/servers/hadoop-2.7.5/etc/hadoop
vim  yarn-site.xml
<!--在node3上配置rm1,在node2上配置rm2,注意:一般都喜欢把配置好的文件远程复制到其它机器上,
但这个在YARN的另一个机器上一定要修改,其他机器上不配置此项
注意我们现在有两个resourceManager  第三台是rm1   第二台是rm2
这个配置一定要记得去node02上面改好
--><property>       <name>yarn.resourcemanager.ha.id</name><value>rm2</value><description>If we want to launch more than one RM in single node, we need this configuration</description></property>
启动HDFS过程
node01机器执行以下命令
cd   /export/servers/hadoop-2.7.5
格式化zk
bin/hdfs zkfc -formatZK
sbin/hadoop-daemons.sh start journalnode
格式化namenode上面所有的数据
bin/hdfs namenode -format
初始化我们元数据信息
bin/hdfs namenode -initializeSharedEdits -force
sbin/start-dfs.shnode02上面执行
cd   /export/servers/hadoop-2.7.5
同步元数据信息,并且设置namenode为standBy状态
bin/hdfs namenode -bootstrapStandby
sbin/hadoop-daemon.sh start namenode
启动yarn过程
node03上面执行(node2与node3需要完成免密互通)
cd   /export/servers/hadoop-2.7.5
sbin/start-yarn.sh
node02上执行
cd   /export/servers/hadoop-2.7.5
sbin/start-yarn.sh
查看hdfs状态
node1机器查看hdfs状态
http://192.168.91.110:50070/dfshealth.html#tab-overview
node2机器查看hdfs状态
http://192.168.91.120:50070/dfshealth.html#tab-overview
查看resourceManager状态
node3上面执行
cd   /export/servers/hadoop-2.7.5
bin/yarn rmadmin -getServiceState rm1
node2上面执行
cd   /export/servers/hadoop-2.7.5
bin/yarn rmadmin -getServiceState rm2
node3启动jobHistory
node3机器执行以下命令启动jobHistory
cd /export/servers/hadoop-2.7.5
sbin/mr-jobhistory-daemon.sh start historyserver
yarn集群访问查看
http://node3:8088/cluster
历史任务浏览界面
页面访问:
http://node2:19888/jobhistory

6.CDH版本hadoop重新编译

6.1为什么要编译hadoop

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

6.2编译环境的准备

6.2.1:准备linux环境
准备一台linux环境,内存4G或以上,硬盘40G或以上,我这里使用的是Centos6.9
64位的操作系统(注意:一定要使用64位的操作系统)
6.2.2:虚拟机联网,关闭防火墙,关闭selinux
关闭防火墙命令:
service  iptables   stop
chkconfig   iptables  off
关闭selinux
vim /etc/selinux/config
6.2.3:安装jdk1.7
注意:亲测证明hadoop-2.6.0-cdh5.14.0 这个版本的编译,只能使用jdk1.7,如果使用jdk1.8那么就会报错
查看centos6.9自带的openjdk
rpm -qa | grep java
将所有这些openjdk全部卸载掉
rpm -e java-1.6.0-openjdk-1.6.0.41-1.13.13.1.el6_8.x86_64 tzdata-java-2016j-1.el6.noarch java-1.7.0-openjdk-1.7.0.131-2.6.9.0.el6_8.x86_64
注意:这里一定不要使用jdk1.8,亲测jdk1.8会出现错误将我们jdk的安装包上传到/export/softwares(我这里使用的是jdk1.7.0_71这个版本)
解压我们的jdk压缩包
统一两个路径
mkdir -p /export/servers
mkdir -p /export/softwares
cd /export/softwares
tar -zxvf jdk-7u71-linux-x64.tar.gz -C ../servers/配置环境变量
vim /etc/profile
export JAVA_HOME=/export/servers/jdk1.7.0_71
export PATH=:$JAVA_HOME/bin:$PATH
让修改立即生效
source /etc/profile
6.2.4:安装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/配置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
让修改立即生效
source /etc/profile
解压maven的仓库,我已经下载好了的一份仓库,用来编译hadoop会比较快
tar -zxvf mvnrepository.tar.gz -C /export/servers/修改maven的配置文件
cd  /export/servers/apache-maven-3.0.5/conf
vim settings.xml
指定我们本地仓库存放的路径

添加一个我们阿里云的镜像地址,会让我们下载jar包更快
<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>
</mirror>
6.2.5:安装findbugs

下载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解压findbugs
tar -zxvf findbugs-1.3.9.tar.gz -C ../servers/配置findbugs的环境变量
vim /etc/profile
export JAVA_HOME=/export/servers/jdk1.7.0_75
export PATH=:$JAVA_HOME/bin:$PATHexport MAVEN_HOME=/export/servers/apache-maven-3.0.5
export PATH=:$MAVEN_HOME/bin:$PATHexport FINDBUGS_HOME=/export/servers/findbugs-1.3.9
export PATH=:$FINDBUGS_HOME/bin:$PATH
让修改立即生效
source  /etc/profile
6.2.6:在线安装一些依赖包
yum install autoconf automake libtool cmake
yum install ncurses-devel
yum install openssl-devel
yum install lzo-devel zlib-devel gcc gcc-c++bzip2压缩需要的依赖包
yum install -y  bzip2-devel
6.2.7:安装protobuf
protobuf下载百度网盘地址
https://pan.baidu.com/s/1pJlZubT
下载之后上传到  /export/softwares
解压protobuf并进行编译
cd  /export/softwares
tar -zxvf protobuf-2.5.0.tar.gz -C ../servers/
cd   /export/servers/protobuf-2.5.0
./configure
make && make install
6.2.8、安装snappy
snappy下载地址:
http://code.google.com/p/snappy/
cd /export/softwares/
tar -zxf snappy-1.1.1.tar.gz  -C ../servers/
cd ../servers/snappy-1.1.1/
./configure
make && make install
6.2.9:下载cdh源码准备编译
源码下载地址为:
http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.14.0-src.tar.gz
下载源码进行编译
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
编译不支持snappy压缩:
mvn package -Pdist,native -DskipTests –Dtar   编译支持snappy压缩:
mvn package -DskipTests -Pdist,native -Dtar -Drequire.snappy -e -X
编译完成之后我们需要的压缩包就在下面这个路径里面

6.2.10:常见编译错误
如果编译时候出现这个错误:
An Ant BuildException has occured: exec returned: 2这是因为tomcat的压缩包没有下载完成,需要自己下载一个对应版本的apache-tomcat-6.0.53.tar.gz的压缩包放到指定路径下面去即可
这两个路径下面需要放上这个tomcat的 压缩包
/export/servers/hadoop-2.6.0-cdh5.14.0/hadoop-hdfs-project/hadoop-hdfs-httpfs/downloads
/export/servers/hadoop-2.6.0-cdh5.14.0/hadoop-common-project/hadoop-kms/downloads

7、CDH版本的zookeeper环境搭建(略)

8.CDH 伪分布式环境搭建

安装环境服务部署规划

第一步:上传压缩包并解压
将我们重新编译之后支持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/
第二步:查看hadoop支持的压缩方式以及本地库
第一台机器执行以下命令
cd /export/servers/hadoop-2.6.0-cdh5.14.0
bin/hadoop checknative
wget http://mirror.centos.org/centos/6/os/x86_64/Packages/snappy-1.1.0-1.el6.x86_64.rpm
rpm -ivh snappy-1.1.0-1.el6.x86_64.rpm

如果出现openssl为false,那么所有机器在线安装openssl即可,执行以下命令,虚拟机联网之后就可以在线进行安装了
yum -y install openssl-devel
第三步:修改配置文件
(1)修改core-site.xml

core-site.xml核心配置文件,主要定义了我们集群是分布式,还是本机运行

第一台机器执行以下命令
cd  /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
vim  core-site.xml
<configuration><property><name>fs.defaultFS</name><!-- hdfs:// 表示我们使用分布式的文件系统的实现--><value>hdfs://node1: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>
(2)修改hdfs-site.xml

hdfs-site.xml: 分布式文件系统的核心配置 决定了我们数据存放在哪个路径,数据的副本,数据的block块大小等等

df -lh 查看磁盘信息与挂载信息
第一台机器执行以下命令
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>--><!-- 定义了我们secondaryNamenode的通信地址,辅助namenode管理元数据信息--><property><name>dfs.namenode.secondary.http-address</name><value>node1:50090</value></property><!-- 50070这个端口定义了我们通过浏览器来访问我们的hdfs的端口--><property><name>dfs.namenode.http-address</name><value>node1:50070</value></property><!-- 定义了我们元数据fsimage的存储路径,fsimage就是我们的元数据信息,写法是file:///。但是要先明确放哪个磁盘可以使用df -lh查看--><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/nn/edits</value></property><!-- 元数据保存点存放的位置--><property><name>dfs.namenode.checkpoint.dir</name><value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/snn/name</value></property><!-- edits元数据存放的位置--><property><name>dfs.namenode.checkpoint.edits.dir</name><value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/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>
(3)修改hadoop-env.sh

hadoop-env.sh 配置我们jdk的home路径

第一台机器执行以下命令
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
(4.1)修改mapred-site.xml

mapred-site.xml 定义了我们关于mapreduce运行的一些参数

第一台机器执行以下命令
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><!-- mapreduce的小任务模式开启 --><property><name>mapreduce.job.ubertask.enable</name><value>true</value></property><!-- 定义了我们jobhistory通信地址,jobhistory是我们查看历史完成任务信息地址 --><property><name>mapreduce.jobhistory.address</name><value>node1:10020</value></property><!-- web界面查看jobhistory的地址  --><property><name>mapreduce.jobhistory.webapp.address</name><value>node1:19888</value></property>
</configuration>
(4.2)修改mapred-site.sh
export JAVA_HOME=/export/servers/jdk1.8.0_141
(5)修改yarn-site.xml

定义我们的yarn集群

第一台机器执行以下命令
cd  /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
vim  yarn-site.xml
<configuration><!-- 定义我们resourceManager所在机器 --><property><name>yarn.resourcemanager.hostname</name><value>node1</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!-- 开启日志的聚集功能,可以让我们在19888 jobhistory界面上查看我们运行的日志 --><property><name>yarn.log-aggregation-enable</name><value>true</value></property><property><name>yarn.log-aggregation.retain-seconds</name><value>604800</value></property>
</configuration>
(6)修改slaves

定义了我们的从节点是哪些机器 datanode nodemanager运行在哪些机器上

第一台机器执行以下命令
cd  /export/servers/hadoop-2.7.5/etc/hadoop
vim   slaves
node1
node2
node3
第四步:创建文件存放目录
node1创建以下目录
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/nn/edits
mkdir -p /export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/snn/name
mkdir -p /export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/snn/edits
第五步:安装包的分发
第一台机器执行以下命令
cd /export/servers/
scp -r hadoop-2.6.0-cdh5.14.0/ node2:$PWD
scp -r hadoop-2.6.0-cdh5.14.0/ node3:$PWD
第六步:配置hadoop的环境变量
三台机器都要进行配置hadoop的环境变量
三台机器执行以下命令
vi  /etc/profile
export HADOOP_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
配置完成之后生效
source /etc/profile
第七步:集群启动
要启动 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 两个集群的相关进程,在主节点所设定的机器上执行。
启动集群
node1节点上执行以下命令
第一台机器执行以下命令
cd /export/servers/hadoop-2.6.0-cdh5.14.0/
start-dfs.sh
start-yarn.sh
sbin/mr-jobhistory-daemon.sh start historyserver停止集群:没事儿不要去停止集群
sbin/stop-dfs.sh
sbin/stop-yarn.sh
sbin/mr-jobhistory-daemon.sh start historyserver
第八步:浏览器查看启动页面
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

9.hadoop集群初体验

9.1、HDFS 使用初体验
从Linux 本地上传一个文本文件到 hdfs 的/test/input 目录下
hadoop fs -mkdir -p /test/input (1.x版本命令)
hdfs dfs -mkdir -p /test/input (2.x版本命令)
hadoop fs -put /root/install.log  /test/input (1.x版本命令)
hdfs dfs -put /root/install.log  /test/input (2.x版本命令)
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
关于圆周率的估算,感兴趣的可以查询资料 Monte Carlo 方法来计算 Pi 值。
9.3、HDFS入门介绍
HDFS 介绍
HDFS 是 Hadoop Distribute File System 的简称,意为:Hadoop 分布式文件系统。
是 Hadoop 核心组件之一,作为最底层的分布式存储服务而存在。
分布式文件系统解决的问题就是大数据存储。它们是横跨在多台计算机上的存储系统。
分布式文件系统在大数据时代有着广泛的应用前景,它们为存储和处理超大规模数据提供所需的扩展能力。

9.4、HDFS的特性
首先,它是一个文件系统,用于存储文件,通过统一的命名空间目录树来定位文件;
其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
9.4.1、 master/slave 架构
HDFS 采用 master/slave 架构。一般一个 HDFS 集群是有一个 Namenode 和一定数目的Datanode 组成。
Namenode 是 HDFS 集群主节点,Datanode 是 HDFS 集群从节点,两种角色各司其职,共同协调完成分布式的文件存储服务。
9.4.2、 分块存储
HDFS 中的文件在物理上是分块存储(block)的,块的大小可以通过配置参数来规定,默认大小在 hadoop2.x 版本中是 128M。
可以把大文件切成若干个128M的block块
9.4.3、 名字空间(NameSpace)
HDFS 支持传统的层次型文件组织结构。用户或者应用程序可以创建目录,然后将文件保存在这些目录里。
文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建、删除、移动或重命名文件。
Namenode 负责维护文件系统的名字空间,任何对文件系统名字空间或属性的修改都将被Namenode 记录下来。
HDFS 会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,
形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。
9.4.4、 Namenode 元数据管理
我们把目录结构及文件分块位置信息叫做元数据。Namenode 负责维护整个hdfs文件系统的目录树结构,
以及每一个文件所对应的 block 块信息(block 的id,及所在的datanode 服务器)。
9.4.5、Datanode 数据存储
文件的各个 block 的具体存储管理由 datanode 节点承担。每一个 block 都可以在多个datanode 上。
Datanode 需要定时向  Namenode 汇报自己持有的 block信息。
存储多个副本(副本数量也可以通过参数设置 dfs.replication,默认是 3)。
9.4.6、 副本机制
为了容错,文件的所有 block 都会有副本。每个文件的 block 大小和副本系数都是可配置的。
应用程序可以指定某个文件的副本数目。副本系数可以在文件创建的时候指定,也可以在之后改变。
9.4.7、 一次写入,多次读出
HDFS 是设计成适应一次写入,多次读出的场景,且不支持文件的修改。
正因为如此,HDFS 适合用来做大数据分析的底层存储服务,并不适合用来做.网盘等应用,因为,修改不方便,延迟大,
网络开销大,成本太高。
9.5、hdfs的命令行使用
ls
Usage: hdfs dfs -ls [-R] <args>Example:
hdfs dfs -ls -R /test (递归查看)
hdfs dfs -ls / (一级一级查看)
lsr
Usage: hdfs dfs -lsr <args>
Example:
hdfs dfs -lsr /test (递归查看)
mkdir
Usage: hdfs dfs -mkdir [-p] <paths>
Example:
hdfs dfs -mkdir -p /hello/world
moveFromLocal
Usage: hdfs dfs -moveFromLocal <localsrc> <dst> (将本地磁盘文件剪切并上传hdfs上面去)
Example:
hdfs dfs -moveFromLocal /root/install.log /hello
moveToLocal
Usage: hdfs dfs -moveToLocal [-crc] <src> <dst> (不能使用)
mv
Usage: hdfs dfs -mv URI [URI ...] <dest>
Example:
hdfs dfs -mv /hello/install.log /hello/install2.log (文件重命名)
hdfs dfs -mv /hello/install2.log /   (文件移动)
put
Usage: hdfs dfs -put <localsrc> ... <dst> (将本地磁盘文件复制并上传hdfs上面去)
Example:
hdfs dfs -put /root/aaa.txt /hello/
appendToFile
Usage: hdfs dfs -appendToFile <localsrc> ... <dst>
追加一个或者多个文件到hdfs指定文件中.也可以从命令行读取输入.
Example:
hdfs dfs -appendToFile /export/servers/shells/install_jdk.sh /hello/xxx.txt
cat
Usage: hdfs dfs -cat URI [URI ...]
Example:
hdfs dfs -cat /hello/xxx.txt
cp
Usage: hdfs dfs -cp [-f] [-p | -p[topax]] URI [URI ...] <dest>
复制文件(夹),可以覆盖,可以保留原有权限信息
Example:
hdfs dfs -cp /hello/xxx.txt /hello/world.txt
rm
Usage: hdfs dfs -rm [-f] [-r|-R] [-skipTrash] URI [URI ...]
Example:hdfs dfs -rm -r /hello
20/04/05 18:41:41 INFO fs.TrashPolicyDefault: Moved: 'hdfs://node1:8020/hello' to trash at:
hdfs://node1:8020/user/root/.Trash/Current/hello
rmr
Usage: hdfs dfs -rmr [-skipTrash] URI [URI ...]
Recursive version of delete.
chmod
Usage: hdfs dfs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI ...]
修改权限.
hdfs dfs -chmod -R 777 /xxx
hdfs dfs -chmod -R 777 /test
chown
Usage: hdfs dfs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
修改所有者.
hdfs dfs -chown -R hadoop:hadoop /test
expunge
Usage: hdfs dfs -expunge
清空回收站. (清空垃圾桶)
9.6、hdfs的高级使用命令
1、HDFS文件限额配置
hdfs文件的限额配置允许我们以文件大小或者文件个数来限制我们在某个目录下上传的文件数量
或者文件内容总量,以便达到我们类似百度网盘网盘等限制每个用户允许上传的最大的文件的量1、数量限额
hdfs dfs -mkdir -p /user/root/lisi     #创建hdfs文件夹
hdfs dfsadmin -setQuota 2 lisi      # 给该文件夹下面设置最多上传两个文件,上传文件,发现只能上传一个文件
hdfs dfsadmin -clrQuota /user/root/lisi    # 清除文件数量限制
hdfs dfs -count -q -h /user/root/lisi  # 查看hdfs文件限额数量


2、空间大小限额
hdfs dfs -rmr /user/root/lisi/*
hdfs dfsadmin -setSpaceQuota 4k /user/root/lisi # 限制空间大小4KB
hdfs dfs -put /export/softwares/zookeeper-3.4.5-cdh5.14.0.tar.gz /user/root/lisi
#上传超过4Kb的文件大小上去提示文件超过限额
hdfs dfsadmin -clrSpaceQuota /user/root/lisi #清除空间限额
hdfs dfs -put /export/softwares/zookeeper-3.4.5-cdh5.14.0.tar.gz /user/root/lisi
#重新上传成功

2、hdfs的安全模式
安全模式是HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接受删除、修改等变更请求。
在NameNode主节点启动时,HDFS首先进入安全模式,DataNode在启动的时候会向namenode汇报可用的block等状态,
当整个系统达到安全标准时,HDFS自动离开安全模式。如果HDFS出于安全模式下,则文件block不能进行任何的副本复制操作,
因此达到最小的副本数量要求是基于datanode启动时的状态来判定的,启动时不会再做任何复制(从而达到最小副本数量要求)
,hdfs集群刚启动的时候,默认30S钟的时间是出于安全期的,只有过了30S之后,集群脱离了安全期,然后才可以对集群进行操作
hdfs  dfsadmin  -safemode get / enter /leave wait

10.hadoop的基准测试

实际生产环境当中,hadoop的环境搭建完成之后,第一件事情就是进行压力测试,测试我们的集群的读取和写入速度,
测试我们的网络带宽是否足够等一些基准测试
测试写入速度
向HDFS文件系统中写入数据,10个文件,每个文件10MB,文件存放到
/benchmarks/TestDFSIO中
hadoop jar /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.6.0-cdh5.14.0.jar TestDFSIO  -write -nrFiles 10 -fileSize 10MB
完成之后查看写入速度结果
hdfs dfs -text /benchmarks/TestDFSIO/io_write/part-00000
真实服务器性能,写入速度大概在20-30M每秒的样子

测试读取速度
测试hdfs的读取文件性能
在HDFS文件系统中读入10个文件,每个文件10M
hadoop jar /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.6.0-cdh5.14.0.jar TestDFSIO -read -nrFiles 10 -fileSize 10MB
真实服务器性能,读取速度大概在50-100M每秒的样子查看读取结果
hdfs dfs -text /benchmarks/TestDFSIO/io_read/part-00000

清除测试数据
hadoop jar /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.6.0-cdh5.14.0.jar TestDFSIO -clean更多基准测试参见:
https://blog.csdn.net/azhao_dn/article/details/6930909

实际线上环境如何进行压测:写入10G文件 再写入100G文件 再写入1T文件

03 大数据hadoop发展简史及环境安装相关推荐

  1. Python + 大数据-Hadoop生态-Linux(一)-环境搭建和Vi

    Python + 大数据-Hadoop生态-Linux(一)-环境搭建和Vi 今日课程学习目标 1.了解Linux操作系统发展介绍.安装配置 2.掌握SSH原理机制.Linux文件上传下载 3.掌握L ...

  2. BIG DATA 神奇的大数据 - Hadoop(Linux)环境搭建与部署

    自说 Hadoop的运行环境有两种,分别是windows和linux系统,Linux更适合作为服务器操作系统,也更加方便使用. 学习路径 BIG DATA 神奇的大数据 - hadoop简章 准备工作 ...

  3. 2021年大数据Hadoop(二):Hadoop发展简史和特性优点

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 Hadoop发展简史 ...

  4. 大数据学习笔记一:大数据的发展历程--MapReduce,Hive,Yarn,Hadoop,Spark,Flink

    大数据学习系列文章:大数据-博客专栏 今天在学习极客时间专栏:<从0开始学大数据> 从预习 01 | 大数据技术发展史:大数据的前世今生到预习 03 | 大数据应用领域:数据驱动一切,系统 ...

  5. 03大数据技术之Hadoop(HDFS)

    03大数据技术之Hadoop(HDFS)(老师:尚硅谷) 文章目录 03大数据技术之Hadoop(HDFS)(老师:尚硅谷) 第1章 HDFS概述 1.1 HDFS产出背景及定义 1.2 HDFS优缺 ...

  6. 大数据介绍、集群环境搭建、Hadoop介绍、HDFS入门介绍

    大数据介绍.集群环境搭建.Hadoop介绍.HDFS入门介绍 文章目录 大数据介绍.集群环境搭建.Hadoop介绍.HDFS入门介绍 1.课前资料 2.课程整体介绍 3.大数据介绍 3.1 什么是大数 ...

  7. 使用Docker搭建大数据Hadoop环境

    使用Docker搭建大数据Hadoop环境 一.安装Docker 原文地址:https://www.imooc.com/article/48676.http://www.runoob.com/dock ...

  8. 大数据hadoop环境部署

    大数据hadoop在linux环境下的部署安装,包括单节点模式.伪分布模式以及完全分布式模式

  9. 王家林的“云计算分布式大数据Hadoop实战高手之路---从零开始”的第五讲Hadoop图文训练课程:解决典型Hadoop分布式集群环境搭建问题

    王家林的"云计算分布式大数据Hadoop实战高手之路---从零开始"的第五讲Hadoop图文训练课程:解决典型Hadoop分布式集群环境搭建问题 参考文章: (1)王家林的&quo ...

最新文章

  1. 支付接口教程,详解支付宝接口(二)
  2. linux 传真 邮件,如何在Linux环境下架设一台传真服务器(2)
  3. 前端学习(2328):angular之模板
  4. 9张图总结一下阿里云的2019
  5. R语言基础入门(6)之向量下标和子集
  6. HTK在win7下安装的一些问题
  7. IC卡、ID卡、CPU卡、RFID、NFC大致区分一览表
  8. Django中related_name作用
  9. 洛阳出发自驾不到半天就能看“海”!人少景美路途近!
  10. C#自动换ip功能或者ip代理功能要这么实现
  11. .NET 中的 GAC
  12. 我的世界超能物质纳米机器人_超能物质复制物品教程(附图) - [MO]超能物质 (Matter Overdrive) - MC百科|最大的Minecraft中文MOD百科...
  13. java全套学习课程
  14. c执行cmd pdf2swf_SWFTOOLS PDF2SWF 参数详解
  15. c语言停车场程序设计,停车场模拟管理程序的设计与实现,高手指教
  16. 数据库锁的概念与介绍
  17. socket接收消息 字符串长度
  18. TP-LINK WR720N升级8M Flash 64M Ram,加USB-TTL,烧openwrt官方固件,接蓝牙适配器
  19. 【企业架构设计实战】大数据架构最佳实践
  20. 密码的离线pojie

热门文章

  1. java计算器程序代码
  2. 欧几里德算法(求两数最大公因数)
  3. ios本地文件读取方法详解
  4. 拉取项目pom文件报错,jai_core-1.1.3.jar,解决jar引入问题
  5. C#实现共享并且建立账号(指定账号登录操作,如果是 1219错误则清除用户数据)
  6. java 轻量级插件化框架_轻量级插件化框架——Small
  7. G1调优常用参数及其作用
  8. Excel:VBA数据分析-找到含某个关键字的单元格就标黄(五)
  9. 【狂神说Java】JavaWeb入门到实战--Maven详解
  10. CentOS7.6 万兆网卡性能测试.