Hadoop进阶

Hadoop进阶

地址:Hadoop进阶
源码地址:github

1 第一章 概述

hadoop的体系架构

HDFS架构

块:

DataNode:

NameNode:

Secondary NameNode:

Hadoop1.X架构图

Hadoop1.X架构图

Hadoop 2.X

对比

hadoop2.0以后版本移除了jobtracker tasktracker,改由Yarn平台的resourcemanager负责统一调配。

image.png

Yarn设计减少了jobtracker对系统资源的消耗,也减少了hadoop1.0单点故障问题。

image.png

2 第二章 深入探索MapReduce过程

image.png

2.1 WordCount实例回顾

1Split 2 Map 3 Shuffle 4 Reduce

1 Split阶段

分片
Split阶段
分片

2 Map阶段

输入:key 行号 value 一行值

输出:key 单词 value 1

Map阶段

3 Shuffle阶段

比较复杂,可以理解为map端的输出作为reduce端的输入过程,而且涉及到网络传输;

Shuffle阶段

4 Reduce阶段

Reduce阶段

总结

WordCount实例

2.2 从分片输入到Map

输入文件:

image.png

分片输入:

分片输入

分片输入问题:

分片输入

理想的输入文件:

由于NameNode内存有限,大量的小文件会给Hdfs带来性能上的问题;故Hdfs适合存放大文件,对于大量的小文件,可以采取 **压缩、合并小文件 **的优化策略。例如,设置文件输入类型为CombineFileInputFormat格式。

如何调整节点Map的任务的个数?

四个分片对应四个map任务

image.png

在实际情况下,map任务的个数是受多个条件的制约,一般一个DataNode的map任务数量控制在10到100比较合适。

一般操作如下:

  • 增加map个数,可增大mapred.map.tasks;
  • 减少map个数,可增大mapred.min.split.size;
  • 如果要减少map个数,但有很多小文件,可将小文件合并成大文件,再使用准则2

2.3 Map---Shuffle---Reduce

1 本地优化-Combine

本地优化-Combine
Combine
image.png
MR

2 M-S-R

一、Combine的逻辑和reduce逻辑一致。故可以认为combine是对本地数据的reduce操作。

二、一个mapreduce作业中,一下三者的数量是相等的。
1)partitioner的数量
2)reduce任务的数量
3)最终输出文件的数量
三、一个reducer中,所有数据都会被按照key值升序排序,故如果part输出文件包含key值,则这个文件一定是有序的;

四、reducer任务数量

reducer任务数量

调整方式有二:
1)mapred.reduce.tasks
2)Java代码中job.setNumReduceTasks(int n)

2.4 总结

分片输入---split

image.png

本地合并---Combiner

image.png

Map---Shuffle---Reduce

image.png

3 第三章 Hadoop的分布式缓存

3.1 分布式缓存---DistributedCache

在执行MapReduce时,可能Mapper之间需要共享一些信息,如果信息量不大,可以将其从HDFS加载到内存中,这就是Hadoop分布式缓存机制。

例子:统计全量的单词文本中存在的单词,那么在Hadoop一开始就把全量的单词加载到内存中 ,然后对于输入的行单词,去在内存中查找,如果全局缓存中存在该单词,就输出;

统计全量的单词文本中存在的单词

如何使用DistributedCached呢?

第一步:设置路径和别名

在main方法中加载共享文件的HDFS路径,路径可以是目录也可以是文件。可以在路径末尾追加 “ #” +别名,在map阶段可以使用该别名;

设置路径和别名

第二步:

在Mapper类或Reducer的setup方法中,用输入流获取分布式缓存中的文件;

image.png

加载到内存发生在Job执行之前,每个从节点各自都缓存一份相同的共享数据。如果共享数据太大,可以把共享数据分批缓存,重复执行作业。

3.2 MapReduce实现矩阵相乘

1 矩阵相乘例子

image.png

2 矩阵相乘编码

矩阵在文件中的表示

矩阵在文件中的表示

思路:

1: 将右侧矩阵转置,即行转换成列,列转化为行
右侧矩阵转置

2:矩阵相乘
1、将右矩阵载入分布式缓存;
2、将左矩阵的行作为map输入;
3、在map执行之前:将缓存的右矩阵以行为单位放入list;
4、在map计算时:从list中取出所有行分别与输入行相乘。

4 推荐算法

4.1 相似度

余玄相似度

二维向量的余玄相似度

image.png

多维向量的余玄相似度

多维向量的余玄相似度

其他相似度

其他相似度

4.2 基于物品的推荐算法(理论)

基于物品的协同过滤推荐算法(ItemCF)

用户行为和权重:点击(1.0分) 搜索(3.0分) 收藏(5.0分) 付款(10.0分)

算法思想:给用户推荐那些和他们之前喜欢的物品相似的物品

实例:

image.png

image.png

算法步骤:

3个用户、6种商品

1、根据用户行为列表计算用户、物品的评分矩阵

image.png

[图片上传失败...(image-db3bef-1526978905470)]

2、根据用户、物品的评分矩阵计算物品与物品的相似度矩阵

取第一行和第二行的行向量,计算余旋相似度,比如:1号和2号物品的相似度为0.36

image.png

评分矩阵两两相乘、然后构建对称矩阵

[图片上传失败...(image-6ceb08-1526978905471)]

3、相似度矩阵*评分矩阵 = 推荐列表

[图片上传失败...(image-3ceb2-1526978905471)]

[图片上传失败...(image-8686f4-1526978905471)]

将推荐矩阵和评分矩阵做一个比较,发现在评分矩阵中,用户已经对一些商品产生过行为,对这些已经产生多的行为, 所以没有必要在为这些用户推荐这些商品,那么我们就可以将之前推荐过的商品置零。

[图片上传失败...(image-455ebe-1526978905471)]

最终的推荐结果,一个用户可能有很多的推荐物品,我们这里去Top1作为最终的推荐结果,取出用户最感兴趣的物品,

[图片上传失败...(image-df6cd3-1526978905471)]

具体实现步骤:

[图片上传失败...(image-94fe70-1526978905471)]

4-3 基于物品的推荐算法(代码)

代码实现的步骤[图片上传失败...(image-bb7222-1526978905471)]

Step1:

计算评分矩阵

输入:用户ID,物品ID,分支

输出:物品ID(行) --- 用户ID(列) --- 分值

Step2:

计算余弦相似度矩阵

输入:步骤1的输出

缓存:步骤1的输出

输出:用户ID(行) --- 物品ID(列) --- 相似度

[图片上传失败...(image-2cf23-1526978905471)]

step3:

将评分矩阵转置

输入:步骤1的输出

输出:用户ID(行) --- 物品ID(列) ---分值

step4:

相似度矩阵*评分矩阵

输入:步骤2的输出

缓存:步骤3的输出

输出:物品ID(行) --- 用户ID(列) --- 分值

step5:

根据评分矩阵,将步骤4的输出中,用户已经有用过行为的商品评分置0

输入:步骤4的输出

缓存:步骤1的输出

输出:用户ID(行) --- 物品ID(列) --- 分值 (最终的推荐列表)

4-4 基于物品的推荐算法(代码)

4-5 基于物品的推荐算法(代码)

4-6 基于用户的推荐算法(理论)

基于用户的协同过滤推荐算法(UserCF)

算法思想:给用户推荐和他兴趣相似的其他用户喜欢的物品

现有如下用户、商品、行为、权重:

用户:A、B、C、D、E、F

商品:1、2、3、4、5、6

行为:点击 1.0分、搜索 3.0分、收藏 5.0分、付款 10.0分


用户行为列表

算法步骤:

  1. 根据用户行为为列表计算物品、用户的评分矩阵

行号是用户ID、列号是物品ID

评分矩阵

  1. 根据评分矩阵计算用户与用户的相似度矩阵

    将所有的用户两两计算相似度之后,得到相似度矩阵


    两两计算相似度

    用户与用户的相似度矩阵
  1. 相似度矩阵 * 评分矩阵 = 推荐列表


    相似度矩阵 * 评分矩阵

得到推荐列表,在对照评分矩阵,将相应位置的元素置零


元素置零

4-7 基于用户的推荐算法(代码)

基于用户的推荐算法MR的步骤:UserCF

基于用户的推荐算法

与给予物品的推荐算法类似

4-8 基于内容的推荐算法(理论)

基于内容的推荐算法

算法思想:给用户推荐和他们之前喜欢的物品在内容上相似的其他物品

物品特征建模

物品特征建模

算法步骤:

1 构建Item Profile矩阵

0 1矩阵, 行号是物品ID,列号是标签


构建Item Profile矩阵

2 构建Item User评分矩阵

行号是用户ID,列号是物品ID


评分矩阵

3 Item User * Item Profile = User Profile


Item User * Item Profile

User Profile:用户对所有标签感兴趣的程度


User Profile

4 对Item Profile 和 User Profile求余弦相似度

余弦相似度

4-9 基于内容的推荐算法(代码)

MR步骤:UserCF

MR步骤

5 第五章 课程总结

课程总结
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354