目录
大纲(HADOOP) 2
1. HADOOP 快速入门 3
什么是HADOOP 3
HADOOP产生背景 3
HADOOP在大数据、云计算中的位置和关系 3
国内外HADOOP应用案例介绍 4
国内HADOOP的就业情况分析 5
HADOOP生态圈以及各组成部分的简介 6
分布式系统概述 6
2. HIVE快速入门 7
2.1 Hive基本介绍 7
2.2 Hive的基本使用 8
2.3 数据仓库基本知识 9
3. 数据分析案列演示 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
4. 集群搭建 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生态圈以及各组成部分的简介 |
||
Hive快速入门 |
Hive快速入门 |
Hive基本介绍 |
Hive的使用 |
||
数据仓库基本知识 |
||
数据分析案例演示 |
需求分析 |
案列:定义需求、介绍数据格式 |
数据获取 |
企业中获取数据的几种方式 |
|
将文件直接导入到数据仓库 |
||
将数据库的数据导入到数据仓库(sqoop) |
||
数据处理 |
使用Hive对数进行清洗(ETL的过程) |
|
数据计算 |
使用Hive对数据进行计算 |
|
数据展现 |
将结果数据导出到mysql(sqoop) |
建立起大数据和分布式的宏观概念
1、理解hadoop是什么,用于做什么,大体上怎么用
2、理解hive是什么,用于做什么,大体上怎么用
3、通过一个案例的演示说明,理解数据挖掘系统的基本流程和结构
——分布式文件系统(GFS),可用于处理海量网页的存储
——分布式计算框架MAPREDUCE,可用于处理海量网页的索引计算问题。
1、HADOOP应用于数据服务基础平台建设
2 HADOOP用于用户画像
3、HADOOP用于网站点击流日志数据挖掘
大数据是个复合专业,包括应用开发、软件平台、算法、数据挖掘等,因此,大数据技术领域的就业选择是多样的,但就HADOOP而言,通常都需要具备以下技能或知识:
大数据技术或具体到HADOOP的就业需求目前主要集中在北上广深一线城市,薪资待遇普遍高于传统JAVAEE开发人员,以北京为例:
各组件简介
重点组件:
HDFS:分布式文件系统
MAPREDUCE:分布式运算程序开发框架
HIVE:基于大数据技术(文件系统+运算框架)的SQL数据仓库工具
HBASE:基于HADOOP的分布式海量数据库
ZOOKEEPER:分布式协调服务基础组件
Mahout:基于mapreduce/spark/flink等分布式运算框架的机器学习算法库
Oozie:工作流调度框架
Sqoop:数据导入导出工具
Flume:日志数据采集框架
注:由于大数据技术领域的各类技术框架基本上都是分布式系统,因此,理解hadoop、storm、spark等技术框架,都需要具备基本的分布式系统概念
总结:利用多个节点共同协作完成一项或多项具体业务功能的系统就是分布式系统。
需求:可以实现由主节点将运算任务发往从节点,并将各从节点上的任务启动;
程序清单:
AppMaster
AppSlave/APPSlaveThread
Task
程序运行逻辑流程:
注:本环节主要感受数据分析系统的宏观概念及处理流程,初步理解hadoop等框架在其中的应用环节,不用过于关注代码细节
一个应用广泛的数据分析系统:“web日志数据挖掘”
“网站或APP点击流日志数据挖掘系统”。
一般中型的网站(10W的PV以上),每天会产生1G以上Web日志文件。大型或超大型的网站,可能每小时就会产生10G的数据量。
具体来说,比如某电子商务网站,在线团购业务。每日PV数100w,独立IP数5w。用户通常在工作日上午10:00-12:00和下午15:00-18:00访问量最大。日间主要是通过PC端浏览器访问,休息日及夜间通过移动设备访问较多。网站搜索浏量占整个网站的80%,PC用户不足1%的用户会消费,移动用户有5%会消费。
对于日志的这种规模的数据,用HADOOP进行日志分析,是最适合不过的了。
“Web点击流日志”包含着网站运营很重要的信息,通过日志分析,我们可以知道网站的访问量,哪个网页访问人数最多,哪个网页最有价值,广告转化率、访客的来源信息,访客的终端信息等。
本案例的数据主要由用户的点击行为记录
获取方式:在页面预埋一段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" |
本案例跟典型的BI系统极其类似,整体流程如下:
但是,由于本案例的前提是处理海量数据,因而,流程中各环节所使用的技术则跟传统BI完全不同,后续课程都会一一讲解:
./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 |
经过完整的数据处理流程后,会周期性输出各类统计指标的报表,在生产实践中,最终需要将这些报表数据以可视化的形式展现出来,本案例采用web程序来实现数据可视化
效果如下所示:
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 |
部署图如下:
本案例使用虚拟机服务器来搭建HADOOP集群,所用软件及版本:
最简化配置如下:
vi hadoop-env.sh
# The java implementation to use. export JAVA_HOME=/home/hadoop/apps/jdk1.7.0_51 |
vi core-site.xml
|
vi hdfs-site.xml
|
vi mapred-site.xml
|
vi yarn-site.xml
|
vi salves
hdp-node-01 hdp-node-02 hdp-node-03 |
初始化HDFS
bin/hadoop namenode -format |
启动HDFS
sbin/start-dfs.sh |
启动YARN
sbin/start-yarn.sh |
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 |
1、查看集群状态
命令: hdfs dfsadmin –report
可以看出,集群共有3个datanode可用
也可打开web控制台查看HDFS集群信息,在浏览器打开http://hdp-node-01:50070/
2、上传文件到HDFS
命令: hadoop fs –ls /
命令: hadoop fs -put ./ scala-2.10.6.tgz to /
命令: hadoop fs -get /yarn-site.xml
mapreduce是hadoop中的分布式运算编程框架,只要按照其编程规范,只需要编写少量的业务逻辑代码即可实现一个强大的海量数据并发处理程序
1、需求
从大量(比如T级别)文本文件中,统计出每一个单词出现的总次数
2、mapreduce实现思路
Map阶段:
Reduce阶段:
(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 //定义一个计数器 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); } |
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
$ hadoop jar wordcount.jar cn.itcast.bigdata.mrsimple.WordCountDriver /wordcount/input /wordcount/out
$ hadoop fs –cat /wordcount/out/part-r-00000