Hive是什么呢?
Apache Hive: 是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。HIve作为Hadoop家族中一款数据仓库产品,Hive最大的特点就是提供了类SQL的语法,封装了底层的MapReduce过程,让有SQL基础的业务人员,也可以直接利用Hadoop进行大数据的操作。就是这一个点,解决了原数据分析人员对于大数据分析的瓶颈。
下面就从安装开始了解Hive吧!
PS:安装Hive可是操碎了心,先是看视频教程照着安装-失败。然后百度Hive的安装教程,不是没有找到对应版本的教程就是照着配置后还是缺这个包那个包的。而且英语太菜看不懂官方文档。无奈。。。
最后还是在不断的换Hive版本和百度后成功安装了!(心累)
Hive的meta数据支持以下三种存储方式:本地derby、本地MySQL、远端MySQL。
使用derby存储方式时,弊端是在同一个目录下同时只能有一个hive客户端能使用数据库,不适合生产环境以及实际应用。本地MySQL同样不符合实际情况。所以还是选择远端MySQL储存方式比较合适。
一、安装MySQL
这个很简单,sudo apt-get install mysql-server mysql-client
安装过程需要设置root用户的密码(不是Linux主机的密码)
一般来说安装了MySQL服务它就会自动给你启动了。
可以通过sudo service mysql status
查看运行状态,如果没启动使用命令
sudo service mysql start
启动它。
sudo service mysql stop
可以关闭MySQL服务。
解除远程访问MySQL服务器的限制
MySQL服务器默认是只允许本地IP(127.0.0.1)访问的
修改/etc/mysql/mysql.conf.d/mysqld.cnf文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf
把bind-address = 127.0.0.1
这一行给注释掉(加#号)就可以从其他IP访问MySQL服务器了。创建hive数据库:
先进入MySQL数据库mysql -uroot -p
,接下来输入root密码(之前安装MySQL时输的密码)就可以进入服务器了。
输入show databases;
可以查看现有的数据库:
让root用户可以从任意IP登陆
grant all privileges on *.* to 'root'@'%' identified by '1234' with grant option;
(%表示可以从任意IP,密码为1234)
flush privileges;
告诉服务器重载授权表。
PS:有些文章中说先要创建hive用户,然后hive-site.xml中配置信息用hive,亲测失败~~~。最后还是用root配置成功
创建hive数据库
create database hive;
exit;
退出mysql
二、安装Hive
先下载hive安装包,官网下载地址
或者在Ubuntu主机上
wget http://mirror.bit.edu.cn/apache/hive/hive-1.2.2/apache-hive-1.2.2-bin.tar.gz
将其解压,然后移动到/usr/目录下更名为hive,并让所有用户可以读写:
tar -zxf apache-hive-1.2.2-bin.tar.gz
sudo mv apache-hive-1.2.2-bin /usr/hive
sudo chmod -R 777 /usr/hive/
把/usr/hive/conf/下所有.template文件重命名
cd /usr/hive/conf/
mv beeline-log4j.properties.template beeline-log4j.properties
mv hive-default.xml.template hive-site.xml
mv hive-env.sh.template hive-env.sh
mv hive-exec-log4j.properties.template hive-exec-log4j.properties
mv hive-log4j.properties.template hive-log4j.properties
编辑/etc/profile添加如下内容:
export HIVE_HOME=/usr/hive
export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/conf
配置hive-env.xml
export JAVA_HOME=/usr/java/jdk #jdk目录
export HADOOP_HOME=/usr/hadoop #hadoop目录
export HIVE_HOME=/usr/hive #hive目录
export HIVE_CONF_DIR=/usr/hive/conf #hive配置文件目录
配置hive-site.xml
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://slave2:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value>
<description>
slave2是我安装MySQL的主机名,hive是MySQL指中的数据库名
</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>1234</value>
</property>
#需要创建/usr/hive/tmp/目录
<property>
<name>hive.exec.local.scratchdir</name>
<value>/usr/hive/tmp/${user.name}</value>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/usr/hive/tmp/${hive.session.id}_resources</value>
</property>
#以下目录都需要在HDFS下创建
<property>
<name>hive.exec.scratchdir</name>
<value>/hive/tmp</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/hive/warehouse</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/hive/logs</value>
</property>
在Hive安装目录下创建tmp目录
mkdir /usr/hive/tmp
在HDFS上创建一些目录,并赋予权限
hadoop fs -mkdir -p /hive/warehouse
hadoop fs -mkdir -p /hive/logs
hadoop fs -mkdir -p /hive/tmp
hadoop fs -chmod -R 777 /hive/
下载mysql驱动包
解压后把mysql-connector-java-5.1.44-bin.jar复制到/usr/hive/lib/目录下。
配置hive-log4j.properties
log目录修改为/usr/hive/logs
hive.log.dir=/usr/hive/logs
创建logs目录
mkdir /usr/hive/logs
三、启动Hive
- 初始化
schematool -dbType mysql -initSchema
Hive管理有两种方式:
CLI
直接输入hive
命令
hive的命令基本上和MySQL的命令一致。详情可以看看大佬们的文章http://blog.csdn.net/xuejingfu1/article/details/52443372JDBC远程连接
首先要把以下两个包
$HIVE_HOME/lib/hive-jdbc-1.2.2-standalone.jar
$HADOOP_HOME/share/hadoop/common/hadoop-common-2.7.4.jar
导入eclipse项目中
上代码:
package hive;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class HiveJDBCDemo {
private static String driver = "org.apache.hive.jdbc.HiveDriver";
private static String url = "jdbc:hive2://slave2:10000/hive";
static{
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Connection conn= null;
Statement st = null;
ResultSet rs = null;
String hql = "select * from movie where mid<31";
try {
conn = DriverManager.getConnection(url);
st = conn.createStatement();
rs = st.executeQuery(hql);
while(rs.next()){
int mid = rs.getInt(1);
int year = rs.getInt(2);
String title = rs.getString(3);
System.out.println(mid + "\t" + year + "\t" + title);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
rs.close();
st.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}