Hadoop知识整理

Hadoop是什么

1)Hadoop是一个由Apache基金会所开发的分布式系统基础架构。

2)主要解决,海量数据的存储和海量数据分析计算的问题。

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

Hadoop知识整理

Hadoop三大发行版本

Hadoop三大发行版本:Apache、Cloudera、Hortonworks。

Apache版本最原始(最基础)的版本,对于入门学习最好。

Cloudera在大型互联网企业中用的较多。

Hortonworks文档较好。

1. Apache Hadoop

官网地址:http://hadoop.apache.org/releases.html

下载地址:https://archive.apache.org/dist/hadoop/common/

2. Cloudera Hadoop

官网地址:https://www.cloudera.com/downloads/cdh/5-10-0.html

下载地址:http://archive-primary.cloudera.com/cdh5/cdh/5/

(1)2008年成立的Cloudera是最早将Hadoop商用的公司,为合作伙伴提供Hadoop的商用解决方案,主要是包括支持、咨询服务、培训。

(2)2009年Hadoop的创始人Doug Cutting也加盟Cloudera公司。Cloudera产品主要为CDH,Cloudera Manager,Cloudera Support

(3)CDH是Cloudera的Hadoop发行版,完全开源,比Apache Hadoop在兼容性,安全性,稳定性上有所增强。

(4)Cloudera Manager是集群的软件分发及管理监控平台,可以在几个小时内部署好一个Hadoop集群,并对集群的节点及服务进行实时监控。Cloudera Support即是对Hadoop的技术支持。

(5)Cloudera的标价为每年每个节点4000美元。Cloudera开发并贡献了可实时处理大数据的Impala项目。

3. Hortonworks Hadoop

官网地址:https://hortonworks.com/products/data-center/hdp/

下载地址:https://hortonworks.com/downloads/#data-platform

(1)2011年成立的Hortonworks是雅虎与硅谷风投公司Benchmark Capital合资组建。

(2)公司成立之初就吸纳了大约25名至30名专门研究Hadoop的雅虎工程师,上述工程师均在2005年开始协助雅虎开发Hadoop,贡献了Hadoop80%的代码。

(3)雅虎工程副总裁、雅虎Hadoop开发团队负责人Eric Baldeschwieler出任Hortonworks的首席执行官。

(4)Hortonworks的主打产品是Hortonworks Data Platform(HDP),也同样是100%开源的产品,HDP除常见的项目外还包括了Ambari,一款开源的安装和管理系统。

(5)HCatalog,一个元数据管理系统,HCatalog现已集成到Facebook开源的Hive中。Hortonworks的Stinger开创性的极大的优化了Hive项目。Hortonworks为入门提供了一个非常好的,易于使用的沙盒。

(6)Hortonworks开发了很多增强特性并提交至核心主干,这使得Apache Hadoop能够在包括Window Server和Windows Azure在内的Microsoft Windows平台上本地运行。定价以集群为基础,每10个节点每年为12500美元。

Hadoop的优势

1)高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。

2)高扩展性:在集群间分配任务数据,可方便的扩展以千计的节点。

3)高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。

4)高容错性:能够将失败的任务重新分配。

Hadoop组成

Hadoop知识整理

在Hadoop1.X时代,Hadoop中的MapReduce同时处理业务逻辑运算和资源调度,耦合性较大,在Hadoop2.X时代,增加了Yarn。Yarn只负责子资源的调度,MapReduce只负责运算。

HDFS架构概述

HDFS(Hadoop Distributed File System)的架构概述:


1)NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件列表和块所在的DataNode等。

2)DataNode(dn):在本地文件系统存储文件块数据,以及数据的校验。

3)Secondary NameNode(2nn):用来监控HDFS状态的辅助后台程序,每隔一段时间获取元数据的快照。

Yarn架构概述:

Hadoop知识整理

1)ResourceManager作用:

1.处理客户请求

2.监控NodeManager

3.启动或监控ApplicationMaster

4.资源的分配和调度

2)NodeManager(NM)的主要作用

1.管理单个节点的资源

2.处理来自ResourceManager的命令

3.处理来自ApplicationMaster的命令

3)ApplicationMaster(AM)作用如下:

1.负责数据的切分

2.为应用程序申请资源并分配内部的任务

3.任务的监控与容错

4)Container

Container是Yarn中的资源的抽象,它封装了某个节点上的多维度资源,如内存,cpu,磁盘,网络等。

工作方式:

Hadoop知识整理

(0) Mr 程序提交到客户端所在的节点。

(1)Yarnrunner 向 Resourcemanager 申请一个 Application。

(2)rm 将该应用程序的资源路径返回给 yarnrunner。

(3)该程序将运行所需资源提交到 HDFS 上。

(4)程序资源提交完毕后,申请运行 mrAppMaster。

(5)RM 将用户的请求初始化成一个 task。

(6)其中一个 NodeManager 领取到 task 任务。

(7)该 NodeManager 创建容器 Container,并产生 MRAppmaster。

(8)Container 从 HDFS 上拷贝资源到本地。

(9)MRAppmaster 向 RM 申请运行 maptask 资源。

(10)RM 将运行 maptask 任务分配给另外两个 NodeManager,另两个 NodeManager 分

别领取任务并创建容器。

(11)MR 向两个接收到任务的 NodeManager 发送程序启动脚本,这两个 NodeManager

分别启动 maptask,maptask 对数据分区排序。

(12)MrAppMaster 等待所有 maptask 运行完毕后,向 RM 申请容器,运行 reduce task。

(13)reduce task 向 maptask 获取相应分区的数据。

(14)程序运行完毕后,MR 会向 RM 申请注销自己。

MapReduce架构概述:

MapReduce将计算过程分为两个阶段:Map和Reduce。
1)Map阶段并行处理输入数据

2)Reduce阶段对Map结果进行汇总

Hadoop运行环境搭建

虚拟机:hadoop101,关闭防火墙。

创建用户,hadoop:

<code>useradd hadoop
passwd hadoop/<code>

配置hadoop用户具有root权限:

<code>chmod -v u+w /etc/sudoers #给这个文件添加写权限
vi /etc/sudoers  #修改 sudoers

## Allow root to run any commands anywhereroot    ALL=(ALL)       ALLsss    ALL=(ALL)       ALL (添加这一行)/<code>

## Allow root to run any commands anywhere
root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL (添加这一行)

保存,退出

<code>chmod -v u-w /etc/sudoers  #删除 sudoers 的写的权限/<code> 

在/opt目录下创建文件夹

在/opt目录下创建module、software文件夹:

<code>sudo mkdir module
sudo mkdir software/<code>

修改module、software文件夹的所有者:

<code>sudo chown hadoop:hadoop   module/ software//<code>

安装JDK:

1.卸载现有JDK

(1)查询是否安装Java软件:

<code>rpm -qa | grep java/<code>

(2)如果安装的版本低于1.7,卸载该JDK:

<code>sudo rpm -e 软件包/<code>

(3)查看JDK安装路径:

<code>which java/<code>

2.将安装包导入software目录下:

<code>cd software/  ls
hadoop-2.7.2.tar.gz  jdk-8u144-linux-x64.tar.gz/<code>

3.解压JDK到/opt/module目录下

<code>tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module//<code>

4. 配置JDK环境变量

<code>sudo vi /etc/profile/<code>

在文件末尾添加:

<code>#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin/<code>
<code>source /etc/profile #让修改后的文件生效/<code>

安装Hadoop

Hadoop下载地址:

https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/

1. 将hadoop-2.7.2.tar.gz导入到opt目录下面的software文件夹下面

2.将Hadoop安装包解压到到/opt/module下面

<code> tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module//<code>

3.将Hadoop添加到环境变量:

<code>sudo vi /etc/profile/<code>

文件末尾添加:

<code>##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin/<code>

使配置生效:

<code>source /etc/profile/<code>

4. 重启(如果Hadoop命令不能用再重启)

Hadoop目录结构

Hadoop知识整理

(1)bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本

(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件

(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)

(4)sbin目录:存放启动或停止Hadoop相关服务的脚本

(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例

Hadoop运行模式

Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。

本地运行模式

官方Grep案例

1. 创建在hadoop-2.7.2文件下面创建一个input文件夹

<code> mkdir input/<code>

2. 将Hadoop的xml配置文件复制到input

<code> cp etc/hadoop/*.xml input/<code>

3. 执行share目录下的MapReduce程序

<code> bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'/<code> 


4. 查看输出结果

<code> cat output/*/<code>

官方WordCount案例

1. 创建在hadoop-2.7.2文件下面创建一个wcinput文件夹

<code> mkdir wcinput/<code>

2. 在wcinput文件下创建一个wc.input文件

<code>cd wcinput
touch wc.input/<code>

3. 编辑wc.input文件

<code>vi wc.input/<code>

在文件中输入如下内容

<code>hadoop yarn
hadoop mapreduce
atguigu
atguigu/<code>

保存退出::wq

4. 回到Hadoop目录/opt/module/hadoop-2.7.2

5. 执行程序

<code>hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput/<code>

6. 查看结果

<code>cat wcoutput/part-r-00000/<code>
<code>atguigu 2
hadoop  2
mapreduce       1
yarn    1/<code>

伪分布式运行模式

启动HDFS并运行MapReduce程序

1. 分析

(1)配置集群

(2)启动、测试集群增、删、查

(3)执行WordCount案例

2. 执行步骤

(1)配置集群

(a)配置:hadoop-env.sh

Linux系统中获取JDK的安装路径:

<code>echo $JAVA_HOME
/opt/module/jdk1.8.0_144/<code>

修改hadoop-env.sh中的JAVA_HOME 路径:

<code>export JAVA_HOME=/opt/module/jdk1.8.0_144/<code>

(b)配置:core-site.xml

<code> 

fs.defaultFS
    hdfs://hadoop101:9000


 

	hadoop.tmp.dir
	/opt/module/hadoop-2.7.2/data/tmp
/<code>

(c)配置:hdfs-site.xml

<code> 

	dfs.replication
	1
/<code>

(2)启动集群

(a)格式化NameNode(第一次启动时格式化,以后就不要总格式化)

<code> bin/hdfs namenode -format/<code>

(b)启动NameNode

<code>sbin/hadoop-daemon.sh  start namenod/<code>

(c)启动DataNode

<code>sbin/hadoop-daemon.sh start datanode/<code>

(3)查看集群

(a)查看是否启动成功

<code>jps/<code>
<code>13586 NameNode
13668 DataNode
13786 Jps/<code>

注意:jps是JDK中的命令,不是Linux命令。不安装JDK不能使用jps

(b)web端查看HDFS文件系统

http://hadoop101:50070/dfshealth.html#tab-overview

如不能访问,可参考以下几个方案。

  1. 查看vi /etc/selinux/config的配置改成SELINUX=disabled
  2. 是否关闭了防火墙
  3. 查看你的$HADOOP_HOME/etc/hadoop下的core-site.xml和hdfs-site.xml是否配置好
  4. 查看你windows里本地的配置文件的IP和主机名映射关系
  5. 必须在hadoop-env.sh文件中设置Java的绝对路径

(c)查看产生的Log日志

当前目录:/opt/module/hadoop-2.7.2/logs

Hadoop知识整理

(d)思考:为什么不能一直格式化NameNode,格式化NameNode,要注意什么?

<code>cd data/tmp/dfs/name/current/
  
cat VERSION

clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837/<code>

注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到以往数据。所以,格式NameNode时,一定要先删除data数据和log日志,然后再格式化NameNode。

(4)操作集群

(a)在HDFS文件系统上创建一个input文件夹

<code>bin/hdfs dfs -mkdir -p /user/hadoop/input/<code>

(b)将测试文件内容上传到文件系统上

<code>bin/hdfs dfs -put wcinput/wc.input
  /user/hadoop/input//<code>

(c)查看上传的文件是否正确

<code>bin/hdfs dfs -ls  /user/hadoop/input/
  
bin/hdfs dfs -cat  /user/hadoop/ input/wc.input/<code>

(d)运行MapReduce程序

<code>bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/hadoop/input/ /user/hadoop/output/<code>

(e)查看输出结果

<code>bin/hdfs dfs -cat /user/hadoop/output/*/<code>

(f)将测试文件内容下载到本地

<code>hdfs dfs -get /user/hadoop/output/part-r-00000 ./wcoutput//<code>

(g)删除输出结果

<code>hdfs dfs -rm -r /user/hadoop/output/<code>

启动YARN并运行MapReduce程序

1. 分析

(1)配置集群在YARN上运行MR

(2)启动、测试集群增、删、查

(3)在YARN上执行WordCount案例

2. 执行步骤

(1)配置集群

(a)配置yarn-env.sh

配置一下JAVA_HOME:

<code>export JAVA_HOME=/opt/module/jdk1.8.0_144/<code>

b)配置yarn-site.xml

<code> 

 		yarn.nodemanager.aux-services
 		mapreduce_shuffle


 

yarn.resourcemanager.hostname
hadoop101
/<code>

c)配置:mapred-env.sh

配置一下JAVA_HOME

<code>export JAVA_HOME=/opt/module/jdk1.8.0_144/<code>

d)配置: (对mapred-site.xml.template重新命名为) mapred-site.xml

<code>mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml/<code>
<code> 

		mapreduce.framework.name
		yarn
/<code>

(2)启动集群

(a)启动前必须保证NameNode和DataNode已经启动

(b)启动ResourceManager

<code>sbin/yarn-daemon.sh start resourcemanager/<code>

(c)启动NodeManager

<code>sbin/yarn-daemon.sh start nodemanager/<code>

(3)集群操作

(a)YARN的浏览器页面查看

http://hadoop101:8088/cluster

Hadoop知识整理

(b)删除文件系统上的output文件

<code>bin/hdfs dfs -rm -R /user/hadoop/output/<code> 

(c)执行MapReduce程序

<code>bin/hadoop jar
 share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/hadoop/input  /user/hadoop/output/<code>

(d)查看运行结果

<code>bin/hdfs dfs -cat /user/hadoop/output/*/<code>

配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:

1. 配置mapred-site.xml

<code>vi mapred-site.xml/<code>

在该文件里面增加如下配置。

<code> 

mapreduce.jobhistory.address
hadoop101:10020

 

    mapreduce.jobhistory.webapp.address
    hadoop101:19888
/<code>

2. 启动历史服务器

<code>sbin/mr-jobhistory-daemon.sh start historyserver/<code>

3. 查看历史服务器是否启动

<code>jps/<code>

4. 查看JobHistory

http://hadoop101:19888/jobhistory

配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。

开启日志聚集功能具体步骤如下:

1. 配置yarn-site.xml

<code>vi yarn-site.xml/<code>

在该文件里面增加如下配置。

<code> 

yarn.log-aggregation-enable
true


 

yarn.log-aggregation.retain-seconds
604800
/<code>

2. 关闭NodeManager 、ResourceManager和HistoryServer

<code>sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager
sbin/mr-jobhistory-daemon.sh stop historyserver/<code>

3. 启动NodeManager 、ResourceManager和HistoryServer

<code>sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
sbin/mr-jobhistory-daemon.sh start historyserver/<code>

4.删除HDFS上已经存在的输出文件

<code>bin/hdfs dfs -rm -R /user/hadoop/output/<code>

5. 执行WordCount程序

<code>hadoop jar
 share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/hadoop/input /user/hadoop/output/<code>

6. 查看日志

http://hadoop101:19888/jobhistory

配置文件说明

Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

(1)默认配置文件:

Hadoop知识整理

(2)自定义配置文件:

core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。

完全分布式运行模式

主要步骤:

1)准备3台客户机(关闭防火墙、静态ip、主机名称)hadoop102,hadoop103,hadoop104

2)安装JDK

3)配置环境变量

4)安装Hadoop

5)配置环境变量

6)配置集群

7)单点启动

8)配置ssh

9)群起并测试集群

将hadoop102,hadoop103,hadoop104安装JDK和Hadoop并配置环境变量。

集群部署规划:

Hadoop知识整理

(1)首先配置Hadoop102的配置文件,再分发配置文件到其他节点。

<code>vi core-site.xml/<code>

在该文件中编写如下配置

<code> 

		fs.defaultFS
      hdfs://hadoop102:9000


 

		hadoop.tmp.dir
		/opt/module/hadoop-2.7.2/data/tmp
/<code>

(2)HDFS配置文件

配置hadoop-env.sh

<code>vi hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144/<code>

配置hdfs-site.xml

<code> vi hdfs-site.xml/<code>

在该文件中编写如下配置

<code>
		dfs.replication
		3


 

      dfs.namenode.secondary.http-address
      hadoop104:50090
/<code>

(3)YARN配置文件

配置yarn-env.sh

<code>vi yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144/<code>

配置yarn-site.xml

<code>vi yarn-site.xml/<code>

在该文件中增加如下配置

<code> 

		yarn.nodemanager.aux-services
		mapreduce_shuffle


 

		yarn.resourcemanager.hostname
		hadoop103
/<code>

(4)MapReduce配置文件

配置mapred-env.sh

<code>vi mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144/<code>

配置mapred-site.xml

<code>cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml/<code>

在该文件中增加如下配置

<code> 

mapreduce.framework.name
yarn
/<code>

在集群上分发配置好的Hadoop配置文件

利用rsync命令分发。

集群单点启动

如果集群是第一次启动,需要格式化NameNode

<code>hdfs namenode -format/<code>

在hadoop102上启动NameNode

<code>hadoop-daemon.sh start namenode/<code>

在hadoop102、hadoop103以及hadoop104上分别启动DataNode

<code>hadoop-daemon.sh start datanode/<code>

SSH无密登录配置

Hadoop知识整理

再生成公钥和私钥:

<code>ssh-keygen -t rsa/<code>

然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

将公钥拷贝到要免密登录的目标机器上

<code>ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104/<code>

注意:

还需要在hadoop103上采用hadoop账号,配置一下无密登录到hadoop102、hadoop103、hadoop104;

还需要在hadoop104上采用hadoop账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。

.ssh文件夹下(~/.ssh)的文件功能解释

known_hosts:记录ssh访问过计算机的公钥(public key)

id_rsa:生成的私钥

id_rsa.pub:生成的公钥

authorized_keys:存放授权过的无密登录服务器公钥

群起集群

配置slaves,进入/opt/module/hadoop-2.7.2/etc/hadoop/slaves目录下

<code>vi slaves/<code>

在该文件中增加如下内容:

<code>hadoop102
hadoop103
hadoop104/<code>

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

同步所有节点配置文件。

启动集群

(1)如果集群是第一次启动,需要格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)

<code>bin/hdfs namenode -format/<code>

(2)启动HDFS

<code>sbin/start-dfs.sh/<code>

(3)启动YARN

<code>sbin/start-yarn.sh/<code>

注意:NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN。

(4)Web端查看SecondaryNameNode

(a)浏览器中输入:http://hadoop104:50090/status.html

(b)查看SecondaryNameNode信息

Hadoop知识整理

集群启动/停止方式总结

1. 各个服务组件逐一启动/停止

(1)分别启动/停止HDFS组件

<code>hadoop-daemon.sh  start / stop  namenode / datanode / secondarynamenode/<code>

(2)启动/停止YARN

<code>yarn-daemon.sh  start / stop  resourcemanager / nodemanager/<code>

2. 各个模块分开启动/停止(配置ssh是前提)常用

(1)整体启动/停止HDFS

<code>start-dfs.sh   /  stop-dfs.sh/<code>

(2)整体启动/停止YARN

<code>start-yarn.sh  /  stop-yarn.sh/<code>


分享到:


相關文章: