day06_BigData渐进学习_aclear_fire

—-关于hadoop.apache.org 官方事务的使用分析: common一般是放置一些公共可供使用和下载的框架等。 Ambari 图形化的hadoop安装版本。商业化做一下cdh 一个商业化、方便操作的hadoop版本。 Spark 广义 hadoop.apache.org 2.2.0 是在2015-2016年比较多人用的。 开发的时候,数据分析 只需要我们进行嵌入的一部分用户的API即可。所以官网的API http://hadoop.apache.org/docs/r2.6.5/api/index.html 接口是很多doc但建起来的 知道用户接口,把需要的业务逻辑嵌入进去就好。 但是底部的 configuration——表示里面的配置参数,因为数据分析一点API加许多的配置参数进行处理的。但是好在 大部分的值用默认的惨呼就好,用的过程中会说,但是参数配置大全——用的的时候再拿来用即可。 —-典型的推荐系统架构,应用的实时计算——看下当时讲的架构图即可 添加一:kafka? 进行实时处理统计当前的最新动态. 添加二:<有些东西只是sql统计不出来,所以要用 深度学习,mahout<根据算法得到的结果,也是得到一些协同过滤算法得到的结果>>sql->HIVE仓库; 另一个通过mahout->协同算法得推荐数据。 综上 都要到,推荐原料中,成立为一个表。 [caption id=”attachment_1107” align=”aligncenter” width=”1422”]dream 推荐系统架构+实时操作[/caption] —-Hadoop集群框架搭建 hdfs:name nodename datanode datanode datanode … yarn: resourcenode nodemanager nodemanage15r nodemanager …. —-注意hadoop编译,由于hadoop包<原本应该是跨平台的>下载下来之后还需要,利用对应平台的解压缩命令还有maven tar c java编译库都要和操作系统的存在形式是一样的。 注意:如果只是小小的想要使用 servlet,给hadoop一个内置的netty即可。 PS.:file:// hdfs:// 注意哦统一资源定位符,对应的协议。 —-关于官网下载的hadoop源码包,因为官网下载下来的都是源码包。 然而hadoop是maven的项目,所以需要在maven上进行下载相应的包、并编译, 利用ant进行打包。dream

注意:官网上面有:hadoop.src.tar.gz① hadoop.tar.gz② 其中①是源码包用于进行图片中“hadoop编译.docx”进行tar.gz编译 share/hadoop/hdfs share下方是jar包 ---eclipse上面导入jar包需要导入:share/hadoop/hdfs common、hdfs下面的:jar+lib当中的jar到一个新建的eclipse项目中去。——完成就是hdfs的jar包了。 1.以上hdfs的一些在eclipse上通过hdfs api运行的类似于客户端的操作——称之为HDFS应用开发篇。

_hdfs在生产应用中主要是客户端的开发,其核心步骤是从hdfs提供的api中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS__上的文件_

详情见:7.HDFS的java操作。 以上是通过centos当做服务器(所以你会看到,有protobuf当做序列化工具); windows上eclipse做为客户端调用api学习使用的客户端。(我们当前就是使用的这样一种开发学习方式。)

2.window下开发的说明
建议在linux下进行hadoop应用的开发,不会存在兼容性问题。如在window上做客户端应用开发,需要设置以下环境:
·在windows的某个目录下解压一个hadoop的安装包
·将安装包下的lib和bin目录用对应windows版本平台编译的本地库替换
·在window系统中配置HADOOP_HOME指向你解压的安装包
·在windows系统的path变量中加入hadoop的bin目录
(注意,也就是最近一张图片中windows7编译出来的zip包中bin/lib替换安装包中的bin/lib即可!)

(注意:我们设置HADOOP_HOME+path + windows10编译出来的 bin+lib 替换掉挂网的东西)

/**
*
* 客户端去操作hdfs时,是有一个用户身份的
* 默认情况下,hdfs客户端api会从jvm中获取一个参数来作为自己的用户身份:-DHADOOP_USER_NAME=hadoop
*
* 也可以在构造客户端fs对象时,通过参数传递进去
* @author
/
public class HdfsClientDemo {
FileSystem fs = null;
Configuration conf = null;
@Before
public void init() throws Exception{
conf = new Configuration();
conf.set(“fs.defaultFS”,”hdfs://aclear1:9000”);
//这个是本地的对象
fs = FileSystem.get(conf);
// fs = FileSystem.get(new URI(“hdfs://aclear1:9000”), conf,”hadoop”);
//拿到一个文件系统操作的客户端实例对象
/*fs = FileSystem.get(conf);*/
//可以直接传入 uri和用户身份
}
@Test
public void testUpload() throws Exception {
fs.copyFromLocalFile(new Path(“H:/access.log”), new Path(“/accessFromLocal.log.copy”));
fs.close();
// Thread.sleep(2000);
// fs.copyFromLocalFile(new Path(“G:/access.log”), new Path(“/access.log.copy”));
// fs.close();
}
@Test
public void testDownload() throws Exception {
fs.copyToLocalFile(new Path(“/access.log.copy”), new Path(“d:/“));
fs.close();
}
//注意环境问题是主要出在 bin的上面!!!
//1.配置好 HADOOP_HOME
//2.搞好 bin lib就好了。(即平台相关性的替换,用在windows上的相关库!相关exe!)
//综上所述:解决空格问题一共有两种办法,一个是想办法在环境变量设置的时候用特殊字符给他替换掉,另外一个就
//是在写代码的时候 用双引号给有空格的路径给它引起来就OK了
//目录”program files”同时还拥有一个8.3规范的”PROGRA~1”短名称;

目录 课程大纲(HADOOP快速入门)…………………………………………………………………………… 2

  1. HADOOP 快速入门………………………………………………………………………………………….. 3

什么是HADOOP…………………………………………………………………………………………… 3 HADOOP产生背景……………………………………………………………………………………….. 3 HADOOP在大数据、云计算中的位置和关系……………………………………………………… 3 国内外HADOOP应用案例介绍……………………………………………………………………….. 4 国内HADOOP的就业情况分析……………………………………………………………………….. 5 HADOOP生态圈以及各组成部分的简介……………………………………………………………. 6 分布式系统概述………………………………………………………………………………………….. 6

  1. HIVE快速入门………………………………………………………………………………………………… 7

2.1 Hive基本介绍…………………………………………………………………………………………. 7 2.2 Hive的基本使用……………………………………………………………………………………… 8 2.3 数据仓库基本知识………………………………………………………………………………….. 9

  1. 数据分析案列演示………………………………………………………………………………………… 10

3.1 需求分析…………………………………………………………………………………………….. 10 3.1.1案例名称…………………………………………………………………………………….. 10 3.1.2 案例需求描述……………………………………………………………………………… 10 3.1.3 web点击流日志的数据格式……………………………………………………………. 10 3.1.4 分析指标……………………………………………………………………………………. 11 3.1.5 统计结果数据可视化…………………………………………………………………….. 11 3.2 数据来源分析………………………………………………………………………………………. 12 3.2.1 企业中获取数据的几种方式…………………………………………………………… 12 3.2.2 数据采集……………………………………………………………………………………. 12 3.3 数据处理流程………………………………………………………………………………………. 13 数据预处理/加载入库…………………………………………………………………………… 13 使用Hive做数据ETL…………………………………………………………………………….. 14 使用Hive运算业务指标………………………………………………………………………… 16 将结果数据导出到mysql(sqoop)…………………………………………………………. 17 结果展现——数据可视化………………………………………………………………………. 17

  1. 集群搭建…………………………………………………………………………………………………….. 18

4.1 HADOOP集群搭建…………………………………………………………………………………. 18 4.1.1集群简介:………………………………………………………………………………….. 18 4.1.2服务器准备………………………………………………………………………………….. 18 4.1.3网络环境准备………………………………………………………………………………. 18 4.1.4服务器系统设置……………………………………………………………………………. 18 4.1.5 Jdk环境安装………………………………………………………………………………… 19 4.1.6 HADOOP安装部署…………………………………………………………………………. 19 4.1.7 启动集群……………………………………………………………………………………. 21 4.1.8 测试………………………………………………………………………………………….. 21 4.2 Hive搭建……………………………………………………………………………………………… 22 Hive的配置安装………………………………………………………………………………….. 22 Hive的使用………………………………………………………………………………………… 23 Hive运行测试……………………………………………………………………………………… 23

课程大纲(HADOOP快速入门)

HADOOP快速入门

HADOOP快速入门

HADOOP产生背景

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

国内外HADOOP应用案例介绍

国内HADOOP的就业情况分析及课程大纲介绍

分布式系统概述

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

Hive快速入门

Hive快速入门

Hive基本介绍

Hive的使用

数据仓库基本知识

数据分析案例演示

需求分析

案列:定义需求、介绍数据格式

数据获取

企业中获取数据的几种方式

将文件直接导入到数据仓库

将数据库的数据导入到数据仓库(sqoop)

数据处理

使用Hive对数进行清洗(ETL的过程)

数据计算

使用Hive对数据进行计算

数据展现

将结果数据导出到mysql(sqoop)

    学习目标: 第一天接触具体的大数据框架,总目标是让学习者建立起大数据和分布式的宏观概念 1、理解hadoop是什么,用于做什么,大体上怎么用 2、理解hive是什么,用于做什么,大体上怎么用 3、通过一个案例的演示说明,理解数据挖掘系统的基本流程和结构    

1. HADOOP背景介绍

1.1 什么是HADOOP

  1. HADOOP是apache旗下的一套开源软件平台
  2. HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理
  3. HADOOP的核心组件有
    1. HDFS(分布式文件系统)
    2. YARN(运算资源调度系统)
    3. MAPREDUCE(分布式运算编程框架)
  4. 广义上来说,HADOOP通常是指一个更广泛的概念——HADOOP生态圈

1.2 HADOOP产生背景

  1. HADOOP最早起源于Nutch。Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题。
  2. 2003年、2004年谷歌发表的两篇论文为该问题提供了可行的解决方案

——分布式文件系统(GFS),可用于处理海量网页的存储 ——分布式计算框架MAPREDUCE,可用于处理海量网页的索引计算问题。

  1. Nutch的开发人员完成了相应的开源实现**HDFS**和MAPREDUCE,并从Nutch中剥离成为独立项目HADOOP,到2008年1月,HADOOP成为Apache顶级项目,迎来了它的快速发展期。

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

  1. 云计算是分布式计算、并行计算、网格计算、多核计算、网络存储、虚拟化、负载均衡等传统计算机技术和互联网技术融合发展的产物。借助IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)等业务模式,把强大的计算能力提供给终端用户。
  1. 现阶段,云计算的两大底层支撑技术为“虚拟化”和“大数据技术
  1. 而HADOOP则是云计算的PaaS层的解决方案之一,并不等同于PaaS,更不等同于云计算本身。

1.4 国内外HADOOP应用案例介绍

1**、HADOOP**应用于数据服务基础平台建设 2/HADOOP**用于用户画像 3、HADOOP用于网站点击流日志数据挖掘**

1.5 国内HADOOP的就业情况分析

  • HADOOP就业整体情况
  1. 大数据产业已纳入国家十三五规划
  2. 各大城市都在进行智慧城市项目建设,而智慧城市的根基就是大数据综合平台
  3. 互联网时代数据的种类,增长都呈现爆发式增长,各行业对数据的价值日益重视
  4. 相对于传统JAVAEE技术领域来说,大数据领域的人才相对稀缺
  5. 随着现代社会的发展,数据处理和数据挖掘的重要性只会增不会减,因此,大数据技术是一个尚在蓬勃发展且具有长远前景的领域
  • HADOOP就业职位要求

大数据是个复合专业,包括应用开发、软件平台、算法、数据挖掘等,因此,大数据技术领域的就业选择是多样的,但就HADOOP而言,通常都需要具备以下技能或知识:

  1. HADOOP分布式集群的平台搭建
  2. HADOOP分布式文件系统HDFS的原理理解及使用
  3. HADOOP分布式运算框架MAPREDUCE的原理理解及编程
  4. Hive数据仓库工具的熟练应用
  5. Flume、sqoop、oozie等辅助工具的熟练使用
  6. Shell/python等脚本语言的开发能力
  • HADOOP相关职位的薪资水平

大数据技术或具体到HADOOP的就业需求目前主要集中在北上广深一线城市,薪资待遇普遍高于传统**JAVAEE**开发人员,以北京为例:

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

各组件简介 重点组件: HDFS:分布式文件系统 MAPREDUCE:分布式运算程序开发框架 HIVE:基于大数据技术(文件系统+运算框架)的SQL数据仓库工具 HBASE:基于HADOOP的分布式海量数据库 ZOOKEEPER**:分布式协调服务基础组件** Mahout:基于mapreduce/spark/flink等分布式运算框架的机器学习算法库 Oozie:工作流调度框架 Sqoop:数据导入导出工具 Flume:日志数据采集框架

2 分布式系统概述

_注:由于大数据技术领域的各类技术框架基本上都是分布式系统,因此,理解hadoop、storm、spark__等技术框架,都需要具备基本的分布式系统概念_

2.1 分布式软件系统(Distributed Software Systems)

  • 该软件系统会划分成多个子系统或模块,各自运行在不同的机器上,子系统或模块之间通过网络通信进行协作,实现最终的整体功能
  • 比如分布式操作系统、分布式程序设计语言及其编译(解释)系统、分布式文件系统和分布式数据库系统等。

2.2 分布式软件系统举例:solrcloud

  1. 一个solrcloud集群通常有多台solr服务器
  2. 每一个solr服务器节点负责存储整个索引库的若干个shard(数据分片)
  3. 每一个shard又有多台服务器存放若干个副本互为主备用
  4. 索引的建立和查询会在整个集群的各个节点上并发执行
  5. solrcloud集群作为整体对外服务,而其内部细节可对客户端透明

总结:利用多个节点共同协作完成一项或多项具体业务功能的系统就是分布式系统。

2.3 分布式应用系统模拟开发

需求:可以实现由主节点将运算任务发往从节点,并将各从节点上的任务启动; 程序清单: AppMaster AppSlave/APPSlaveThread Task 程序运行逻辑流程:

3. 离线数据分析流程介绍

_注:本环节主要感受数据分析系统的宏观概念及处理流程,初步理解hadoop__等框架在其中的应用环节,不用过于关注代码细节_ 一个应用广泛的数据分析系统:“web日志数据挖掘”

3.1 需求分析

3.1.1 案例名称

“网站或。

3.1.2 案例需求描述

“Web点击流日志”包含着网站运营很重要的信息,通过日志分析,我们可以知道网站的访问量,哪个网页访问人数最多,哪个网页最有价值,广告转化率、访客的来源信息,访客的终端信息等。

3.1.3 数据来源

本案例的数据主要由用户的点击行为记录 获取方式:在页面预埋一段js程序,为页面上想要监听的标签绑定事件,只要用户点击或移动到标签,即可触发ajax请求到后台servlet程序,用log4j记录下事件信息,从而在web服务器(nginx、tomcat等)上形成不断增长的日志文件。 形如:

58.215.204.118 - - [18/Sep/2013:06:51:35 +0000] “GET /wp-includes/js/jquery/jquery.js?ver=1.10.2 HTTP/1.1” 304 0 “http://blog.fens.me/nodejs-socketio-chat/“ “Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0”

3.2 数据处理流程

3.2.1 流程图解析

本案例跟典型的BI系统极其类似,整体流程如下: 但是,由于本案例的前提是处理海量数据,因而,流程中各环节所使用的技术则跟传统BI完全不同,后续课程都会一一讲解:

  • 数据采集:定制开发采集程序,或使用开源框架FLUME
  • 数据预处理:定制开发mapreduce程序运行于hadoop集群
  • 数据仓库技术:基于hadoop之上的Hive
  • 数据导出:基于hadoop的sqoop数据导入导出工具
  • 数据可视化:定制开发web程序或使用kettle等产品
  • 整个过程的流程调度:hadoop生态圈中的oozie工具或其他类似开源产品

3.2.2 项目技术架构图

3.2.3 项目相关截图(感性认识,欣赏即可)

  1. Mapreudce程序运行
  1. 在Hive中查询数据
  1. 将统计结果导入mysql

./sqoop export —connect jdbc:mysql://localhost:3306/weblogdb —username root —password root —table t_display_xx —export-dir /user/hive/warehouse/uv/dt=2014-08-03

3.3 项目最终效果

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

4. 集群搭建

4.1 HADOOP集群搭建

4.1.1集群简介

HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起 HDFS集群: 负责海量数据的存储,集群中的角色主要有 NameNode / DataNode YARN集群: 负责海量数据运算时的资源调度,集群中的角色主要有 ResourceManager /NodeManager _(那mapreduce是什么呢?它其实是一个应用程序开发包)_ 本集群搭建案例,以5节点为例进行搭建,角色分配如下:

hdp-node-01 NameNode SecondaryNameNode hdp-node-02 ResourceManager hdp-node-03 DataNode NodeManager hdp-node-04 DataNode NodeManager hdp-node-05 DataNode NodeManager

部署图如下:

4.1.2服务器准备

本案例使用虚拟机服务器来搭建HADOOP集群,所用软件及版本:

  • Vmware 11.0
  • Centos 5 64bit

4.1.3网络环境准备

  • 采用NAT方式联网
  • 网关地址:168.33.1
  • 3个服务器节点IP地址:168.33.101、192.168.33.102、192.168.33.103
  • 子网掩码:255.255.0

4.1.4服务器系统设置

  • 添加HADOOP用户
  • 为HADOOP用户分配sudoer权限
  • 同步时间
  • 设置主机名
    • hdp-node-01
    • hdp-node-02
    • hdp-node-03
  • 配置内网域名映射:
    • 168.33.101 hdp-node-01
    • 168.33.102 hdp-node-02
    • 168.33.103 hdp-node-03
  • 配置ssh免密登陆
  • 配置防火墙

4.1.5 Jdk环境安装

  • 上传jdk安装包
  • 规划安装目录 /home/hadoop/apps/jdk_1.7.65
  • 解压安装包
  • 配置环境变量 /etc/profile

4.1.6 HADOOP安装部署

  • 上传HADOOP安装包
  • 规划安装目录 /home/hadoop/apps/hadoop-2.6.1
  • 解压安装包
  • 修改配置文件 $HADOOP_HOME/etc/hadoop/

1最简化配置如下: vi hadoop-env.sh

# The java implementation to use. export JAVA_HOME=/home/hadoop/apps/jdk1.7.0_51

vi core-site.xml

fs.defaultFS hdfs://aclear1:9000 hadoop.tmp.dir /home/Hadoop/hdpdata

vi hdfs-site.xml

dfs.replication 2 dfs.secondary.http.address hdp-node-01:50090 </configuration>

  vi  mapred-site.xml
mapreduce.framework.name yarn

vi yarn-site.xml

yarn.resourcemanager.hostname aclear1 yarn.nodemanager.aux-services mapreduce_shuffle 对应放置在 2 3 4上

所以我们 由以上的配置得出一个问题<在此之前先配置下面的东西>: Namenode 以及 resourcemanager 都已经出现了。对应的集群子服务器并没有出现:所以 其实aclear1 我们已经写死。其它的子服务器会按照目前启动的服务器自行装载: Aclear1通过: Hadoop-daemon.sh start namenode //启动namenode服务器 //注意 jetty是在 50070<端口有个网页可以看到对应服务器配合的 情况有多少可用东西。> JPS Aclear2通过: Hadoop-daemon.sh start datanode //启动当做datanode //原理: 因为hadoop的配置文件已经配置的完全一致了,所以可以相互握手

—-2HDFS进行格式化—- <因为这个是建立在 Linux物理目录之上的,也就是说 HDFS是格式化建立一个逻辑文件层,分块 进行大型数据、文件集的处理> Source /etc/profile 人机交互<脚本执行进行实现> 必须注意:学会使用.log日志 查找、发现错误:

问题:下面 vi /etc/Hadoop/salves //纯粹是给自动化启动脚本用的!——apps/Hadoop/../start-all.sh 注意这个是 aclear2 都必须是主机名称!

Aclear2 Aclear3 Aclear4

Start-dfs.sh //只在一个namenode 服务器去做即可 //别忘了配置hadoop用户的免密登录—— ssh-keygen -t rsa Ssh-copy-id aclear2 … P.S.:start-all.sh == start-dfs.sh && start-yarn.sh //配置 secondary namenode //在hdfs—

注意: 深入理解,查看对应的 启动方式得知: Ssh aclear1 Hadoop-daemon.sh start namenode 对比:yarn-daemon.sh start resourcemanager 这样启动

//动态上线  动态下限:一台机器 三个副本:上方副本是:2  所以每个数据都是有2个副本! //我们安装集群最常见问题:  权限不统一问题!——所以最好用sudo来进行权限的获取!!!   //配置文件少 或 写错文字  //日志文件会看到! 对了 //ssh 免密登录没配好,然后连接超时 —— 没启动起来! Unknown host——统统用主机名!不用IP!  

4.1.7 启动集群

初始化HDFS 生成namenode初始目录,对应的账本、自己需要的框架结构

hadoop namenode -format

启动HDFS

sbin/start-dfs.sh

启动YARN

sbin/start-yarn.sh

测试:http://192.168.78.201:50090/status.html 这个放置在 hdfs-site里面可以自定义端口!

4.1.8 测试

1、上传文件到HDFS

从本地上传一个文本文件到hdfs的/wordcount/input目录下

[HADOOP@hdp-node-01 ~]$ HADOOP fs -mkdir -p /wordcount/input //父类也可以创建出来 [HADOOP@hdp-node-01 ~]$ HADOOP fs -put /home/HADOOP/somewords.txt /wordcount/input

2、运行一个mapreduce程序

在HADOOP安装目录下,运行一个示例mr程序

cd $HADOOP_HOME/share/hadoop/mapreduce/ hadoop jar mapredcue-example-2.6.1.jar wordcount /wordcount/input /wordcount/output //注意 第一个:hadoop jar 启动share文件夹当中,mapreduce的jar包的wordcount函数:两个参数:第一个是需要同级的文件夹在哪 第二个:需要输出结果到那里去并且不能存在

5 集群使用初步

5.1 HDFS使用

1、查看集群状态 命令: hdfs dfs admin –report 可以看出,集群共有3个datanode可用 也可打开web控制台查看HDFS集群信息,在浏览器打开http://hdp-node-01:50070/ 2、上传文件到HDFS

  • 查看HDFS中的目录信息

命令: hadoop fs –ls /

  • 上传文件

命令: hadoop fs -put ./ scala-2.10.6.tgz to /

  • 从HDFS下载文件

命令: hadoop fs -get /yarn-site.xml //注意!:1.在环境变量中配置HADOOP_HOME 2.bin .和lib 替换为已经在win10用c编译好的bin 和 lib

5.2 MAPREDUCE使用

mapreduce是hadoop中的分布式运算编程框架,只要按照其编程规范,只需要编写少量的业务逻辑代码即可实现一个强大的海量数据并发处理程序

5.2.1 Demo开发——wordcount

1、需求 从大量(比如T级别)文本文件中,统计出每一个单词出现的总次数 2、mapreduce实现思路 Map阶段:

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

    Reduce阶段:

  5. 接收map阶段输出的单词键值对

  6. 将相同单词的键值对汇聚成一组
  7. 对每一组,遍历组中的所有“值”,累加求和,即得到每一个单词的总次数
  8. 将(单词,总次数)输出到HDFS的文件中
  • 具体编码实现

(1)定义一个mapper类

//首先要定义四个泛型的类型 //keyin: LongWritable valuein: Text //keyout: Text valueout:IntWritable public class WordCountMapper extends Mapper{ //map方法的生命周期: 框架每传一行数据就被调用一次 //key : 这一行的起始点在文件中的偏移量 //value: 这一行的内容 @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { //拿到一行数据转换为string String line = value.toString(); //将这一行切分出各个单词 String[] words = line.split(“ “); //遍历数组,输出<单词,1> for(String word:words){ context.write(new Text(word), new IntWritable(1)); } } }

(2)定义一个reducer类

     //生命周期:框架每传递进来一个kv 组,reduce方法被调用一次 @Override protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { //定义一个计数器 int count = 0; //遍历这一组kv的所有v,累加到count中 for(IntWritable value:values){ count += value.get(); } context.write(key, new IntWritable(count)); } }

(3)定义一个主类,用来描述job并提交job

public class WordCountRunner { //把业务逻辑相关的信息(哪个是mapper,哪个是reducer,要处理的数据在哪里,输出的结果放哪里。。。。。。)描述成一个job对象 //把这个描述好的job提交给集群去运行 public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job wcjob = Job.getInstance(conf); //指定我这个job所在的jar包 // wcjob.setJar(“/home/hadoop/wordcount.jar”); wcjob.setJarByClass(WordCountRunner.class); wcjob.setMapperClass(WordCountMapper.class); wcjob.setReducerClass(WordCountReducer.class); //设置我们的业务逻辑Mapper类的输出key和value的数据类型 wcjob.setMapOutputKeyClass(Text.class); wcjob.setMapOutputValueClass(IntWritable.class); //设置我们的业务逻辑Reducer类的输出key和value的数据类型 wcjob.setOutputKeyClass(Text.class); wcjob.setOutputValueClass(IntWritable.class); //指定要处理的数据所在的位置 FileInputFormat.setInputPaths(wcjob, “hdfs://hdp-server01:9000/wordcount/data/big.txt”); //指定处理完成之后的结果所保存的位置 FileOutputFormat.setOutputPath(wcjob, new Path(“hdfs://hdp-server01:9000/wordcount/output/“)); //向yarn集群提交这个job boolean res = wcjob.waitForCompletion(true); System.exit(res?0:1); }

5.2.2 程序打包运行

  1. 将程序打包
  2. 准备输入数据

vi /home/hadoop/test.txt

Hello tom Hello jim Hello ketty Hello world Ketty tom

在hdfs上创建输入数据文件夹: hadoop fs mkdir -p /wordcount/input 将words.txt上传到hdfs上 hadoop fs –put /home/hadoop/words.txt /wordcount/input

  1. 将程序jar包上传到集群的任意一台服务器上
  1. 使用命令启动执行wordcount程序jar包

$ hadoop jar wordcount.jar cn.itcast.bigdata.mrsimple.WordCountDriver /wordcount/input /wordcount/out

  1. 查看执行结果

$ hadoop fs –cat /wordcount/out/part-r-00000 HADOOP(hdfs、MAPREDUCE、yarn) 元老级大数据处理技术框架,擅长离线数据分析 Zookeeper 分布式协调服务基础组件 Hbase 分布式海量数据库,离线分析和在线业务通吃 Hive sql 数据仓库工具,使用方便,功能丰富,基于MR延迟大 Sqoop数据导入导出工具 Flume数据采集框架 一般中型的网站(10W的PV以上),每天会产生1G以上Web日志文件。大型或超大型的网站,可能每小时就会产生10G的数据量。 具体来说,比如某电子商务网站,在线团购业务。每日PV数100w,独立IP数5w。用户通常在工作日上午10:00-12:00和下午15:00-18:00访问量最大。日间主要是通过PC端浏览器访问,休息日及夜间通过移动设备访问较多。网站搜索浏量占整个网站的80%,PC用户不足1%的用户会消费,移动用户有5%会消费。 对于日志的这种规模的数据,用HADOOP进行日志分析,是最适合不过的了。

(っ•̀ω•́)っ✎⁾⁾ 坚持技术学习、内容输出与分享,您的支持将鼓励我继续创作!(*/ω\*)
( • ̀ω•́ )✧如有疑问或需要技术讨论,请留言或发邮件到 aclearzhang@qq.com.(*・ω< ) 
  • 本文作者:: AClearZhang
  • 本文链接:: 1103.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!