Hadoop是什么
1)Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
2)主要解决,海量数据的存储和海量数据分析计算的问题。
3)广义上来说,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组成
在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架构概述:
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,磁盘,网络等。
工作方式:
(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目录结构
(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
如不能访问,可参考以下几个方案。
- 查看vi /etc/selinux/config的配置改成SELINUX=disabled
- 是否关闭了防火墙
- 查看你的$HADOOP_HOME/etc/hadoop下的core-site.xml和hdfs-site.xml是否配置好
- 查看你windows里本地的配置文件的IP和主机名映射关系
- 必须在hadoop-env.sh文件中设置Java的绝对路径
(c)查看产生的Log日志
当前目录:/opt/module/hadoop-2.7.2/logs
(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
(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)默认配置文件:
(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并配置环境变量。
集群部署规划:
(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无密登录配置
再生成公钥和私钥:
<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信息
集群启动/停止方式总结
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>