what is hive?
Hive 是建立在Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据的提取转化加载(ETL ),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类SQL查询语言,称为 HQL,它允许熟悉SQL的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。
Hive在hadoop生态圈中属于数据仓库的角色。他能够管理**hadoop中的数据,同时可以查询**hadoop中的数据。
优点与缺点
成本低,入手较快。
可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReuduce应用。
不支持实时查询。
Hive系统架构
元数据存储:通常是存储在关系数据库中,如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
[[email protected] ~]# 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
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-13 07:00:26