一.Hadoop 2.x概述

1.hadoop的来源
Hadoop的产生主要来源于Google的三篇论文,如下:
GFS ——-> HDFS
MapReduce ————>MapReduce
BigTable ———–>Hbase

2.hadoop是什么 3.Hadoop的组成
Common:为其他Hadoop模块提供服务
HDFS:分布式文件系统,用于存储海量数据,主要特点是分布式(多主机存储)、安全性(副本数据,一般是3个副本),数据以block形式存储,数据块大小默认是128M
MapReduce:一个分布式的离线计算框架,对海量数据进行处理,主要思想是分而治之,将大数据集拆分成小的数据集,然后对每个数据集进行逻辑业务处理(map),合并统计数据结果(reduce)
Yarn:一个分布式资源管理和任务调度框架,例如管理整个集群资源(cpu数,内存)、分配调度集群的资源

4.HDFS系统架构图

hadoop存储数据 hadoop数据存在哪儿_Hadoop

hdfs是以主-从节点运行。
namenode:主节点,存放元数据信息,比如文件名、文件的目录结构、文件属性、每个文件块列表以及块所在的datanode等。**注意:**namenode的元数据一部分存放在内存中,一部分在磁盘上(例如:fsimage(镜像文件)和edits(编辑日志))
datanode:从节点,存放的是数据块以及数据块的校验和
Secondary NameNode: 用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照

5.Yarn架构图

hadoop存储数据 hadoop数据存在哪儿_hadoop存储数据_02

ResourceManager:处理客户端请求;启动/监控ApplicationMaster;监控NodeManager;资源分配与调度
ApplicationMaster:数据切分;为应用程序申请资源,并分配给内部任务;任务监控与容错
NodeManager:单个节点上的资源管理;处理来自ResourceManager的命令;处理来自ApplicationMaster的命令
Container:对任务运行环境的抽象,封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息

6.离线计算框架MapReduce
1)将计算过程分为两个阶段,map阶段和reduce阶段
map:并行处理输入数据(分)
reduce:对map结果进行合并(合)
2)shuffle连接map和reduce阶段
map task将数据写到本地磁盘
reduce task从每个task上读取一份数据
3)仅适合离线批处理
具有很好的容错性和扩展性
适合简单的批处理任务
4)缺点明显
启动开销大、过多使用磁盘导致效率较低

7.MapReduce on Yarn

hadoop存储数据 hadoop数据存在哪儿_hadoop_03

1)client提交application给RM
2)RM为application找到一个NM,在其container中启动APP master
3)App master向RM注册
4)App master向RM申请application所需资源
5)App master通知NM启动container,将相应资源放入container中
6)NM启动Map或者Reduce任务
7)NM像APP master反应map或者reduce任务的状态或者进度
8)App master告知RM任务完成了,可以销毁了

二.Hadoop 2.x生态系统

hadoop存储数据 hadoop数据存在哪儿_hadoop_04

Sqoop:关系型的数据库把数据存储到HDFS上。
Flume:日志文件的收集
MapReduce不是那么好写,门槛比较高,又有了Hive
Oozie:任务的管理与调度
Clodera Manager:整个集群资源的管理界面
Zookeeper:协作框架
Hue:web框架

三.Hadoop的环境配置

1.环境准备
1)删除系统默认的Java版本(需要切换到root)

$>rpm -qa|grep java  //查看 open jdk
    $>rpm -e --nodeps 文件名 //强制卸载

2)解压Java包

$>tar -zvf jdk-7u67-linux-x64.tar.gz -C /soft

3)创建符号链接

$>ln -s java jdk1.7.0_67

4)配置Java环境变量(/etc/profile)

......
export JAVA_HOME=/soft/java
export PATH=$PATH:$JAVA_HOME/bin

5)使配置文件生效

$>source /etc/profile

6)验证Java环境是否配置成功

$>java -version

2.环境搭建
1)本地模式
1.解压Hadoop包

$>tar -zvf  hadoop-2.5.0.tar.gz -C /soft

2)配置etc/hadoop/hadoop-env.sh(配置Java环境,已防万一)

$> export JAVA_HOME=/soft/java

3)测试运行

$ mkdir input
  $ cp etc/hadoop/*.xml input
  $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar grep input output 'dfs[a-z.]+'
  $ cat output/*

2)伪分布式
1.配置etc/hadoop/core-site.xml

<configuration>
    #配置hdfs文件系统
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://s201:8020</value>
    </property>
    #配置Hadoop的临时目录
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/soft/hadoop/tmp</value>
    </property>

</configuration>

2.配置etc/hadoop/hdfs-site.xml

#配置保存文件副本数
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

3.格式化文件系统

$ bin/hdfs namenode -format

4.启动NameNode和DataNode

$ sbin/hadoop-daemon.sh start namenode //单独启动namenode
$ sbin/hadoop-daemons.sh start datanode //单独启动datanode
$ sbin/start-dfs.sh   //同时启动namenode和datanode

6.配置etc/hadoop/yarn-site.xml

<configuration>
    #配置mapreduce程序
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    #配置resourcemanager所在节点
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>s201</value>
    </property>
</configuration>

7.配置etc/hadoop/mapred-site.xml

#配置计算框架为yarn,默认是本地
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

注意:监控界面:HDFS端口是主机名+50070,resourcemanager的端口是主机名+8088

四.初识MapReduce应用

1.历史服务器
启动:

$>sbin/mr-jobhistory-daemon.sh start historyserver

停止:

$>sbin/mr-jobhistory-daemon.sh stop historyserver

2.日志聚集
应用运行完成以后,将日志信息上传到HDFS系统上
需要配置yarn-site.xml

<configuration>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>360</value>
    </property>
</configuration>

3.垃圾回收间隔
配置core-site.xml

<configuration>
    <property>
        <name>fs.trash.interval</name>
        <value>600</value>
    </property>
</configuration>

4.启动方式
1)各个服务组件逐一启动
* hdfs
hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
* yarn
yarn-daemon.sh start|stop resourcemanager|nodemanager
* mapreduce
mr-historyserver-daemon.sh start|stop historyserver
2)各个模块分开启动
* hdfs
start-dfs.sh
stop-dfs.sh
* yarn
start-yarn.sh
stop-yarn.sh
3)全部启动(不推荐)
start-all.sh
stop-all.sh
5.ssh免密登录
1)生成密钥对

$>ssh-keygen -t rsa

2)拷贝文件到需要登录的机器上

$>ssh-copy-id s202

6.各个服务组件运行在那个配置中

NameNode 
 core-site.xml 

 fs.defaultFS 
 hdfs://s201:8020 

 DataNodes 
 slaves 
 s202 
 s203 
 s204 
 SecondaryNameNode 
 hdfs-site.xml 

 dfs.namenode.secondary.http-address 
 s204:50090 

 YARN 
 ResourceManager 
 yarn-site.xml 

 yarn.resourcemanager.hostname 
 s201 

 NodeManagers 
 slaves 
 s202 
 s203 
 s204MapReduce HistoryServer 
 mapred-site.xml 

 mapreduce.jobhistory.address 
 s201:10020 


 mapreduce.jobhistory.webapp.address 
 s201:19888