《Hadoop大数据分析与挖掘实践》基础篇笔记(1~6章)

数据挖掘的基本任务:

包括利用分类与预测、聚类分析、关联规则、包括利用分类与预测、聚类分析、关联规则、
时序模式、偏差检测、智能推荐等方法,帮助企业提取数据中蕴含的商业价值,提高企业竞争力。

数据挖掘建模过程:

    1. 目标定义

        任务理解

        指标确定

    2. 数据采集

        建模抽样:数据采样的相关性,可靠性,有效性

        采样方式:随机采样,等距抽样,分层抽样,从起始顺序抽样,分类抽样

        质量把控:数据的完整性,有效性

        实时采集

    3. 数据整理

        数据探索:数据质量分析,数据特征分析

            数据质量分析:主要任务是检测原始数据中是否存在脏数据(缺失值、异常值、不一致的值、重复值及特殊符号)

            数据特征分析:分布分析、对比分析、统计量分析、周期性分析、贡献度分析、相关性分析

        数据预处理:数据清洗、数据集成、数据变换、数据规约

            数据清洗:缺失值处理,异常值处理

            数据集成:将多个数据源合并存放在一个一致的数据存储中的过程

            数据变换:简单函数变换、规范化、连续属性离散化、属性构造、小波变换

            数据规约:属性规约、数值规约

    4. 构建模型

        模式发现

        构建模型

        验证模型

    5. 模型评价

        设定评价标准

        多模型对比

        模型优化

    6. 模型发布

        模型部署

        模型重构

 

Hadoop基础:
    大数据主要特点:(4V)
        数据量大(Volume)
        数据类别复杂(Variety)
        数据处理速度快(Velocity)
        数据真实性高(Veracity)
    Hadoop生态系统:
        Hive,HBase,flume,Spark,Pig,ZooKeeper,Storm,Shark,Mahout,Sqoop...
        Hive:数据仓库
        HBase:大数据存储库
        Spark:分布式计算框架
        Storm:实时流计算
        Sqoop:用来在HDFS和RDBMS之间来回导入和导出数据
        ...
    Hadoop原理:
        HDFS:分布式存储系统,能运行在廉价的机器上。高容错性、高吞吐量、适合大数据集,可以实现以流形式访问。
            采用master/slave构架(NameNode,dataNode)
        MapReduce:是一个快速、高效、简单用于编写并行处理大数据程序并应用在大集群上的编程框架。
            MapReduce框架包括一个主节点(ResourceManager)、多个子节点(运行NodeManager)和MRAppMaster(每个任务一个)共同组成。
            通常,MapReduce框架的计算节点和存储节点是运行在一组相同的节点上的。
            MapReduce框架流程:
                1. Map阶段
                    InputFormat根据输入文件产生键值对,并传送到Mapper类的map函数中;
                    map输出键值对到一个没有排序的缓冲内存中;
                    当缓冲内存达到给定值或者map任务完成,在缓冲内存中的键值对就会被排序输出到磁盘中的溢出文件;
                    如果有多个溢出文件,那么就会整合这些文件到一个文件中,且是排序的;
                    这些排序过的、在溢出文件中的键值对会等待Reducer的获取。
                2. Reduce阶段
                    Reducer获取Mapper的记录,然后产生另外的键值对,最后输出到HDFS中;
                    shuffle:相同的key被传送到同一个Reducer中;
                    当有一个Mapper完成后,Reducer就开始获取相关数据,所有溢出文件会被排序到一个内存缓冲区中;
                    当内存缓冲区满了后,就会产生溢出文件到本地磁盘;
                    当Reducer多有相关的数据都传输完成后,所有溢出文件就会被整合和排序
                    Reducer中的reduce方法针对每个key调用一次;
                    Reducer的输出到HDFS中。
        YARN:资源调用管理
    
        HDFS命令:
            hadoop fs -mkdir /user
            hadoop fs -ls -d /user/root
            hadoop fs -put ds.txt ds.txt #upload file to HDFS
            hadoop fs -cat /user/root/ds.txt
            hadoop fs -cp /user/root/ds.txt /uesr/root/ds_backup.txt
            hadoop fs -mv /user/root/ds_backup.txt /uesr/root/ds_backup1.txt
            hadoop fs -rf -r /uesr/root/ds_backup.txt
        
        MapReduce任务:
            hadoop fs -put /opt/ds.txt /uesr/root/ds.txt
            cp /opt/hadoop-2.6.0/share/hadoop/mapreduce/hadoop-mapreduce-example-2.6.0.jar /opt
            ls /opt/hadoop-mapreduce*
            #run mapreduce task
            hadoop jar /opt/hadoop-mapreduce-example-2.6.0.jar wordcount /user/root/ds.txt /user/root/ds_out 
            #look output result
            hadoop fs -cat /user/root/ds_out/part-r-00000
        
    Hive: 构建在Hadoop之上的数据仓库,提供了一系列工具,可以用来进行数据提取转换加载(ETL),这是一种可以存储、查询
和分析存储在Hadoop中 的大规模数据的机制。
        特点:
        支持索引,加快数据查询;
        不同的存储类型,如纯文本文件,HBase中的文件;
        将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查时间;
        可以直接使用存储在HDFS中的数据;
        类SQL的查询方式,HQL;
        
        数据仓库与数据库的区别:
        数据库存储的是当前值,数据仓库存储的是历史值;
        数据库存储的是动态数据经常在更新,数据仓库存储的是静态数据;
        Hive的主要任务是sql把翻译为mapreduce程序
        
        Hive特殊数据类型:array,map,struct,union
        
        Hive数据模型:
            表:内部表存储在HDFS上,存放在hive.metastore.warehouse.dir配置的目录中
            外部表:数据放在建立表时指定的目录,创建外部表可以在删除该外部表时,不删除该外部表所指向的数据,
                它只会删除外部表对应的元数据;但是如果要删除表,该表对应的所有数据都会被删除。
            分区表;表的每一个分区对应表下的相应目录,所有分区的数据都存储在对应的目录中。
            桶(bucket):对指定的列计算其哈希值,根基哈希值切分数据,目的是并行,每一个桶对应一个文件。
        
        HQL:
        Hive create/delete database:
            CREATE DATABASE IF NOT EXISTS userdb;#create database
            SHOW DATABASES;
            USE userdb;
            DROP DATABASE IF EXISTS userdb; #drop database
        
        Hive create/modify/delete/partition/query table:


            •CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXIST 选项来忽略这个异常
            •EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION)
            •LIKE 允许用户复制现有的表结构,但是不复制数据
            •COMMENT可以为表与字段增加描述
            •PARTITIONED BY 指定分区
            •ROW FORMAT 
              DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char] 
                MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char] 
                | SERDE serde_name [WITH SERDEPROPERTIES 
                (property_name=property_value, property_name=property_value, ...)] 
              用户在建表的时候可以自定义 SerDe 或者使用自带的 SerDe。如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,
            用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive 通过 SerDe 确定表的具体的列的数据。 
            •STORED AS 
              SEQUENCEFILE //序列化文件
              | TEXTFILE //普通的文本文件格式
              | RCFILE  //行列存储相结合的文件
              | INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname //自定义文件格式
              如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCE 
           •LOCATION指定表在HDFS的存储路径


            create table:
            
                create table [external] student(id int, 
                name string,
                sex string, 
                age int,
                department string) 
                partitioned by (city string)
                clustered by (id) sorted by (id asc, name desc) into 4 buckets
                row format delimited 
                fields terminated by ",";
            
                create table student_ctas as select * from employee where id < 95012;
                
            create table student_copy like student; #copy table column name
            load data local inpath '/home/user/sample.txt' into table employee #load data
            alter table employee add partition(city="beijing"); #modify partition
            alter table student rename to new_student; #rename
            alter table new_student add columns (score int);
            alter table new_student replace columns (id int, name string, address string);
    
    HBase
        HBase是一个分布式的、面向列的非关系型数据库。NoSQL(Not Only SQL)
        依赖于HDFS做底层数据存储,Mapreduce做数据计算,zookeeper做服务协调
        3个重要组件:Zookeeper,HMaster,HRegionServer
            Zookeeper:为整个HBase集群提供协助服务(信息传输)
            HMaster:用于监控和操作集群中的所有RegionServer,
                主要负责Table和Region的管理工作
                1. 管理用户对Table的增删改查
                2. 管理HRegionServer的负载均衡,调整Region分布
                3. 在Region Split后,负责新的Region的分配
                4. 在HRegionServer停机后,负责失效HRegionServer上的Regions迁移
            HRegionServer:用于服务和管理分区,主要负责响应用户I/O请求,
                向HDFS文件系统中读写数据,是HBase中最核心的模块。
                HRegionServer
                    HRegion
                        HStore-->对应table中的columnFamily
                            MemStore
                                |
                            StoreFile
                    HLog
        数据类型:字符串
        数据模型:
            row key:一条记录的唯一标识符,主键
            Column:列,可理解成MySQL列。
            column family:Hbase通过列族划分数据的存储,列族下面可以包含任意多的列,实现灵活的数据存取,
                Hbase表的创建的时候就必须指定列族
            cell:实际存储的数据,包含数据和时间戳
        HBase表的操作:
            创建create:
                create 'myHBase',{NAME=>'myCard',VERSION=>5}
            查看表列表list: 
                list
                查看表的详细信息desc:desc 'myHBase'
            修改表的定义alter:
                添加一个列簇:alter 'myHbase', NAME => 'myInfo'
                删除一个列簇:alter 'myHBase', NAME=>'myCard',METHOD=>'delete'
                            或者alter 'myHbase', 'delete' => 'myCard'
                添加列簇hehe同时删除列簇myInfo:alter 'myHBase',{NAME=>'hehe'},{NAME=>'myInfo',METHOD=>'delete'}
            清空表:truncate 'myHBase'
            删除表drop:
                disable 'myHBase'
                drop 'myHBase'
                
        HBase表中数据的操作:
            create 'user_info',{NAME=>'base_info',VERSIONS=>3 },{NAME=>'extra_info',VERSIONS=>1 } 
            增put:
                 put 'user_info', 'user0001', 'base_info:name', 'zhangsan1'
            查get+scan:
                 get 'user_info', 'user0001'
                 scan 'user_info'
                 scan 'user_info', {COLUMNS => 'base_info'}
            删delete:
                delete 'user_info', 'rk0001', 'base_info:name'
    

挖掘建模:


    分类与预测 -- 监督学习
        分类算法steps:
            1. 学习步,通过归纳分析训练样本集来建立分类模型得到分类规则;
            2. 分类步,先用已知的测试样本集评估分类规则的准确率,如果准确率是可接受的,则使用该模型对未知类标号的待测样本集进行预测。
        预测模型steps:
            1. 通过训练集建立预测属性(数值型的)的函数模型;
            2. 在模型通过检验后进行预测。
        常用的分类与预测算法:回归分析,决策树,随机森林,贝叶斯网络,支持向量机
        常用的决策树算法:ID3,C4.5算法,CART算法
            ID3:特征划分基于信息增益
            C4.5:特征划分基于信息增益比
            CART:特征划分基于基尼指数
            
    聚类分析 --  非监督学习
        聚类分析是在没有给定划分类别的情况下,根据数据相似度进行样本分组的一种方法。
        距离模型可以建立在无类标记的数据上,即输入数据是一组未被标记的样本,根据数据自身的距离/相似度
        将他们分为若干组,划分的原则是组内样本最小化而组间(外部)距离最大化。
        
        常用聚类方法:
            划分(分裂)方法:K-Means(K-平均),K-MEDOIDS(K-中心点),CLARANS(基于选择的算法)
            层次分析方法
            基于密度的方法
            基于网络的方法
            基于模型的方法
        常用划分聚类算法:K-Means,K-中心点,系统聚类
        
    关联规则
        关联规则目的是在一个数据集中找出各项之间的关联关系,而这种关联关系并没有在数据中直接体现出来。
        常用的关联规则算法:Apriori,FP-Growth,Eclat,灰色关联法
        
    协同过滤
        基于项目的协同过滤:通过用户对不同项目的评分来评测项目之间的相似性,基于项目之间的相似性做出推荐
            steps:
                1. 原始用户数据--> 项目矩阵-->项目相似度矩阵
                2. 原始用户数据--> 用户矩阵
                3. 项目相似度矩阵& 用户矩阵-->用户推荐项目
            算法实现:
                1. 求出用户矩阵,项目矩阵
                2. 求出项目矩阵平方和
                3. 根据项目矩阵、项目矩阵平方和求出项目相似度矩阵
                4. 整合用户矩阵、项目相似度矩阵,得到用户-项目相似度矩阵
                5. 根据用户-项目相似度矩阵求出用户推荐矩阵
        基于用户的协调过滤:通过不同用户对项目的评分来评测用户之间的相似性,基于用户之间的相似性做出推荐
            steps:
                1. 原始用户数据--> 项目矩阵
                2. 原始用户数据--> 用户矩阵-->用户相似度矩阵
                3. 用户相似度矩阵& 项目矩阵-->项目推荐项目
            算法实现:
                1. 求出用户矩阵,项目矩阵
                2. 求出用户矩阵平方和
                3. 根据用户矩阵、用户矩阵平方和求出用户相似度矩阵
                4. 整合项目矩阵、用户相似度矩阵,得到项目-用户相似度矩阵
                5. 根据项目-用户相似度矩阵求出项目推荐矩阵        
    
    
    
    
    
    
    
    
    

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值