hive和mysql的特点_Hive简述及几种访问方式

what is hive?

Hive 是建立在Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据的提取转化加载(ETL ),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类SQL查询语言,称为 HQL,它允许熟悉SQL的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

Hive在hadoop生态圈中属于数据仓库的角色。他能够管理**hadoop中的数据,同时可以查询**hadoop中的数据。

优点与缺点

成本低,入手较快。

可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReuduce应用。

不支持实时查询。

Hive系统架构

f3224fad219a5dba03c0e9c66921e55a.png

元数据存储:通常是存储在关系数据库中,如mysql, derby 。 Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

驱动:解释器、编译器、优化器、执行器

查询编译器:

执行引擎:

服务器:

客户端组件:

可扩展接口部分:

Hive元数据存储

Derby(内嵌derby,默认)

单session

在启动终端日录创建元数据文件

不能多用户共享

MySQL

安装MySQL,配置账户,权限

mysql-connector-java-5.1.22-bin.jar拷贝至hive安装目录lib目录下面

修改hive-site.xml

Hive Client访问方式

1、Cli命令行

[root@hadoop1 ~]# hive

2、Hwi

[root@hadoop1 ~]# hive --service hwi

http://localhost:9999/hwi

3、HiveServer

启动hiveserver

[root@hadoop1 ~]# hive --service hiveserver

如果出现org.apache.thrift.transport.TTransportException: Could not create ServerSocket on address 0.0.0.0/0.0.0.0:10000.

解决方法:端口被占用,kill该端口进程或者重新制定端口hive --service hiveserver -p 10001

通过Hive-jdbc方式访问。

private static String HiveDriver="org.apache.hadoop.hive.jdbc.HiveDriver";

private static String url="jdbc:hive://hadoop1:10001/default";

private static String name="";

private static String password="";

Class.forName(HiveDriver);

Connection conn = DriverManager.getConnection(url,name,password);

Statement stat=conn.createStatement();

String sql="show tables";

ResultSet rs = stat.executeQuery(sql);

Demo:

package example;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class HiveJDBC {

private static String HiveDriver="org.apache.hadoop.hive.jdbc.HiveDriver";

private static String url="jdbc:hive://hadoop1:10001/default";

private static String name="";

private static String password="";

public static void main(String[] args) {

try {

Class.forName(HiveDriver);

Connection conn = DriverManager.getConnection(url,name,password);

Statement stat=conn.createStatement();

String sql="show tables";

String sqlString = "select * from addressall_2015_07_09";

ResultSet rs = stat.executeQuery(sqlString);

while(rs.next()){

//hive是从1开始的

//System.out.println(rs.getString(1));

System.out.println(rs.getString(1)+" "+rs.getInt(2)+" "+rs.getInt(3)+" "+rs.getInt(4));

}

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

运行结果:

2015_07_09 536 488 493

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值