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

2024-09-01 18:48

本文主要是介绍《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. 根据项目-用户相似度矩阵求出项目推荐矩阵        
    
    
    
    
    
    
    
    
    

这篇关于《Hadoop大数据分析与挖掘实践》基础篇笔记(1~6章)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127764

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、

Spring Boot统一异常拦截实践指南(最新推荐)

《SpringBoot统一异常拦截实践指南(最新推荐)》本文介绍了SpringBoot中统一异常处理的重要性及实现方案,包括使用`@ControllerAdvice`和`@ExceptionHand... 目录Spring Boot统一异常拦截实践指南一、为什么需要统一异常处理二、核心实现方案1. 基础组件

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬