一、大数据分析介绍与移植环境

1.大数据分析

  • 什么是大数据
    大数据是一个术语,用来描述这样的一种数据集,它极其庞大、复杂,以至于传统的数据处理应用程序难以应付。术语大数据通常指的是应用预测分析,用户行为分析,或者某些其他从数据中提取有价值信息的高级数据分析方法,并不是专指某种特定规模的数据集(维基百科)
  • 大数据的特征
    多样性(Variety):大数据的异构和多样性;很多不同的形式(文本、图像、视频、机械数据);无模式或是模式不明显;不连贯的语法或句义
    处理速度(Velocity):实时分析而非批量式分析;数据输入、处理与丢弃;立竿见影而非事后见效
    数据体量(Volume):非结构化数据的超大规模和增长;总数据量的80-90%;比结构化数据增长快10倍-50倍;是传统数据仓库的10倍-50倍
    价值密度(Value):大量的不相关信息;对未来趋势与规模的可预测分析;深度复杂分析
  • 为什么需要大数据分析?
    任何企业都不能否认数据的重要性。企业一直都在收集大量的历史数据,并将其保存在数据仓库中以便进行分析。企业可以通过分析历史数据来获得新的增长点,这也证明了数据的重要性。由于数据结构和数据规模的特点,使用传统的数据库和方法已经很难有效地对大数据进行分析,因为我们需要新的工具和技术来存储,管理和实现数据的商业价值。
  • 大数据数据分析的商业驱动因素

商业驱动力

案例

优化业务风险

销售、报价、利润率、效率

识别业务风险

客户流失、欺诈、违约

预测新的商业机会

增值销售、追加销售、最佳的潜在新客户

遵守法律或法规要求

反洗钱、公平信贷

2.环境移植

  • 使用Xshell链接虚拟机
  • 常用的Linux命令
    cd:切换目录,进入到某个目录
  1. cd /etc/ 表示进入/etc这个目录中
  2. cd …/ 表示返回上一级目录
  3. cd 进入当前用户的家目录
    su - 用户名:切换用户
    ls:列出目录下的文件
    ll:列出目录下的文件
    ifconfig:查看网卡的配置信息
    mkdir:新建一个目录/文件夹
    touch:新建一个文件
    vim:文件编辑器
  4. 一般模式
  5. 插入模式
  6. 命令模式
    rm -rf 文件:删除文件/目录

二、Hadoop与分布式原理

1.认识Hadoop

1> 快速认识Hadoop

  • Hadoop是Apache旗下的一套开源软件平台。
  • Hadoop提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理。
  • Hadoop的核心组件:HDFS、MapReduce、Yarn
  • 广义上来说,Hadoop通常指的是指一个更广泛的概念->Hadoop生态圈
  • 云计算是分布式计算、并行计算、网格计算、多核计算、网络存储、虚拟化、负载均衡等传统计算机技术和互联网技术融合发展的产物。借助IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)等业务模式,把强大的计算能力提供给终端用户。
  • 现阶段,云计算的两大底层支撑技术为虚拟化和大数据技术。
  • HADOOP则是云计算的PaaS层的解决方案之一,并不等同于PaaS,更不等同于云计算本身。
  • HADOOP应用于数据服务基础平台建设。
  • HADOOP用于用户画像。
  • HADOOP用于网站点击流日志数据挖掘

2> Hadoop生态圈概览

大数据分析的本质 大数据分析内涵_hadoop


3> Hadoop的组成

Hadoop主要组成:分布式存储HDFS、分布式计算MapReduce、资源调度引擎Yarn

4> MapReduce:分布式计算框架

  • MapReduce是采用一种分而治之的思想设计出来的分布式计算框架如一复杂的计算任务,单台服务器无法胜任时,可将此大任务切分成一个个小的任务,小任务分别在不同的服务器上并行的执行;最终再汇总每个小任务的结果
  • MapReduce由两个阶段组 成:Map阶段(切分成一个个小的任务)、
    Reduce阶段(汇总小任务的结果)。

    5> Yarn:分布式资源管理器
    Yarn具有足够的通用性,可以支持其他的分布式计算模式

2.Hadoop的shell操作

1.启动/关闭Hadoop集群
 start-all.sh/stop-all.sh
 2.查看HDFS上的文件和目录hadoop fs -ls -R /
 3.在HDFS上创建文件夹
 hadoop fs -mkdir -p /test/kkb
 4.上传文件
 hadoop fs -put source(本地文件路径) dest(HDFS路径)
 5.下载文件
 hadoop fs -get source(HDFS路径) dest(本地文件路径)
 6.删除文件
 hadoop fs -rm HDFS文件路径
 hadoop fs -rm -r HDFS目录路径
 7.查看文件内容
 hadoop fs -cat HDFS文件路径
 8.查看集群的工作状态
 hdfs dfsadmin -report

三、Hive基础与自动化分析

1.了解Hive

1> Hive是什么?

  • 基于Hadoop的开源的数据仓库工具,用于处理海量结构化数据。
  • Hive把HDFS中结构化的数据映射成表。
  • Hive通过把HiveSQL进行解析和转换,最终生成一系列在hadoop上运行的mapreduce任务,通过执行这些任务完成数据分析与处理。
    2> Hive与传统数据库比较

Hive

RDBMS

查询语言

HQL

SQL

数据存储

HDFS

Raw Device or Local FS专门数据盘或本地的文件系统

执行

MapReduce

Excutor执行器

执行延迟



处理数据规模



索引

0.8版本后加入位图索引

有复杂的索引

  • 数据仓库/数据湖主要是用来数据分析的,对企业中的决策起到关键性的作用。
  • 数据仓库本身不产生数据,也不消耗数据;其数据是从外部来的,并且主要提供给外部使用。
  • 这个概念很类似于粮仓,它不消耗粮食;粮食主要从外部进来,主要供外部使用。
  • 数据仓库是面向主题性来构建的,一般一个数仓都有一个特定的目的。
  • 数据仓库集成了众多类型的数据,分成了许多不同的层次。
  • 数据仓库中的历史数据一般不会改变,因为其主要用来记录已经发生的事实的数据。
  • 数据仓库上层的分析是可能会发生变化的,体现了分析的灵活性。
  • 面向事务的联机事务处理OLTP vs 面向分析的联机分析处理OLAP。
    3> Hive的优势
  • 把海量数据存储于 Hadoop 文件系统,而不是数据库。提供了一套类数据库的数据存储和处理机制,并采用 HQL (类 SQL )语言对这些数据进行自动化处理。
  • 不仅提供了一个熟悉SQL的用户所能熟悉的编程模型,还消除了大量的通用代码,甚至那些那些Java编写的令人棘手的代码。
  • 学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析,应用开发灵活而高效。

2.Hive数据定义与操作 (内、外部表区别)

• 创建数据库
 CREATE (DATABASE/SCHEMA) [IF NOT EXISTS] database_name
 [COMMENT database_comment]
 [LOCATION hdfs_path]
 [WITH DBPROPERTIES (property_name=property_value,…)];
 拓展1:在Hive中使用Hadoop的dfs命令
 hive> dfs -ls -R /;
 拓展2:在Hive中查看本地文件系统
 hive> !ls /opt/module;• 查看数据库信息
 desc database extended 数据库名;• 创建数据表
 create [external] table if not exists 表名
 (列名 数据类型 [comment 本列注释],…)
 [comment 表注释]
 [partitioned by (列名 数据类型 [comment 本列注释],…)]
 [clustered by(列名,列名,…)]
 [sorted by (列名 [asc|desc],…)] info num_buckets
 buckets]
 [row format row_format]
 [stored as file_format]
 [location hdfs_path]
 [tblproperties (property_name=property_value,…)]
 [as select_statement]• 查看数据表结构
 desc formatted table_name;

内部表和外部表的区别
目前所创建的表都是所谓的管理表,有时也被称为内部表,因为这种表,Hive会(或多或少地)控制着数据的生命周期。当删除一个管理表时,Hive也会删除这个表中数据,管理表不方便和其他工作共享数据。

  • 用关键字external说明
  • 指定外部表存放的数据的路径
  • 如果不指定外部表的存放路径,Hive将在HDFS上的/user/hive/warehouse文件夹下以外部表名创建一个文件夹,并且将属于这个表的数据都存放在这里
  • 当删除一个外部表时,只会删除表的元数据信息,而不会删除数据。
  • 在生产中一般创建外部表来存储数据

关于分区表
hive中有分区表的概念,我们可以看到分区具重要性能优势,分区表可以将数据以一种符合逻辑的方式进行组织,比如分层存储。查询分区表中的数据时,除非where语句中包含分区字段过滤条件来显示数据范围,否则不允许执行。换句话说,就是用户不允许扫描所
有的分区。进行这个限制的原因是,通常分区表都拥有非常大的数据集,而且数据增加迅速。如果没有进行分区限制的查询可能会消耗令人不可接受的巨大资源来处理这个表。
truncate table employee;
分区表分别有静态分区和动态分区,那么它们有什么区别呢?
静态分区与动态分区的主要区别在于静态分区是手动指定,而动态分区是通过数据来进行判断。静态分区的列是在编译时期,通过用户传递列名来决定的;动态分区是在SQL执行的时候确定的。
静态分区

create table test
 (name string,age int)
 partitioned by (country string)
 row format delimited fields terminated by ‘\t’
 lines terminated by ‘\n’
 stored as textfile;
 向分区表中插入数据
 insert into table test partition(country=“china”)
 values(“zhangsan”,1);
 insert into table test partition(country=“usa”)
 values(“james”,34);
 insert into table test partition(country=“usa”)
 values(“tom”,2);
 查询分区表的数据
 select * from test where country=“china”;
 删除分区
 alter table test drop partition(country=“china”);
 动态分区
 set hive.exec.dynamic.partition=true;(可通过这个语句查看:set
 hive.exec.dynamic.partition;)
 set hive.exec.dynamic.partition.mode=nonstrict;
 SET hive.exec.max.dynamic.partitions=100000;(如果自动分区数
 大于这个参数,将会报错)
 SET hive.exec.max.dynamic.partitions.pernode=100000;
 显示分区数
 show partitions order_part;
 查询分区表中的数据
 select * from user_trade limit 6;这样会报错,因为没有加分区条
 件。
 严格模式:
 set hive.mapred.mode=strict;
 select * from user_trade limit 6;
 select * from user_trade where dt=‘2017-01-12’;


数据的导入和导出

1.从本地导入到表中
 load data local inpath ‘本地路径’ overwrite into table
 sogou [partition(partcol1=val1,…)];
 2.从HDFS导入到表中
 load data inpath ‘HDFS上的路径’ into table 表名
 [partition(partcol1=val1,…)];
 3.将Hive表中的数据导出到本地
 insert overwrite local directory ‘本地路径’ 查询语句;
 4.将Hive表中的数据导出到HDFS
 insert overwrite directory ‘HDFS路径’ 查询语句;