flume概念+ Hive

Flume

在这里插入图片描述

Flume是一种分布式,可靠且可用的服务,用于有效地收集,聚合和移动大量日志数据。

1.Event:事件, Flume在接收到日志数据之后,会先将其封装成一个个的Event (JSON串),一条日志被封装为一个event
log: “猪猪上周去医院了”
event: { “headers”:“自定义内容” , “body”:“猪猪上周去医院了” }
2.Agent: 代理,Flume集群中的每一个节点都叫做一个Agent,而每个Agent(服务器j节点)中包含三个组件(source channel sink)
3.Source:数据源, 接收数据,并将每一条日志都封装为一个Event,随后将封装好的Event发送至Channel进行缓存.
4.Channel:缓存 被动接收Source传来的Event数据,并进行缓存,等待Sink的消费.一般 业务中都会使用内存资源作为Channel的缓存资源,这就需要我们注意在初始化Channel是需要为其设置最大容量,避免内存泄漏的情况.
5.Sink: 从Channel中消费数据,并发送给指定的位置.

删除flumedata里的数据

hadoop fs -rm -R /flumedata

Hive

安装:

  1. cd /home/app/
    上传大数据资料hive-2.3.6压缩包到此目录下
  2. 进入 hive-2.3.6-bin/conf目录下
    将大数据资料里的hive-site.xml文件上传到此目录下
  3. 任意目录下 输入 mysql 回车看下是否能进入MariaDB 下,可有后 exit退出
  4. 进入到 /home/app/hive-2.3.6-bin/lib/目录下
    将大数据资料的mysql-connector-java-5…jar上传到此目录下
  5. 然后进入到hive-2.3.6-bin目录下,输入 mysql 回车到MariaDB 工作中执行 开放mysql权限命令
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option; 
flush privileges;    

exit退出

  1. 在/home/app/apache-hive-2.3.6-bin/bin目录下执行初始化:
./schematool -dbType mysql -initSchema
  1. jps 检查状态,没有任何问题后,在此bin 目录下执行启动hive命令
./hive
  1. 然后 执行show databases; 表明hive安装成功!

在项目中用于离线数据的处理(计算),Hive是一个建立在Hadoop基础之上的数据仓库工具,以HiveQL(类SQL)的操作方式让我们能够轻松的实现分布式的海量离线数据处理。

功能:海量数据的离线处理
意义:规避了MR程序的复杂开发流程,降低了大数据计算的学习成本

数据仓库

仓库:有用但不常用的东西
数据仓库:有用但不常用的数据
数据仓库是一个面向主题的、稳定的、集成的,反应历史数据的数据存储系统,一般用于为管理者提供决策分析的数据支持。

实验分析

1.Hive 中的数据库其实保存在HDFS中,以文件夹的形式体现,属于所属数据库的子目录,命名:dbname.db
2.Hive中的表保存在HDFS中,以文件夹的形式体现,属于所属数据库的子目录,命名:tbname
3.Hive表中的数据保存在HDFS中,以文件的形式体现,保存在所属表的文件下中。
4.发现在某些SQL执行时,Hive会将其先翻译为MR程序然后执行。

创建表tb_book1;

 create table tb_book1 (id int,name string) row format delimited fields terminated by '\t';

上传home/data文件下下面的book1.txt的数据到表tb_book1中:

load data local inpath '/home/data/book1.txt' into table tb_book1;

Hive 表的类型

内部表和外部表

MANAGED_TABLE 内部表(托管表):现有表后有数据
EXTERNAL_TABLE 外部表: 先有数据后有表
在删除表时的区别:
内部表:元数据会被删除,表数据也会被删除
外部表:元数据会被删除,表数据不会被删除

在home/data 目录下创建hivedata目录,并将book2.txt放过去

hadoop fs -mkdir /hivedata
hadoop fs -put /home/data/book2.txt /hivedata

之后hive下面创建tb_book2

create external table tb_book2(id int,name string) row format delimited fields terminated by '\t' location '/hivedata';

分区表

Hive是一个数据仓库,面向主题,分区表是实现面向主题的唯一方式
大数据资料的hive里面的文件里的txt数据上传到/home/data目录下

  1. 创建分区表:
create table tb_par (id int,name string) partitioned by (country string) row format delimited fields terminated by '\t';
  1. 上传数据到分区表里:
load data local inpath '/home/data/CHN.txt'  into table tb_par partition (country='CHN');
  1. 创建分区表2:
create table tb_par2 (id int,name string) partitioned by (country string,gender string) row format delimited fields terminated by '\t';
  1. 上传到分区(male分区)
load data local inpath '/home/data/CHN_male.txt'  into table tb_par2 partition (country='CHN',gender='male');
load data local inpath '/home/data/CHN_female.txt'  into table tb_par2 partition (country='CHN',gender='female');
load data local inpath '/home/data/UK_male.txt'  into table tb_par2 partition (country='UK',gender='male');
load data local inpath '/home/data/UK_female.txt'  into table tb_par2 partition (country='UK',gender='female');
load data local inpath '/home/data/JPN_male.txt'  into table tb_par2 partition (country='JPN',gender='male');
load data local inpath '/home/data/JPN_female.txt'  into table tb_par2 partition (country='JPN',gender='female');
  1. 查询语句
select * from tb_par2 where country='JPN' and gender='male';

分桶表

分桶表一般在测试阶段使用
当全量数据参与测试运算,体量太大,测试效率就会非常低,此时需要抽样测试,但是如果原数据本身具有连续性,或前后关联性较强,此时不能随意抽取样本,这样会造成测试结果产生歧义,不容易判断测试代码是否正确,最好使用分桶的方式进行样本的抽取。

  1. 创建表
create table tb_testdata (id int,name string) row format delimited fields terminated by ',';
  1. 导入数据
load data local inpath '/home/data/teachers.txt'  into table tb_testdata;
  1. 创建分桶表
create table tb_buc (id int,name string) clustered by (id) into 4 buckets row format delimited fields terminated by ',';
  1. 开启分桶模式
set hive.enforce.bucketing=true;
  1. 数据导入
insert into table tb_buc select * from tb_testdata;
  1. 查询看下结果
select * from tb_buc;
  1. 数据取样:查询第一个桶里的
select * from tb_buc tablesample(bucket 1 out of 4 on id);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值