大数据概念(2021年1月18日)

对于“大数据”(Big data)研究机构Gartner给出了这样的定义。“大数据”是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产。

麦肯锡全球研究所给出的定义是:一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低四大特征。

大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。换而言之,如果把大数据比作一种产业,那么这种产业实现盈利的关键,在于提高对数据的“加工能力”,通过“加工”实现数据的“增值”。

从技术上看,大数据与云计算的关系就像一枚硬币的正反面一样密不可分。大数据必然无法用单台的计算机进行处理,必须采用分布式架构。它的特色在于对海量数据进行分布式数据挖掘。但它必须依托云计算的分布式处理、分布式数据库和云存储、虚拟化技术。

随着云时代的来临,大数据(Big data)也吸引了越来越多的关注。分析师团队认为,大数据(Big data)通常用来形容一个公司创造的大量非结构化数据和半结构化数据,这些数据在下载到关系型数据库用于分析时会花费过多时间和金钱。大数据分析常和云计算联系到一起,因为实时的大型数据集分析需要像MapReduce一样的框架来向数十、数百或甚至数千的电脑分配工作。

大数据需要特殊的技术,以有效地处理大量的容忍经过时间内的数据。适用于大数据的技术,包括大规模并行处理(MPP)数据库、数据挖掘、分布式文件系统、分布式数据库、云计算平台、互联网和可扩展的存储系统。

Linux 基础(2021年1月18日)

1. 由林纳斯-托瓦斯在大学期间仿造Unix系统编写的一套免费的操作系统

a. 是一套类Unix的操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统

b. 能运行主要的Unix的工具软件、应用程序和网络协议、支持32位和64位硬件,继承以Unix以网络为核心的设计思想

2. 特点:开源、多用户、多任务、良好的界面、支持多平台

3. 发行版本: Redhat、centos、Ubuntu、kylin

4. 基础命令

a. 命令操作权限

b. 命令的书写格式: 命令  [选项]  [参数]

c. 常见的基础命令: pwd、mkdir、cd、ls、cp、touch、rm、mv

5.vim文本编辑器

一个类vi的编辑器,可以理解为是vi的加强版智能文本编辑器,会自动为字体添加上颜色,有简单的代码语法正确性检查。

一般模式(默认模式)、编辑模式、命令模式

a. 通常在一般模式,使用键盘上的某些符号对文件的内容进行定位、查找、复制、删除

b. 从一般模式进入到编辑模式、从一般模式进入到命令模式

c. /正向查找、?反向查找、:命令

d. 常用命令:w、 q、 wq、noh、 !Command

6. 免密登录

免除在登录时需要使用密码      

a. 非对称加密算法在生成证书的时候会成对的公钥和私钥证书文件,当公钥证书对某个文件或者服务器进行加密,只有配对生成的私钥文件才能解密

明文密码123--公钥加密--》acdgdfsre

b. 证书生成:ssh-keygen

c. ssh-copy-id 远程服务器的用户名@远程服务器的地址

7. 软件包管理

a. 压缩、b. 打包、c. RPM、 d. yum

Hadoop安装与配置(2021年1月19日)

1. hadoop是apache基金会提供的一套开源、可伸缩、可靠的用于分布式存储和计算的框架

2. hadoop的发展历程

a. Doug Cutting

3. hadoop的版本和组件

a. hadoop1.0:common、HDFS、MR(java程序:内存和CPU)

b. hadoop2.0:common、HDFS、MR、YARN(资源管理器和调度者:封装CPU和内存)

c. hadoop3.0:Common、HDFS、MR、YARN、Ozone(较高版本的 对象存储)、

d. 组件:submarine(机器学习引擎 2019.3)

hadoop生态圈:flume、HDFS、MapReduce、Hive、Sqoop

3. Hadoop的安装与配置

hadoop的三种搭建形式

    1. 独立的本地运行模式

    2. 伪分布式模式(教学):hdfs\mr\yarn的进程

    3. 完全分布式模式

4. 注意事项

    1. 如果namenode format  ,建议重启linux: reboot

    2. 少HDFS或者yarn相关的进程,比如namenode、datanode

        a. 解决方案:可以去Hadoop的log目录下,查看缺少的那个进程所对应的日志文件,根据报错信息修改配置

            i. 修改完成之后,先停止HDFS相关的进程stop-all.sh ;

            ii. 然后删除此时的数据目录 tmp;

            iii. 重新格式化

            iv. 再次启动

HDFS分布式文件系统(2021年1月19日)

1. 为Hadoop服务的分布式文件系统,主要包含三个进程:

        a. NameNode:名字节点,用于记录元数据和管理DataNode

        b. DataNode:数据节点,用于存储数据

        c. SecondaryNameNode:辅助namenode做元数据的滚动,无法达到热备的效果,在2.0之后通过配置namenode主从,取消了secondary

2. HDFS指令

hadoop fs -mkdir /park01

在hdfs上创建一个park01目录

hadoop  fs -ls /

查看根目录下的文件和文件夹

hadoop fs -lsr /

递归查看  等同于-ls -R

hadoop fs -put  NOTICE.txt  /park01

上传:将linux中的文件上传到hdfs的park01目录下

hadoop fs  -get  /park01/NOTICE.txt  /home

下载:将hdfs上的文件下载到linux的指定目录

hadoop fs -rm /park01/NOTICE.txt

删除文件

hadoop fs -rmdir /park

删除文件夹,并且此文件夹需要是空文件夹

hadoop fs -rmr /park01

删除非空文件夹 等同于 -rm -R

hadoop dfsadmin -safemode enter

进入安全模式

hadoop dfsadmin -safemode leave

离开安全模式

hadoop dfsadmin -rollEdits

手动执行合并edits和fsimage

hadoop dfsadmin -report

查看存活的DataNode节点信息

3. HDFS API

MapReduce分布式计算框架(2021年1月20日)

1.概述:Hadoop的分布式计算框架,将数据的计算分成了map和reduce两个部分;用于解决海量数据的计算问题。

2.入门案例:wordcount单词计数

        a. 模拟一个数据:words.txt

        b. 上传数据到HDFS的/txt目录下

        hadoop fs -mkdir /txt

        hadoop fs -put words.txt /txt

3. Hadoop集群在工作的过程中,一般都是RPC方式进行集群节点之间的通信,要求MapReduce所处理的对象都要可以序列化和反序列化

4. MapReduce的shuffle中,包含分区操作,作用:将map的输出结果按照一定的规则来输出到不同的分区,以供ReduceTask来获取。

5. 默认的分区规则:HashPartitioner

    publicintgetPartition(K2key,V2value,intnumReduceTasks){

    return(key.hashCode()&2147483647)%numReduceTasks;

    }

    将key均匀的分布到ReduceTask上

6. 默认的ReduceTask就是1个

7. 需要自定义分区规则,继承Partitioner基类,重写其中的getPartition方法:

8. 改造流量统计的案例:

        a. 按照不同的地区来统计每个用户的流量总数

            i. 根据业务中的地址设置分区:

            判断地址==bj | hz | fj  |sh

Flume日志收集框架(2021年1月20日)

1. 概述:用于收集、传输、汇总数据到指定的存储系统(文件、HDFS、HBase等等);Flume是一个高可用、高可靠、分布式的易于定制的海量日志收集、聚合和传输的框架

2. Flume核心组件

    1. flume运行的核心是agent引擎

    2. agent中包含了三个核心组件:source\channel\sink

    3. source数据源:

        a. 专门用来收集数据,指定收集的数据的类型,例如netcat,需要指定监听的ip和端口;例如file,需要指定监听的文件夹;例如http协议等等

        b. 收集的是一行一行的数据

    4. channel数据通道

        a. 当source将数据收集以后,临时存放在channel,分为了内存和文件

        b. 内存型的channel是暂时缓存了数据,file型的channel会将数据持久化

    5. sink数据汇聚点

        a. 用于消费channel通道中的数据,根据不同的需求将数据发往不同的目的地:file\hdfs

    6. 在三个组件之间,数据是以event形式流动的

     Event: { headers:{} body: 64 65 6D 6F  demo }

可以对event进行简单的处理,例如添加请求头:时间戳、主机名、自定义(静态)

3. 不同种类的S-C-S:NetCat Source、Spool Directory Source、Avro Source

4. Flume的组件:Channel 通道、Sink 汇聚点、Interceptor 拦截器

Hive数据仓库(2021年1月21日)

通过sql语句开发,但是计算底层依然是MR,存储底层是HDFS;

1. 概述:hive是基于Hadoop的数据仓库框架,提供了一种SQL方言,可以查询存储在HDFS上的数据;底层将SQL查询或插入转换为MR 的job程序在Hadoop集群上运行

2. hive将数据组织成数据库表,通过数据库表来操作来为数据赋予结构

3. hive中的sql,通过sql语句对数据进行提取转换和加载

4. 数据库和数据仓库的区别

数据库

数据仓库

用于实时查询数据

为离线分析去存储数据

具有CRUD的功能

支持一次写入多次查询,不支持行级别的增删改;行级别查询是抽样查询 tablesample(1 rows)

具有事务

没有事务的特性:hive操作的文件可能不归自己管

尽量避免冗余,提高存储和处理的效率

人为的制造冗余,为查询和分析服务

数据来源单一

数据丰富

5. Hive安装与配置

6. hive中数据实际上是管理hdfs上的文件,数据是在hdfs,hive中以表的形式来管理文件数据,hive自身是存储的是表的信息:表名、表字段、字段类型、表管理是哪个数据文件等

7. MySQL和HDFS的双向数据导入

8. hive的数据库指令和数据库表

9. 存储格式:

        a. hive中对表的管理,从行格式(row format)和文件格式

        b. 行格式:序列化和反序列化机制、可以指定行格式

10. 表的类型

内部表(管理表)、外部表、分区表(内部分区表、外部分区表)

Sqoop数据转移(2021年1月22日)

1. 概述:SQL-TO-HADOOP工具,允许用户将数据从结构化存储器MySQL抽取到Hadoop中,用于后续作进一步的处理,以供MR、hive来使用;也可以使用将数据从Hadoop、hive导出到结构化存储器,给其他的客户端:企业级开发的应用使用。

2. sqoop安装与配置

3. sqoop命令单独执行没有任何意义,需要使用sqoop提供的一系列的工具以供执行相应的操作

    a. export      Export an HDFS directory to a database table :将HDFS上的目录中的文件导出到数据库中

执行导出

    概述:将HDFS作为数据源,将远程数据库作为目标,将数据导出到远程数据库中

        a. 远程数据库是一定要先声明好接收数据的目标表

        b. hive:int \string :其中string类型对应着char\varchar;

        c. 底层实际上就是执行了MR

    b. import      Import a table from a database to HDFS:将数据库表的数据导入到HDFS指定的文件

        a. 将sqo_demo.demo表数据导入到HDFS上

        b. 执行:

        sqoop import --connect jdbc:mysql://localhost:3306/sqo_demo --username root --password root --table demo -m 1

zebra项目设计与开发(2021年1月22日)

1. zebra概述

    1. 如图所示,电信运营商的用户通过连接到互联网中的各种网络设备访问一个网站时,其访问信息会通过基站在网络中传递,基站可以收集所有用户的访问日志数据

    2. zebra是对电信运营商收集的用户上网数据进行分析的一个应用程序。通过分析得到的结果可以展现不同小区的上网详情

    3. 注:zebra本意为斑马,命名类似hadoop的方式,并无特殊含义

2. zebra实现

一、利用flume收集数据,将收集的数据落地到HDFS的文件系统中,

    1. flume在收集日志数据的时候,按天为单位进行收集

    2. 将数据上传到/home/zebradata目录

    3. 启动flume,收集数据

二、通过hive处理数据,外部表来指向已有数据

    1. 使用hive创建zebra数据库

    2. 为要处理的数据,创建一张外部表:

    3. 修复外部表的分区:

    4. 清洗数据,提取有用的数据(23个字段)

    5. 创建事实表 f_http_app_host

四、在mysql中创建出需要的表

五、导出数据

    1. 将hive上f_http_app_host表的数据导出到mysql的f_http_app_host表中

    2. sql语句:向mysql中的所有表插入数据

六、使用tomcat服务器测试应用是否能正常启动

    1. 连接上虚拟机上的mysql服务器,修改此文件的配置

    2. 启动tomcat服务器,访问测试

参考文章