大数据技术学习笔记之Hadoop框架基础3-网站日志分析及MapReduce过程详解

版权声明: https://blog.csdn.net/weixin_37254888/article/details/79704090
一、回顾
    -》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反馈执行结果
            
            
        
        
   

猜你喜欢

转载自blog.csdn.net/weixin_37254888/article/details/79704090