Hive学习心得Hive的UDF

一:Hive基本介绍

Hive是建立在Hadoop上的数据仓库基础构架,它提供了一系列工具可以用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模的数据机制。

使用语言:QL语言(类SQL查询语言)。能处理内建的mapper和reducer无法完成的复杂分析工作。

1.Hive是SQL解析引擎,它将SQL语句转译成M/R Job然后再Hadoop执行。

2.Hive的表其实是HDFS的目录(/文件夹),按表名把文件夹区分开。如果是分区表,则分区值是子文件夹,可以直接在M/R Job里使用这些数据。

二:Hive的系统架构

1.用户接口主要有三个:CLI,JdbC/ODBC,WebUI

(1)CLI,即shell命令行。

(2)JDBC/ODBC,是Hive的Java接口,与使用传统数据库JDBC方式类似。

(3)WebUI,是通过浏览访问Hive。

2.Hive将元数据存储在数据库(metastore)中,目前只支持MySQL,derby。(Hive中的元数据包括表名,表列,和分区及其属性,表属性,表的数据所在目录等)

3.解析器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成。生成的查询计划存储在HDFS中,,并在随后有MapReducer调用执行。

4.Hive的数据存储在HDFS中,大部分的查询由MapReducer完成(包括含*的查询,比如select * from table不会生成MapReducer任务)。

三:Hive的安装

Hive只需在集群中的一个节点安装,Hive的默认是将元数据以derby的方式存储(在哪个目录下运行Hive,就在哪个目录下生成metastore_db数据库保存元数据,不利于多台client操作Hive)。

so:先安装MySQL数据库

1.rpm -ivh Mysql-Server.rpm

2.rpm -qa | grep mysql //过滤出MySQL包

3.rpm -e mysql-lib… –nodeps //强行删除上一布中过滤出的MySQL包

4.运行/usr/bin/mysql_secure_installation //配置登陆用户名&密码

5.mysql –uroot -p123 //进入MySQL….按照成功

//把MySQL作为Hive的metastore

//下面即配置Hive

1.删除hdfs上的Hive目录

hadoop fs -rmr /user/hive

2.修改conf配置文件

添加如下内容:<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://centos:3308/hive?createDatabaseIfNotExist=true</value> <description>JDBC connect string for a JDBC metastore</description></property>

<property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>Driver class name for a JDBC metastore</description></property>

<property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> <description>username to use against metastore database</description></property>

<property> <name>javax.jdo.option.ConnectionPassword</name> <value>123</value> <description>password to use against metastore database</description></property> 3.安装hive和mysq完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行) mysql -uroot -p #(执行下面的语句 *.*:所有库下的所有表 %:任何IP地址或主机都可以连接) GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ IDENTIFIED BY ‘123’ WITH GRANT OPTION; FLUSH PRIVILEGES;

四:Hive语法

1.查看表(数据库)

show tables(database);

2.创建表(列之间以’\t’做分隔符)

create table student(id bigint,name string) row format delimited fields terminated by ‘\t’;

3.上传数据

load data local inpath ‘/usr/local/xx.txt’ into table student;

4.创建一张外部表

create external table ext_student (id int,name string) row format delimited fields terminated by ‘\t’ location ‘/data’;

5.创建分区表

create external table people (id int, name string) partitioned by (nation string) row format delimited fields terminated by ‘\t’ location ‘/people’;

6.分区表添加数据(指定分区)

load data local inpath ‘/usr/local/xx.txt’ into table people partition(nation=’China’);

7.暴力方式:

手动在HDFS中创建一个分区的文件夹,往里面添加数据。

问题:select查询不到语句

原因:手动方式是元数据没有在数据库中记录。

解决:暴力方式往数据库中添加分区信息

在Hive中运行:

alter table people add partition(nation="Japan") location ‘/people/nation=Japan’;

8.分区查询

select * from people where nation="China";

9.使用sqoop工具将MySQL中的表数据远程导入HDFS下的Hive目录中

竞争颇似打网球,与球艺胜过你的对手比赛,

Hive学习心得Hive的UDF

相关文章:

你感兴趣的文章:

标签云: