本文主要是介绍《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章)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!