一、大数据的4V特征

Volume   数据量大 TB PB
    Varity   的数据多种多样文本(.log .txt .sql .xml)
    Veracity 价值密度低 商业价值高
    Velocity  速度快

二、Hadoop 的概念

Hadoop是一个应用java语言实现的软件框架,
可扩展的分布式并行计算框架,
它可以让应用程序支持上千个节点和PB级别的数据。
Hadoop是项目的总称,主要是由分布式存储(HDFS)、和分布式并行计算(MapReduce)等组成。
  1. Hadoop的四个模块,也叫四大组件
Hadoop Common公共模块(支其他Hadoop模块的公用工具,包括FileSystem(面向通用文件系统的抽象类)、远程过程调用(RPC)和序列化库)
 Hadoop HDFS   存储数据:一个为访问应用数据提供高吞吐量的分布式文件系统。
 Hadoop YARN    管理资源(Hadoop2.x)    
 一个全局的任务调度与资源管理的框架--》YARN是mareduce的云操作系统
 Hadoop MapReduce  并行计算框架:一个基于Yarn的大数据分布式并行计算框架

2.Hadoop的发行版本:

Apache 
    Cloudera    商业发行版(卖服务)cdh

6.Hadoop的体系架构

HDFS
    NameNode(一个集群只有一个active):用于保存元数据信息(Namenode将元数据保存在  内存中),同时会在硬盘上保留一份。元数据(Filename、副本数,各个副本所在的节点的位置)
        学生信息管理系统书的目录


    DataNode:用于具体保存数据的
        在HDFS上保存的数据副本数,默认是3个,副本数可以设置
        每个班级的学生(本人)
        每个章节的具体的内容

    SecondaryNameNode: 用于同步元数据信息

YARN
    ResourceManager:负责全局的资源管理(Container:硬件资源(CPU,内存,硬盘))
        教务处主任(教学资源:教室:实验室 阶梯教室 体育馆)

    Nodemanager:负责所在节点上的资源
        班主任 机房管理员


Mapreduce
    分两个阶段:Map和Reduce  计算框架,编程模型     “分而治之”的思想
    100副扑克,少了一张,那么可以找50个人。每个人分2副本扑克

    分布式并行计算

三、Hadoop的安装运行模式:

单机模式:
    1.单机(本地)运行模式
        无需运行任何守护进程,所有程序都在单个JVM上执行,测试用


    分布式:
    2.伪分布式
        将所有的守护进程运行在一个节点`这里写代码片`

    3.集群模式
        1)完全分布式
        不同的守护进程运行在不同的节点
        2)HA
        Namenode HA   Resourcemanager HA
        3)联盟

Hadoop2.x环境搭建
准备工作

一、Linux环境
# vi /etc/sysconfig/network
    $ cat /etc/sysconfig/network
2.主机映射
# vi /etc/hosts
ip地址  主机名

windows下主机映射
C:/windows/system32/driver/hosts

3.$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes
BOOTPROTO=static

二、jdk
(推荐)用户只有一个(不要是root),user01
创建两个目录
# mkdir /opt/software /opt/modules
/opt/software  存放*.tag.gz
/opt/modules    放置安装文件
# chown -R user01:user01 /opt/modules/ /opt/software/

$ ll
drwxr-xr-x. 3 user01 user01 4096 Mar  7 07:34 modules
drwxr-xr-x. 2 root   root   4096 Nov 22  2013 rh
drwxr-xr-x. 2 user01 user01 4096 Mar  7 07:28 software

安装jdk
  $ tar -zxf jdk-7u67-linux-x64.tar.gz  -C ../modules/

 配置环境变量
  # vim /etc/profile
  #JAVA_HOME
export JAVA_HOME=/opt/modules/jdk1.7.0_67
export PATH=$PATH:$JAVA_HOME/bin

使配置生效
# source /etc/profile


 卸载openJDK
  # rpm -qa | grep jdk
  # rpm -e --nodeps   XXX.rpm   //不验证依赖进行卸载

  Linux 防火墙
  # service iptables status   ##查看防火墙状态
  iptables: Firewall is not running.
  # service iptables stop     ##关闭防火墙


  关闭开机启动防火墙
  #  chkconfig iptables off   ##不随机启动

  关闭安全子系统
  # vi /etc/sysconfig/selinux
  SELINUX=disabled

三、配置Hadoop  ${HADOOP_HOME}---hadoop的安装目录
解压安装hadoop【注意上传和解压过程中的用户权限问题】
$ tar -zxf hadoop-2.5.0.tar.gz -C  /opt/modules/

1.配置hadoop的java环境支持, ${HADOOP_HOME}/etc/hadoop目录下
hadoop-env.sh 
mapred-env.sh 
yarn-env.sh 

在这3个文件中都配置
export JAVA_HOME=/opt/modules/jdk1.7.0_67

2.与hdfs相关的配置   ${HADOOP_HOME}/etc/hadoop
1)core-site.xml
=============core-site.xml===================
<!--NameNode地址,8020是指定进程8020,访问入口 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://bigdata.ibeifeng.com:8020</value>
</property>

<!--hadoop在运行时产生的文件,元数据在本地的存放目录 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/modules/hadoop-2.5.0/data</value>
</property>
============================================

    2)hdfs-site.xml
=============hdfs-site.xml============
    <!--存放到hdfs上的文件的副本数,伪分布式配置为1 -->
<property>
       <name>dfs.replication</name>
       <value>1</value>
</property>
======================================
3)格式化namenode  只格式化一遍,不要重复格式化
${HADOOP_HOME}目录下:
$ bin/hdfs namenode -format       

    17/03/21 00:34:52 INFO common.Storage: Storage directory /opt/modules/hadoop-2.5.0/data/dfs/name has been successfully formatted.
    4)启动hdfs守护进程
  $ sbin/hadoop-daemon.sh start namenode  //启动namenode进程
    $ sbin/hadoop-daemon.sh start datanode    //启动datanode

    $  jps
3097 Jps
2931 NameNode
3023 DataNode


web访问界面
http://bigdata.ibeifeng.com:50070/

5)HDFS文件系统常用命令
$ bin/hdfs dfs   //可以查看所有的dfs相关的操作指令
$ bin/hdfs dfs -ls /  
$ bin/hdfs dfs -mkdir -p /input/test
$ bin/hdfs dfs  -rmdir /input/test
$ bin/hdfs dfs  -put /opt/software/jdk-7u67-linux-x64.tar.gz /input/test

3.配置YARN  任务调度 (Mapreduce) 资源管理(resourcemanager nodemanager)
${HADOOP_HOME}/etc/hadoop目录下配置yarn-site.xml
=======yarn-site.xml=====
<!-- 指定ResorceManager所在服务器的主机名-->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>[hostname]</value>
</property>

<!-- 指明在执行MapReduce的时候使用shuffle-->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
====================================

复制并重名模板文件
$ cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
=======mapred-site.xml=====
${HADOOP_HOME}/etc/hadoop目录下配置mapred-site.xml

<!-- 指定MapReduce基于Yarn来运行-->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
=====================================

4.启动hdfs yarn进程
$ sbin/hadoop-daemon.sh start namenode
$ sbin/hadoop-daemon.sh start datanode
$ sbin/yarn-daemon.sh start resourcemanager
$ sbin/yarn-daemon.sh start nodemanager

5.检查hdfs yarn启动状态,即查看守护进程


6.向yarn提交mapreducer任务
    1)计算圆周率
    $ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar  pi 5 3
    2)wordcount词频统计
    a.在用户主目录创建一个wordcount.txt
    $ vi /home/user01/wordcount.txt
    hadoop java
    html java
    linux hadoop
    yarn hadoop

    b.上传到hdfs的input目录下
    $ bin/hdfs dfs -put ~/wordcoun.txt /input/

    c.提交wordcount任务
执行方式
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar  wordcount  /input /output


【报错】:再次执行wordcount会提示输出目录已存在
org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://hadoop.beifeng.com:8020/output already exists

【报错】:unknowHostException  
检查主机映射

【解决办法】
删除hdfs上的输出目录或者重新指定输出目录
【常见错误】:
    1:主机名配置错误或者未配置主机名;
    2:配置的参数【<name>标签对】错误,<value>标签对参数有空格
    3:xml的注释格式错误,标签对未对齐
    4:namenode重复格式化
    5:修改配置参数未保存,进程未重启
    6:

7.配置日志聚合
=======mapred-site.xml=========
**追加到原来配置和后面
<!--指定jobhistory服务的主机及RPC端口号-->
<property>
    <name>mapreduce.jobhistory.address</name>
    <!--配置实际的主机名和端口-->
    <value>[hostname]:10020</value>
</property>

<!--指定jobhistory服务的web访问的主机及RPC端口号-->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>[hostname]:19888</value>
</property>
==============yarn-site.xml=======
<!--启用日志聚合功能-->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
    <!--日志保存时间-->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>86400</value>
</property>
8.停止所有进程重新启动,以便配置文件生效
    1)停止进程
$ sbin/hadoop-daemon.sh stop namenode
$ sbin/hadoop-daemon.sh stop datanode
$ sbin/yarn-daemon.sh stop resourcemanager
$ sbin/yarn-daemon.sh stop nodemanager

    2)启动进程
$ sbin/hadoop-daemon.sh start namenode
$ sbin/hadoop-daemon.sh start datanode
$ sbin/yarn-daemon.sh start resourcemanager
$ sbin/yarn-daemon.sh start nodemanager

    3)启动历史
启动历史服务
sbin/mr-jobhistory-daemon.sh start historyserver

    4)查看守护进程
28904 ResourceManager
28724 NameNode
28808 DataNode
29152 NodeManager
29304 JobHistoryServer
30561 Jps



查看hdfs的web界面
http://hadoop.beifeng.com:50070
*28724 NameNode
*28808 DataNode


查看yarn的web访问界面
http://hadoop.beifeng.com:8088
*28904 ResourceManager
28724 NameNode
28808 DataNode
*29152 NodeManager


查看历史日志的web访问界面
http://hadoop.beifeng.com:19888
28904 ResourceManager
28724 NameNode
28808 DataNode
29152 NodeManager
* 29304 JobHistoryServer