一、回顾
-》Hadoop启动方式
-》单个进程
sbin/hadoop-daemon.sh start namenode/datanode
sbin/yarn-daemon.sh start resourcemanager/nodemanager
-》分别启动hdfs与yarn
sbin/start-dfs.sh
sbin/start-yarn.sh
-》统一启动hdfs与yarn
sbin/start-all.sh
-》jobhistoryserver
sbin/mr-
配置:mapred-site.xml
-》日志聚集
配置:yarn-site.xml
-》ssh免密钥登录
-》生成自己的秘钥
ssh-keygen -t rsa
-》把公钥发送给需要登录的机器
ssh-copy-id hostname
-》安全模式
-》不允许读写
-》bin/hdfs dfsadmin -safemode leave|enter|wait|status
-》MapReduce
-》开发环境的搭建
-》JDK
-》下载安装
-》修改环境变量
/etc/profile
JAVA_HOME
PATH
source /etc/profile
-》maven
-》下载解压
-》修改配置文件
-》本地仓库
-》远程仓库的镜像源地址
-》配置环境变量
M2_HOME
PATH
source /etc/profile
-》eclipse
-》Linux:./eclipse
-》配置Maven
-》修改快捷键
-》MapReduce:分布式计算模型,所有的数据传输通过keyvalue的格式
-》input:负责数据的读取,默认读hdfs上的文件
格式转换:
key:每一行的偏移量
value:每一行的内容
一行一个keyvalue
-》map:根据分片的大小,启动相应的map task
一个数据块:128M = 一个分片:splits = 1 个map task进行处理
-》map task每处理一条keyvalue就会调用一次map
-》根据相应的实际需求,生成新的keyvalue
-》context上下文对象负责整个MapReduce的上下文数据的承接
context.write(key,value)
-》shuffle:洗牌,将拥有相同key的value合并
输出:
key,{value1,value2,value3……}
1,……
2,……
3,……
-》合并:分组
-》分区(默认按照key的 hash值取余的方式)、排序
-》reduce:合并,将每条不同的 key调用reduce方法进行处理
-》output:输出,默认到hdfs,输出keyvalue格式的结果
-》wordcount
hadoop hive hbase
hadoop spark
spark
-》input:
输出:
19,hadoop hive hbase
30,hadoop spark
35,spark
-》map:
map方法进行处理
-》对value进行分割
-》取到每个单词
-》封装keyvalue进行输出
输出:
hadoop,1
hive,1
hbase,1
hadoop,1
spark,1
spark,1
-》shuffle:分区、排序、分组
-》输出:
hadoop,{1,1}
hbase,{1}
hive,{1}
spark,{1,1}
-》reduce:调用reduce方法
-》reduce方法进行处理
-》将迭代器中的 值累加即可
-》封住keyvalue
-》输出:
hadoop,2
hbase,1
hive,1
spark,2
-》output:写入hdfs
key \t value
二、MapReduce开发模板
-》Driver类:驱动类
-》继承configured类,实现Tools接口
-》main
-》run
-》Mapper类:map task需要调用的对象,只要负责拆分任务
-》map
-》Reduce类:reduce task需要调用的对象,负责合并
-》reduce
三、Hadoop中的数据类型
-》java:String、Int、double、long、null
-》hadoop:Text、Intwritable、doublewritable、longwritable、nullwritable
-》自定义数据类型:实现writablecomparable接口
-》定义成员变量
-》set / get
-》构造方法
-》toString
-》hash
-》equals
-》write:序列化方法
-》readfiled:反序列化
四、网站日志分析
请求网页链接:https://item.taobao.com/item.htm?
请求参数:key=value &
spm=a217h.9580640.831217.2.4ff525aaImnVde&
id=562109381525&
scm=1007.12144.81309.70043_0&
pvid=4dd29b32-efbd-4342-be4c-f2d501dbd2ba&
utparam=%7B%22x_object_type%22%3A%22item%22%2C%22x_object_id%22%3A562109381525%7D
-》常见的业务分析
PV:网页浏览量:url
每访问一个网页就是一个pv,相同网页累计
UV:独立访客数:uuid,guid
总共有多少个人访问了,同一个人的访问计一次
VV:访客的访问次数
每个时段访问的次数
IP:独立IP数
某个时段内ip的总个数
-》基于多维度的组合分析
-》时间维度:统计每天的pv数、每小时的pv数
-》地域维度:上海的pv数,北京pv数
-》组合维度:每天上海的pv数
-》需求:每个城市的pv数 = 每个单词出现的次数
结果:
key:城市
value:pv数
mapreduce:
-》input:读hdfs文件,
默认key是偏移量,value是行的内容
-》map:
map:非法值进行过滤
输出:
城市id 1
-》shuffle:
城市id 1
-》reduce:
输入:
城市id {1,1,1……}
reduce:将value中的集合进行求和
输出:
城市id pv数
-》output:
-》每个城市的uv
城市id uv数
-》map
key : 城市id
value:guid
-》shuffle
城市id ,{guid1,guid1,guid2,guid3……}
上海,{user1,user1,user1,user2,user3……}
-》reduce:
对每个城市的value中的集合去重,求长度
三、MapReduce过程总结
-》编程:Driver、Map、Reduce
-》过程
input、map、shuffle、reduce、output
-》难点:
合理的设计map与reduce的功能与输入输出的类型
map:负责任务的拆分,数据的过滤
-》非法值过滤
-》字段的过滤
-》字段的转换
dd/MMM/YYYY HH:mm:ss -> 2015-08-28 18:10:00
shuffle:分区、排序、分组
分区:决定我当前这条keyvalue最终由哪个reduce进行处理
排序:默认会按照字典顺序进行排序
分组:将拥有相同key的value进行合并
reduce:合并
-》求和
-》每天、每小时、每个地区、每种浏览器
-》每=分组
-》YARN执行程序的过程
1、客户端向resourcemanager提交任务请求
bin/yarn jar ……
log:connect resourcemanager: hostname:8032
2、ResourceManager会随机选择一台NodeManager(app manager)启动application Master
3、APP Master向ResourceManager 请求申请资源
4、APP Manager接收请求,让resource schedule分配资源Container
5、APP Master拿到资源信息及相应的指令、在其他所有机器上分配资源信息
6、NodeManager接收资源信息及指令,启动Map task及reduce task
7、每个NodeManager执行完成任务向APP Master汇报执行结果
8、APP Master会向APP Manager反馈执行结果
-》Hadoop启动方式
-》单个进程
sbin/hadoop-daemon.sh start namenode/datanode
sbin/yarn-daemon.sh start resourcemanager/nodemanager
-》分别启动hdfs与yarn
sbin/start-dfs.sh
sbin/start-yarn.sh
-》统一启动hdfs与yarn
sbin/start-all.sh
-》jobhistoryserver
sbin/mr-
配置:mapred-site.xml
-》日志聚集
配置:yarn-site.xml
-》ssh免密钥登录
-》生成自己的秘钥
ssh-keygen -t rsa
-》把公钥发送给需要登录的机器
ssh-copy-id hostname
-》安全模式
-》不允许读写
-》bin/hdfs dfsadmin -safemode leave|enter|wait|status
-》MapReduce
-》开发环境的搭建
-》JDK
-》下载安装
-》修改环境变量
/etc/profile
JAVA_HOME
PATH
source /etc/profile
-》maven
-》下载解压
-》修改配置文件
-》本地仓库
-》远程仓库的镜像源地址
-》配置环境变量
M2_HOME
PATH
source /etc/profile
-》eclipse
-》Linux:./eclipse
-》配置Maven
-》修改快捷键
-》MapReduce:分布式计算模型,所有的数据传输通过keyvalue的格式
-》input:负责数据的读取,默认读hdfs上的文件
格式转换:
key:每一行的偏移量
value:每一行的内容
一行一个keyvalue
-》map:根据分片的大小,启动相应的map task
一个数据块:128M = 一个分片:splits = 1 个map task进行处理
-》map task每处理一条keyvalue就会调用一次map
-》根据相应的实际需求,生成新的keyvalue
-》context上下文对象负责整个MapReduce的上下文数据的承接
context.write(key,value)
-》shuffle:洗牌,将拥有相同key的value合并
输出:
key,{value1,value2,value3……}
1,……
2,……
3,……
-》合并:分组
-》分区(默认按照key的 hash值取余的方式)、排序
-》reduce:合并,将每条不同的 key调用reduce方法进行处理
-》output:输出,默认到hdfs,输出keyvalue格式的结果
-》wordcount
hadoop hive hbase
hadoop spark
spark
-》input:
输出:
19,hadoop hive hbase
30,hadoop spark
35,spark
-》map:
map方法进行处理
-》对value进行分割
-》取到每个单词
-》封装keyvalue进行输出
输出:
hadoop,1
hive,1
hbase,1
hadoop,1
spark,1
spark,1
-》shuffle:分区、排序、分组
-》输出:
hadoop,{1,1}
hbase,{1}
hive,{1}
spark,{1,1}
-》reduce:调用reduce方法
-》reduce方法进行处理
-》将迭代器中的 值累加即可
-》封住keyvalue
-》输出:
hadoop,2
hbase,1
hive,1
spark,2
-》output:写入hdfs
key \t value
二、MapReduce开发模板
-》Driver类:驱动类
-》继承configured类,实现Tools接口
-》main
-》run
-》Mapper类:map task需要调用的对象,只要负责拆分任务
-》map
-》Reduce类:reduce task需要调用的对象,负责合并
-》reduce
三、Hadoop中的数据类型
-》java:String、Int、double、long、null
-》hadoop:Text、Intwritable、doublewritable、longwritable、nullwritable
-》自定义数据类型:实现writablecomparable接口
-》定义成员变量
-》set / get
-》构造方法
-》toString
-》hash
-》equals
-》write:序列化方法
-》readfiled:反序列化
四、网站日志分析
请求网页链接:https://item.taobao.com/item.htm?
请求参数:key=value &
spm=a217h.9580640.831217.2.4ff525aaImnVde&
id=562109381525&
scm=1007.12144.81309.70043_0&
pvid=4dd29b32-efbd-4342-be4c-f2d501dbd2ba&
utparam=%7B%22x_object_type%22%3A%22item%22%2C%22x_object_id%22%3A562109381525%7D
-》常见的业务分析
PV:网页浏览量:url
每访问一个网页就是一个pv,相同网页累计
UV:独立访客数:uuid,guid
总共有多少个人访问了,同一个人的访问计一次
VV:访客的访问次数
每个时段访问的次数
IP:独立IP数
某个时段内ip的总个数
-》基于多维度的组合分析
-》时间维度:统计每天的pv数、每小时的pv数
-》地域维度:上海的pv数,北京pv数
-》组合维度:每天上海的pv数
-》需求:每个城市的pv数 = 每个单词出现的次数
结果:
key:城市
value:pv数
mapreduce:
-》input:读hdfs文件,
默认key是偏移量,value是行的内容
-》map:
map:非法值进行过滤
输出:
城市id 1
-》shuffle:
城市id 1
-》reduce:
输入:
城市id {1,1,1……}
reduce:将value中的集合进行求和
输出:
城市id pv数
-》output:
-》每个城市的uv
城市id uv数
-》map
key : 城市id
value:guid
-》shuffle
城市id ,{guid1,guid1,guid2,guid3……}
上海,{user1,user1,user1,user2,user3……}
-》reduce:
对每个城市的value中的集合去重,求长度
三、MapReduce过程总结
-》编程:Driver、Map、Reduce
-》过程
input、map、shuffle、reduce、output
-》难点:
合理的设计map与reduce的功能与输入输出的类型
map:负责任务的拆分,数据的过滤
-》非法值过滤
-》字段的过滤
-》字段的转换
dd/MMM/YYYY HH:mm:ss -> 2015-08-28 18:10:00
shuffle:分区、排序、分组
分区:决定我当前这条keyvalue最终由哪个reduce进行处理
排序:默认会按照字典顺序进行排序
分组:将拥有相同key的value进行合并
reduce:合并
-》求和
-》每天、每小时、每个地区、每种浏览器
-》每=分组
-》YARN执行程序的过程
1、客户端向resourcemanager提交任务请求
bin/yarn jar ……
log:connect resourcemanager: hostname:8032
2、ResourceManager会随机选择一台NodeManager(app manager)启动application Master
3、APP Master向ResourceManager 请求申请资源
4、APP Manager接收请求,让resource schedule分配资源Container
5、APP Master拿到资源信息及相应的指令、在其他所有机器上分配资源信息
6、NodeManager接收资源信息及指令,启动Map task及reduce task
7、每个NodeManager执行完成任务向APP Master汇报执行结果
8、APP Master会向APP Manager反馈执行结果