Hive目前底层还是用MapReduce,以后可能会用Spark,Tez。Hive差不多是一个查询接口,你的SQL语句还是会翻译成MapReduce任务的,你用explain就可以看到这些任务的执行计划。下面介绍下hive的基础安装过程以及简单的使用。

环境信息:

虚拟机数量:3台
操作系统:Ubuntu 14.04
实验环境及版本:
Hadoop:Hadoop 2.2.0
Java:java version "1.7.0_51"
Hive:apache-hive-1.2.1
MySQL:mysql  Ver 14.14 Distrib 5.5.44(x86_64)

安装Hive之前首先要确保hadoop集群搭建成功

(1)Hive版本使用
版本:apache-hive-1.2.1-bin.tar.gz
上传至集群中的master机器中,并解压使用命令:

# tar -xvf apache-hive-1.2.1-bin.tar.gz

(2)配置环境变量

# vim /etc/profile

export HIVE_HOME=/hadoop/hive
export CLASSPATH=.:${HIVE_HOME}/lib:$CLASSPATH
export PATH=${HIVE_HOME}/bin:${HIVE_HOME}/conf:$PATH

# source /etc/profile

此时Hive已经可以使用


优化Hive

默认meta数据库为derby ,为了避免使用默认的Derby数据库(有并发访问和性能的问题),通常还需要配置元数据库为MySQL的操作。

1)修改在Hive目录下conf中修改xml配置

root@master:conf# pwd
/qh/src/hive/conf
root@master:conf# cp hive-default.xml.template hive-site.xml
root@master:conf# cp hive-log4j.properties.template hive-log4j.properties

Hive配置文件
即:把几个带.template后缀的模板文件,复制一份变成不带.template的配置文件,注意hive-default.xml.template这个要复制二份,一个是hive-default.xml,另一个是hive-site.xml,其中hive-site.xml为用户自定义配置,hive-default.xml为全局配置,hive启动时,-site.xml自定义配置会覆盖-default.xml全局配置的相同配置项。

2)文件配置hive-site.xml

# vim hive-site.xml
<property>
    <name>hive.exec.scratchdir</name>
    <value>/tmp/hive</value>
 </property>
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
  </property>

  <property>
    <name>hive.downloaded.resources.dir</name>
    <value>/user/hive/downloaded</value>
  </property>

  <property>
    <name>hive.exec.local.scratchdir</name>
    <value>/user/hive/scratchdir</value>
  </property>

hive.exec.local.scratchdir和hive.downloaded.resources.dir
这二项对应的目录,是指本地目录(必须先手动建好)

root@master:conf# mkdir -p /user/hive/scratchdir
root@master:conf# mkdir -p /user/hive/downloaded

hive.exec.scratchdir和hive.metastore.warehouse.dir
这两项目录为hdfs中的目录(hive启动时,会自动建好,如果自动创建失败,也可以手动通过shell在hdfs中创建

hadoop fs -mkdir -p /tmp/hive
hadoop fs -mkdir -p /user/hive/warehouse

3)文件配置hive-log4j.properties

#vim hive-log4j.properties
hive.log.dir=/user/hive/log/${user.name}

这个是当hive运行时,相应的日志文档存储到什么地方

hive.log.file=hive.log

这个是hive日志文件的名字是什么
默认的就可以,只要您能认出是日志就好,其目录要手动建立,命令为:

root@master:conf# mkdir -p /user/hive/log

4)替换hadoop 2.2.0中的jline jar包
由于hive 1.2.0自带的jline包跟hadoop 2.2.0自带的版本不一致,因此需要将$HIVE_HOME/lib/jline-2.12.jar 这个文件替换掉$HADOOP_HOME/share/hadoop/yarn/lib 下原来的版本 (即:将旧版本删除,复制新版本到此目录),否则hive启动将失败


配置MySQL存储Hive元数据

1)MySQL存储配置
此种模式下是将hive的metadata存储在Mysql中,
Mysql的运行环境支撑双向同步或是集群工作环境,
这样的话,至少两台数据库服务器上会备份hive的元数据。
既然在derby模式下的hive已经能够成功运行。
确保安装MySql,若安装跳过此步骤(apt-get install mysql-server
数据库中授权

# mysql -u root -p
mysql> create user 'hive'@'%' identified by 'hive';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%' WITH GRANT OPTION;
mysql> flush privileges;

之后,在目录/etc/mysql下找到my.cnf,用vim编辑,找到my.cnf里面的bind-address = 127.0.0.1将其注释。

mysql> use mysql;
mysql> select host, user from user;
mysql> create database hive;
mysql> use hive;
mysql> show variables like 'character_set_%';
mysql> alter database hive character set latin1;

(否则在建表的时候看Hive后台日志,报错,前台不运行)

重启mysql服务代码如下:

# /etc/init.d/mysql stop
# /etc/init.d/mysql start

2)文件配置hive-site.xml

# vim hive-site.xml
 <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://192.168.60.61:3306/hive</value>
    <description>JDBC connect string for a JDBC metastore</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
  </property>
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hive</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
  </property>

3)MySQL 驱动包
下载mysql-connector-java-5.1.18-bin.jar文件,并放到$HIVE_HOME/lib目录下

# wget http://downloads.mysql.com/archives/mysql-connector-java-5.0/mysql-connector-java-5.0.8.tar.gz .

解压:

# tar -zxvf mysql-connector-java-5.0.8.tar.gz 

将mysql-connector-java-5.0.8-bin.jar拷贝到hive lib目录下:

# cp mysql-connector-java-5.0.8/mysql-connector-java-5.0.8-bin.jar  ./lib

启动Hive

root@master:/# hive

实验代码测试Hive
1、Hive访问
(1)直接执行sql语句

# hive -e 'select * from t1'

静音模式:

# hive -S -e 'select * from t1' 

(用法与第一种方式的静音模式一样,不会显示mapreduce的操作过程)
导出数据到Linux本地目录:

# hive -e 'select * from t1' > test.txt

从文件中执行Hive查询:

# hive -f /tmp/queries.hql

在Hive shell中可以使用source命令来执行一个脚本文件:

# cat /tmp/queries.hql
select * from mytable limit 1;
# hive      -- 启动Hive
hive> source /tmp/queries.hql;

(Hive的脚本中注释使用 –)

执行shell命令:
用户不需要退出hive cli就可以执行简单的bash shell命令。只要在命令前加上!并且以分号(;)结尾就可以。

hive> ! /bin/echo "hello, world!";
"hello, world";

(2)Hive启动WEB
具体配置如下:
需要下载一个hwi.war包,采用去源码中找到hwi/web/包

# tar -zxvf apache-hive-1.2.1-src.tar.gz
# cd apache-hive-1.2.1-src/hwi
# jar cvfM0 hive-hwi-my.war -C web/ .
# mv hive-hwi-my.war /qh/src/hive/lib/hive-hwi-my.war

文件配置

# cd $HIVE_HOME/conf
# vim hive-site.xml

图1-5-1-1 Hive启动WEB配置

# hive --service hwi

开启该模式后,可通过浏览器对Hive进行操作

http://192.168.60.61:9999/hwi/

(配置Hive机器IP:端口)

(3)CLI访问(直接使用Hive交互式模式)

# hive     --启动
hive> quit;     --退出hive
hive> show databases;   --查看数据库
hive> create database test;  --创建数据库
hive> use default;    --使用哪个数据库
hive> create table t1 (key string); --创建表

或:
使用过程中出错采用

# hive -hiveconf hive.root.logger=DEBUG,console   //重启调试

(4)Hive 远程服务 (端口号10000) 启动方式:
用Java等程序实现通过JDBC等驱动的访问Hive就用这种起动方式

# hiveserver2 start

(则启动hiveserver2的用户为hive,运行mapreduce的用户也为hive,如果没有hive用户,则不能使用)
(停止服务:clt+c)

# hive --service hiveserver2 --hiveconf hive.server2.thrift.port=10001 &    --后台启动

(则启动hive-server2的用户为root,运行mapreduce的用户也为root)
(停止服务:clt+c)
或,通过查看进程# ps -ef | grep hive
然后使用# kill -9 进程号

2、Hive简单语句

hive> CREATE TABLE pokes (foo INT, bar STRING);
hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);
hive> SHOW TABLES;                             
hive> DESCRIBE pokes;

Hive简单例子

(1)准备数据集

root@master:/# vim /home/hiveclass/input/easyhive_5_1.txt

测试数据
这里写图片描述

(2)上传至Hadoop集群

root@master:/# hadoop fs -put /home/hiveclass/input/easyhive_5_1.txt   /hiveclass/input

(3)创建easyhive_5_1_1表

hive> create table easyhive_5_1_1(id int);

(4)将hdfs中的文件内容加载到表中

hive> load data inpath '/hiveclass/input/easyhive_5_1.txt' into table easyhive_5_1_1;

(5)测试求平均值

hive> select avg(id) from easyhive_5_1_1;

图1-5-3-2 Hive运行结果
这里写图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐