一、Hive简介
Hive是基于Hadoop文件系统上的数据仓库架构,支持类SQL语言——HiveQL,允许用户进行类似于传统关系型数据库的操作,同时允许开发人员使用MapReduce,Hive将指令解析成为一个Map-Reduce可执行计划,再交给Hadoop集 群进行处理。
二、Hive安装(以Hive1.2.2为例)
1.下载Hive安装包,官网下载
2.选择路径解压,我选择到了/usr/local/hadoop-2.8.0/hive (Hadoop也已经装好并且环境也以配置好,大家可以参考其他配置Hadoop博客)
3.配置环境变量,打开命令行
sudo vim /ect/profile
添加Hive的bin的Path
export HIVE_HOME=/usr/local/hadoop-2.8.0/hive
export PATH=$PATH:$HIVE_HOME/bin
保存退出
在命令行中输入
source /etc/profile
4.修改Hive配置文档
在hive/conf目录下,有一个hive-default.xml.template文件,这是默认配置的一个模板,需要将该文档变成用户自定义所需要的配置文件。命令行中输入。
cd $HIVE_HOME/conf
sudo vim hive-site.xml
下面是我自己的配置文件
<configuration>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>Username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/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>
</configuration>
其中只配置了元数据库为MySQL,其他未配置的项目都是采用Hive的默认配置。
5.此时需要在MySQL中建立一个用户名为hive,密码为hive的用户并授予权限
进入Mysql命令行之后,输入
CREATE USER ‘hive'@'%' IDENTIFIED BY 'HIVE';
GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%' WITH GRANT OPTION;
flush privileges;
6.若需要远程访问MySQL,则需要修改”/etc/mysql/mysql.conf.d/mysqld.cnf”,注释掉bind-address这一行即可。
三、JDBC连接Hive并进行操作
需要导包”mysql-connector-java-5.1.41.jar”,将其复制到$HIVE_HOME/lib,且放入java 工程下面
启动hadoop及hive的两个service
cd /usr/local/hadoop-2.8.0/sbin/
./start-all.sh
hive --service hiveserver2 &
hive --service metastore &
成功启动后命令行输入jps查看当前状态,如下图即正确启动(有两个RunJar)
java 代码如下
public class Hive {
private static String driverName = "org.apache.hive.jdbc.HiveDriver";
private static String url = "jdbc:hive2://localhost:10000/default";
private static String username = "hive";
private static String password = "hive";
private static String hdfsUri = "hdfs://localhost:9000";
public static String selectFromHive() {
Connection con = null;
String s = "";
//注册Hive的JDBC
try {
Class.forName(driverName);
//创建连接
con = DriverManager.getConnection(url,username,password);
//Statement用来执行SQL语句
Statement stat = con.createStatement();
//展示分区
String sql = "show partitions wifi_data";
ResultSet rs = stat.executeQuery(sql);
while (rs.next()) {
System.out.println();
s +=rs.getString(1)+'\n';//hive的索引从1开始
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return s;
}
}
运行截图如下: