zoukankan      html  css  js  c++  java
  • Hadoop/Spark入门学习笔记(完结)

    Hadoop基础及演练

    ---第1章 初识大数据

    • 大数据是一个概念也是一门技术,是在以Hadoop为代表的大数据平台框架上进行各种数据分析的技术.

    ---第2章 Hadoop核心HDFS

    • Hadoop是一个开源的大数据框架,是一个分布式计算的解决方案,Hadoop=HDFS(分布式文件系统)+MapReduce(分布式计算)
    • 存储是大数据技术的基础,分布式计算是大数据应用的解决方案
    • HDFS基础架构:
    1. 数据块:是抽象块,一般设置为128MB,备份3个.
    2. NameNode:主数据块,管理文件系统的命名空间,存放文件元数据,维护文件系统的所有文件和目录,文件与数据块的映射,记录每个文件各个块所在数据节点的信息
    3. DataNode:从数据块,存储并检索数据块,向NameNode更新所存储块的列表
    • HDFS优点:
    1. 适合大文件存储,并有副本策略
    2. 可以构建在廉价的机器上,并有一定的容错和恢复机制
    3. 支持流式数据访问,一次写入,多次读取最高效
    • HDFS缺点:
    1. 不适合大量小文件存储
    2. 不适合并发写入,不支持文件随机修改
    3. 不支持随机读等低延时的访问方式
    • 数据块的大小多少合适:64MB或128MB,太小会增加硬盘寻道时间,太大会影响MapReduce
    • NameNode如果挂了怎么办:设置备用节点,失效后自动激活
    • HDFS写流程:
    1. 客户端向NameNode发起写数据请求
    2. 分块写入DataNode节点,DataNode自动完成副本备份
    3. DataNode向NameNode汇报存储完成,NameNode通知客户端

    • HDFS读流程:
    1. 客户端向NameNode发起读数据请求
    2. NameNode找出距离最近的DataNode节点信息
    3. 客户端从DataNode分块下载文件

    • 常用HDFS Shell命令:
    1. 类Linux系统:ls,cat,mkdir,rm,chmod,chown等
    2. HDFS文件交互:copyFromLocal,copyToLocal,get,put
    3. 上传文件:hdfs dfs -copyFromLocal 目标文件 目标路径
    4. 下载文件:hdfs dfs -copyToLocal 源文件 目标文件
    • python的hdfs3库可以用python进行文件的写入和读取
    from hdfs3 import HDFileSystem
    
    test_host = 'localhost'
    test_port = 9000
    
    
    def hdfs_exists(hdfs_client):
        path = '/tmp/test'
        if hdfs_client.exists(path):
            hdfs_client.rm(path)
    
        hdfs_client.makedirs(path)
    
    
    def hdfs_write_read(hdfs_client):
        data = b'hello hadoop' * 20
        file_a = 'tmp/test/file_a'
        with hdfs_client.open(file_a, 'wb', replication=1) as f:
            f.write(data)
    
        with hdfs_client.open(file_a, 'rb') as f:
            out = f.read(len(data))
    
            assert out == data
    
    
    def hdfs_readlines(hdfs_client):
        file_b = '/tmp/test/file_b'
        with hdfs_client.open(file_b, 'wb', replication=1) as f:
            f.write(b'hello
    hadoop')
        with hdfs_client.open(file_b, 'rb') as f:
            lines = f.readlines()
            assert len(lines) == 2
    
    
    if __name__ == '__main__':
        #创建客户端
        hdfs_client = HDFileSystem(host=test_host, port=test_port)
    
        hdfs_exists(hdfs_client)
    
        hdfs_write_read(hdfs_client)
    
        hdfs_readlines(hdfs_client)
    
        hdfs_client.disconnect()
    
        print('-' * 20)
        print('hello hadoop')
    python操作HDFS

    ---第3章 Hadoop核心MapReduce

    • YARN:资源管理器,负责集群资源的管理和调度.
    1. ResourceManager:分配和调度资源,启动并监控ApplicationMaster,监控NodeManager
    2. ApplicationMaster:为MR类型的程序申请资源并分配给内部任务,负责数据切分,监控任务的执行及容错
    3. NodeManager:管理单个节点的资源,处理来自ResourceManager和ApplicationMaster的命令
    • MapReduce(MR)是一种编程模型和方法:
    1. split:输入一个大文件,将其分片
    2. map:每个分片由单独的机器处理
    3. reduce:将各个机器计算的结果进行汇总并得到最终结果
    import sys
    
    
    def read_input(file):
        for line in file:
            yield line.split()
    
    
    def main():
        data = read_input(sys.stdin)
    
        for words in data:
            for word in words:
                print("%s%s%d"%(word, '	', 1))
    
    
    if __name__ == '__main__':
        main()
    python map
    import sys
    from operator import itemgetter
    from itertools import groupby
    
    
    def read_mapper_output(file, separator='	'):
        for line in file:
            yield line.rstrip().split(separator, 1)
    
    
    def main():
        data = read_mapper_output(sys.stdin)
    
        for current_word, group in groupby(data, itemgetter(0)):
            total_count = sum(int(count) for current_word, count in group)
    
            print("%s%s%d"%(current_word, '	', total_count))
    
    if __name__ == '__main__':
        main()
    python reduce

    ---第4章 Hadoop生态圈介绍

    • 如何通过Hadoop存储小文件:可以利用HDFS将小文件合并为大文件,或者利用某种方式对文件进行分组(Hadoop Archives,SequenceFile,HBase)
    • 当有节点故障时,集群如何继续提供服务:NameNode会让其他DataNode从现有副本复制这些数据块.如果又恢复正常,则随机选择要删除的副本
    • 哪些是影响MapReduce性能的因素:算法,硬件,底层存储系统,输入数据的大小
    • HBase是一个分布式数据库.利用HDFS作为文件存储系统,支持MR程序读取数据.可以存储非结构化半结构化数据.核心概念是RowKey(数据唯一标识,按字典排序),Column Family(列族,多个列的集合,不能超过3个),TimeStamp(时间戳,支持多版本数据同时存在).
    • Spark是一个基于内存计算的大数据并行计算框架.是MapReduce的替代方案,兼容HDFS,HIVE等数据源.优势是抽象出分布式内存存储数据结构(弹性分布式数据集RDD),基于事件驱动,通过线程池复用线程提高性能.

    Hadoop进阶

    ---第1章 概述

    • 大数据可以用于精准营销,用户画像,商品推荐等功能的实现.
    • 一个NameNode对应多个DataNode.所有DataNode定期向NameNode发送心跳,如果NameNode没有收到就认为该DataNode已经挂掉,会将数据发送到其他节点.还有一个Secondary NameNode用于备份NameNode.
    • Hadoop2.0移除了JobTracker和TaskTracker,该由Yarn负责集群中所有资源的管理和分配,NodeManager管理单个计算节点.

    ---第2章 深入探索MapReduce过程

    • WordCount为例的MapReduce:
    1. Split:将多个文本分为不同的分片
    2. Map:以<key,value>形式输入,其中key是行号,value是文本,利用map将其拆分,key为单词,value为1(代表该单词出现一次).
    3. Shuffle:以map的输出作为输入,将相同的单词归到一起,但不进行次数累加.
    4. Reduce:以shuffle的输出作为输入,对单词次数进行累加求和,输出key为单词,value为次数.
    • 输入文件保存在DataNodeblock(数据块)中,每一个文件都会增加分片数量,并映射在NameNode中,而NameNode内存有限,所以HDFS适合存放大文件.
    • 节点Map任务的个数可以通过增大mapred.map.tasks来增加,也可以通过增大mapred.min.split.size或合并小文件来减少.
    • Combine是指本地优化,在本地先按照key进行一轮排序和合并,在进行网络混洗.在多数情况下Combine的逻辑和Reduce的逻辑是一致的,可以认为Combine是对本地数据的Reduce.
    • map先将文件放入内存缓冲区,然后将其中的小文件合并为大文件,进行网络传输.key值相同的文件会进行partition(合并),再进行reduce.
    • 一个MapReduce中,以下三者的数量总是相等的:partitioner的数量,redue任务的数量,最终输出文件.
    • 在数据量大的情况下,应该将reduce任务数设为较大值.可以通过调节参数mapred.reduce.tasks和job.setNumReduceTasks(int n)方法进行设置

    ---第3章 Hadoop的分布式缓存

    • 在执行MapReduce时,Mapper之间需要共享信息,如果信息量不大,可以将其从HDFS加载到内存中,这就是Hadoop分布式缓存机制(DistributedCache).如果共享数据太大,可以将共享数据分批缓存,重复执行作业.
    • MapReduce进行矩阵相乘:
    1. 将右侧矩阵转置
    2. 将右矩阵载入分布式缓存
    3. 将左矩阵的行作为Map输入
    4. 在Map执行之前将缓存的右矩阵以行为单位放入List
    5. 在Map计算时从List中取出所有行分别与输入行相乘

    ---第4章 推荐算法

    • 有余弦相似度,切比雪夫距离,欧氏距离,皮尔森系数等描述向量相似程度的度量方法
    • 基于物品的推荐算法(ItemCF):
    1. 用户行为与权重(点击,搜索,收藏,付款)
    2. 算法思想是给用户推荐那些和他们之前喜欢的物品相似的物品
    3. 根据用户行为列表计算用户,物品的评分矩阵
    4. 根据评分矩阵计算物品的相似度矩阵
    5. 相似度矩阵*评分矩阵=推荐列表
    6. 在推荐列表中将用户产生过行为的物品置0
    • 基于用户的推荐算法(UserCF):
    1. 根据用户行为列表计算物品,用户的评分矩阵.
    2. 根据评分矩阵计算用户的相似度矩阵.
    3. 相似度矩阵*评分矩阵=推荐列表
    4. 在推荐列表中将用户产生过行为的物品置0
    • 基于内容的推荐算法:
    1. 给用户推荐和他们之前喜欢的物品在内容上相似的其他物品
    2. 物品特征建模
    3. 构建Item Profile矩阵(0,1矩阵)
    4. 构建Item User评分矩阵
    5. 将两个矩阵相乘得到User Profile矩阵.表示用户对特征的兴趣权重.
    6. 对Item Profile和User Profile求余弦相似度
    7. 在推荐列表中将用户产生过行为的物品置0

    Spark从零开始

    ---第1章 Spark介绍

    • Spark是一个快速(扩充了流行的MapReduce计算模型,基于内存计算)且通用(容纳了其他分布式系统拥有的功能)的集群计算平台.
    • Spark的组件:
    1. Spark Core:包含Spark的基本功能,比如任务调度,内存管理,容错机制.定义了RDD(弹性分布式数据集),提供了API来创建和操作RDD.
    2. Spark SQL:处理结构化数据的库.
    3. Spark Streaming:实时数据流组件.
    4. Mlib:包含通用机器学习功能的包.
    5. Graphx:处理的库,并进行图的并行计算.
    6. Cluster Managers:集群管理.
    • 相比Hadoop,Spark可以用于时效性要求高的场景和机器学习等领域.

    ---第2章 Spark的下载和安装

    • Spark是Scala写的,运行在JVM上.
    • Spark的shell能够处理分布在集群上的数据,把数据加载到节点的内存中.分为Python shellsScala shells.

    ---第3章 开发第一个Spark程序

    • WordCount:
    1. 创建一个Spark Context
    2. 加载数据
    3. 把每一行分割成单词
    4. 转换成pairs并且计数
    • 打包程序-启动集群-提交任务-执行任务  

    ---第4章 RDDs

    • Driver program包含程序main方法,RDDs的定义和操作.它管理很多executors(节点).

    • 通过SparkContext访问Spark,它代表和一个集群的连接.在Shell中是自动创建好的.

    • RDDs弹性分布式数据集的简写.它们并行分布在整个集群中.不管整个数据集被切分成几块,都可以用它来访问整个数据集.一个RDD是一个不可改变的分布式集合对象.所有计算都是通过RDDs的创建,转换,操作完成的.一个RDD内部由很多partitions(分片)构成,每个分片包括一部分数据,是Spark并行处理的单元.RDD的创建可以用parelleilzie()加载外部数据集.
    • RDD基本操作:
    1. Transformations指的是从之前的RDD构建一个新RDD的过程.如map(接收函数,把函数应用到RDD,返回新RDD),filter(接收函数,返回只包含满足filter函数的元素的RDD),flatMap(对每个输入元素,输出多个输出元素).
    2. RDD支持数学集合计算,如并集,交集.
    3. Action是在RDD上计算出一个结果,把结果返回给driver program或保存在文件系统.如reduce(接收一个函数,作用在RDD两个类型相同的元素上,返回新元素),collect(遍历整个RDD,返回RDD的内容,注意内容需要单机内存能够容纳下),take(返回RDD的n个元素,返回结果无序),top(返回排序后的topN值),foreach(计算RDD中的每个元素,但不返回到本地).
    • Spark维护着RDDs之间的依赖关系和创建关系,叫做血统关系图,可以用于计算RDD的需求和恢复丢失数据.
    • 延迟计算:Spark对RDD的计算是在第一次使用action操作的时候.这可以减少数据的传输.
    • 使用map()函数可以创建KeyValue对RDDs.KeyValue对RDDs的Transformations操作有reduceByKey(把相同key的结合),groupByKey(把相同的key的values分组),mapValues(对value进行map操作).
    • combineByKey最常用基于key聚合函数,接收四个参数.返回类型可以与输入类型不一样.它遍历元素的key,如果是新元素就使用createCombiner函数,如果已存在就使用mergeValue函数.合计每个分片结果的时候使用mergeCombiners函数.
  • 相关阅读:
    ADERA3 省选模拟赛 SPOJ LMCONST
    TYVJ 1730 二逼平衡树 线段树套平衡树
    BZOJ 1059 [ZJOI2007]矩阵游戏 二分图匹配
    BZOJ 1056 [HAOI2008]排名系统 Splay+Hash
    OI教会我的
    BZOJ 1055 [HAOI2008]玩具取名 DP
    BZOJ 1058 [ZJOI2007]报表统计 Splay
    为自己而奋斗
    [总结]高斯消元&XOR方程
    我 的 2013
  • 原文地址:https://www.cnblogs.com/limitlessun/p/9416404.html
Copyright © 2011-2022 走看看