D12 Hive基础及Flume

来源:互联网 发布:富士plc中文编程软件 编辑:程序博客网 时间:2024/05/18 21:06
一、Hive

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。可以将sql语句转换为MapReduce任务进行运行。

Ø 直接使用hadoop所面临的问题

人员学习成本太高

项目周期要求太短

MapReduce实现复杂查询逻辑开发难度太大 

Ø 为什么要使用Hive

操作接口采用类SQL语法,提供快速开发的能力。

避免了去写MapReduce,减少开发人员的学习成本。

扩展功能很方便。

Hive的特点

Ø 可扩展    Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。 

Ø 延展性    Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。 

Ø 容错        良好的容错性,节点出现问题SQL仍可完成执行。

Hive可以看作一个放在hdfs上的数据库,因此具有sql数据库的外表,但是应用场景不同,Hive只是用来做批量数据统计分析
并且Hive是针对数据仓库应用设计的,而数据仓库的内容是都多写少的。Hive不支持对数据的改写和添加,所有的数据都是在加载的时候确定好的!!
Hive建立在集群上并可以利用MapReduce进行并行计算,因此可以支持很大规模的数据。
学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析

Hive Thrift服务:
HiveServer2支持多客户端的并发和认证,为开放API客户端如JDBC、ODBC提供了更好的支持。简言之就是丰富了原来的HiveServer,解决了多客户端并发处理Hive数据的问题。

关于hive的HDFS存储数据目录:/user/hive/warehouse/all tables/tables.file
创建的表存储在warehouse下。

二、hive的sql操作,关于join

创建表
1
创建a表
2
create table a(id int,name string)
3
row format delimited fields terminated by ',';
4
创建b表
5
create table a(id int,name string)
6
row format delimited fields terminated by ','
7
load data local inpath '/home/hadoop/a.txt' into table t_a;
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
full outer:两表都输出,不存在的字段为null。可用于两表比较
实验:
①inner join:  
select  *  from  a  innner  join  b  on  a.id = b.id;    
②left join :
select  *  from  a  left      join  b  on  a.id = b.id;    
③right join :
select  *  from  a  right   join  b  on  a.id = b.id;    
④full outer
select  *  from  a  full   outer  join  b  on  a.id = b.id;    

三、用户画像数据仓库
概述:从各种应用、网站上获取用户的信息。邮箱,手机号,家庭地址,户口,昵称ID等信息离散,最后组成一个人的所有的信息的集合。图计算(Spark,graphx)

四、小米云盘是基于Hbase封装的,是基于hdfs文件系统的数据库。百度等网盘不是hdfs

五、自定义Hive函数:
Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDFuser-defined function)。
①在类内编写重载函数(或者只有一个)------>因为语句会将该类变成一个函数名,那么要求只能有一个函数,可通过重载实现多个函数功能。
②打包上传到服务器后,添加,执行语句----->add JAR /home/hadoop/test.jar;
③添加后,创建临时函数test---->create temporary function test as 'cn.incast.hadoop.udf.ToLowerCase';
④执行函数,实现业务逻辑---->select phone,localadr,ID,test(phone) from table_test;    将该表:phone localadr,  ID,  phone作为参数运算后的数据    等都作为一个表内容显示出来。
备注:这样可以通过自定义函数,实现我们想要的业务逻辑,只需在hive中对操作的元素执行函数即可。更加实用,具象,解决了只用HSQ来操作数据的复杂。

六、通过自定义函数Jason解析到MySQL
设置对象,执行函数
1
    public String evaluate(String jsonLine) {
2
3
        ObjectMapper objectMapper = new ObjectMapper();
4
5
        try {
6
            MovieRateBean bean = objectMapper.readValue(jsonLine, MovieRateBean.class);
7
            return bean.toString();
8
        } catch (Exception e) {
9
10
        }
11
        return "";
12
    }

七、面试sql,整理求和报表

八、flume 分布式高可用日志采集系统,聚合和传输系统,一般的采集需求,对于flume进行简单的配置即可实现

1、 每一个agent相当于一个数据传递员,内部有三个组件:

a) Source:采集源,用于跟数据源对接,以获取数据

b) Sink:下沉地,采集数据的传送目的,用于往下一级agent传递数据或者往最终存储系统传递数据

c) Channel:angent内部的数据传输通道,用于从source将数据传递到sink

 

单个agent使用                                                                                                                 多个agent级联

 

bin/flume-ng agent -c conf -f conf/netcat-logger.conf -n a1  -Dflume.root.logger=INFO,console

-c conf   指定flume自身的配置文件所在目录

-f conf/netcat-logger.con  指定我们所描述的采集方案

-n a1  指定我们这个agent的名字


原创粉丝点击