快速步入hadoop世界

任务

1.了解HADOOP产生背景及HADOOP生态圈
2.体会HADOOP和大数据、云计算等概念之间的关系
3.了解HADOOP的相关应用案例
4.了解分布式系统的概念

目标

首次接触大数据框架,总体是让学生建立起大数据和分布式的感性认识和宏观概念
1、理解hadoop是什么,它的应用场景什么,大体上怎么用
2、通过一个案例的演示说明,理解数据挖掘系统的基本流程和结构

第一节:HADOOP背景介绍

1.1 什么是HADOOP

Apache Hadoop 为可靠的,可扩展的分布式计算开发开源软件。 Apache Hadoop软件库是一个框架,它允许使用简单的编程模型跨计算机群集分布式处理大型数据集(海量的数据)。 包括这些模块:

上述每个模块有自己独立的功能,而模块之间又有相互的关联。

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

hadoop-logo

1.2 HADOOP产生背景

雏形开始于2002年的Apache的Nutch,Nutch是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题--------“如何解决数十亿网页的存储和索引问题”。

hadoop-author

1.3 HADOOP在大数据、云计算中的位置和关系

​ 云计算是分布式计算、并行计算、网格计算、多核计算、网络存储、虚拟化、负载均衡等传统计算机技术和互联网技术融合发展的产物。借助IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)等业务模式,把强大的计算能力提供给终端用户。

​ 现阶段,云计算的两大底层支撑技术为“虚拟化”和“大数据技术”

​ 而HADOOP则是云计算的PaaS层的解决方案之一,并不等同于PaaS,更不等同于云计算本身。

1.4 国内外HADOOP应用案例介绍

web-log

city-traffic

1.5 国内HADOOP的就业情况分析

zhaopin

大数据方面的就业主要有三大方向:

1.6 HADOOP生态圈以及各组成部分的简介

hadoop-ecosphere

重点组件:

第二节:分布式系统概述

2.1 分布式软件系统

分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。

2.2 常用分布式软件系统举例

Web服务器集群 单台服务器的性能和资源都是有限的,支持的连接并发数都有上限,因此必须采用多服务器集群的方法才能提高连接并发数。连接并发数的容量计算也很容易:

连接并发数= 服务器1并发数+服务器2并发数+……+ 服务器n并发数

当然,我们不能都给每台web服务器分配一个域名地址访问,肯定是同一个域名同一个入口,例如百度后面有成百上千台web服务器,但是我们都是使用 www.baidu.com 一个入口,至于这个入口会自动给我们分配一台web服务器访问,我们不会在意这台web服务器的具体地址是多少,这就是负载均衡器的作用。

distributeSystem-demo

第三节:离线数据分析流程介绍

一个应用广泛的数据分析系统:“web日志数据挖掘”

web-log-demo

3.1 需求分析
3.2 数据处理流程
3.3 项目最终效果

经过完整的数据处理流程后,会周期性输出各类统计指标的报表,在生产实践中,最终需要将这些报表数据以可视化的形式展现出来,本案例采用web程序来实现数据可视化

效果如下所示:

web-log-demo-view

第四节:集群环境搭建

4.1 HADOOP集群规划
主机名(hostname)安装软件运行进程
min1hadoop-2.7.1nameNode、resourceManager
min2hadoop-2.7.1dataNode、nodeManager
min3hadoop-2.7.1dataNode、nodeManager
4.2 HADOOP集群安装步骤
  1. 准备三台Centos6.7 64bit虚拟机,虚拟机名分别为:

    • Centos6.7_min1

    • Centos6.7_min2

    • Centos6.7_min3

      注意 三台机器使用root用户登陆系统

  2. 分别修改虚拟机的主机名(hostname)

    • 在Centos6.7_min1机器中执行修改hostname命令

       

      modify-hostname-new

    • 在Centos6.7_min2机器中执行修改hostname命令

       

      modify-hostname-min2

    • 在Centos6.7_min3机器中执行修改hostname命令

       

      modify-hostname-min3

    • 分别重启机器

  3. 分别配置三台机器的静态ip

    • 规划三台机器的静态ip地址

      Centos6.7_min1192.168.18.64
      Centos6.7_min2192.168.18.65
      Centos6.7_min3192.168.18.66
    • 以centos6.7_min1为例配置静态ip地址,其他机器配置步骤一致

       

      setting-static-ip

    • 分别重启机器

  4. 分别修改三台机器hosts

     

    modify-hosts

  5. 分别为每台机器创建一个名为“hadoop”的用户

     
  6. 分别为每台机器的“hadoop”用户配置sudo权限

     

    setting-sudoer

  7. 关闭每台机器的防火墙

     

    set-iptables

  8. 安装 jdk-7u55-linux-i586.tar.gz (详细步骤在学习linux基础时就讲到,此处略

  9. 三台机器分别切换为hadoop用户并创建一个名为apps的文件夹

     

    下面的步骤都是以hadoop用户来完成

  10. 上传hadoop-2.7.1.tar.gz到Centos6.7_min1机器的/home/hadoop/app目录下

  11. 解压hadoop-2.7.1.tar.gz安装包

     
  12. 设置hadoop-env.sh配置文件

     

    set-hadoop-env

  13. 设置core-site.xml配置文件

     

    set-core-site

  14. 设置hdfs-site.xml配置文件(该文件默认即可,今天就不用配置此文件了)

  15. 设置mapred-site.xml配置文件

     

    set-mapred-site

  16. 设置yarn-site.xml配置文件

     

    set-yarn-site

  17. 设置slaves配置文件

     

    set-slaves

  18. 配置Centos6.7min1到Centos6.7min2、Centos6.7_min3的免密登陆

    1. 在Centos6.7_min1中生成密钥对

       

      run-ssh-keygen

    2. 将公钥分别拷贝到要min2和min3机器中

       

      copy-key-to-ohter

  19. 将apps目录下的所有文件分别拷贝到Centos6.7min2、Centos6.7min3

     
  20. 分别在三台机器上将hadoop添加到环境变量

     

    set-profile

4.3 小案例演示

第五节:集群使用效果演示

5.1 HDFS的基本使用
  1. 打开web控制台查看HDFS集群信息,在浏览器打开[http://192.168.18.64:50070/]

    hadoop-web

  2. 使用命令查看:hdfs dfsadmin -report

5.2 MAPREDUCE基本使用

上面演示mapreduce的demo是hadoop提供的,下面演示一个使用代码编写一个wordcount的例子

  1. 需求

    从大量(比如T级别)文本文件中,统计出每一个单词出现的总次数

  2. 思路

    Map阶段:

    1. 从HDFS的源数据文件中逐行读取数据
    2. 将每一行数据切分出单词
    3. 为每一个单词构造一个键值对(单词,1)
    4. 将键值对发送给reduce

    Reduce阶段:

    1. 接收map阶段输出的单词键值对
    2. 将相同单词的键值对汇聚成一组
    3. 对每一组,遍历组中的所有“值”,累加求和,即得到每一个单词的总次数
    4. 将(单词,总次数)输出到HDFS的文件中
  3. 代码实现

    • 编写mapper类

       

    • 编写reducer类

       

    • 编写主类,来描述job并提交job

       
  4. 程序打包

    第一步

    wordcount-step1

    第二步

    wordcount-step2

    第三步

    wordcount-step3

  5. 准备测试数据

    wordcount-content

    将wordcount_content.txt文件上传到hdfs

     
  6. 将程序jar包上传到集群的任意一台服务器上

  7. 使用命令执行wordcount程序

     
  8. 查看处理结果

    wordcount-result