Hadoop之Hive的安装与配置
环境信息:虚拟机数量:3台操作系统:Ubuntu 14.04实验环境及版本:Hadoop:Hadoop 2.2.0Java:java version "1.7.0_51"Hive:apache-hive-1.2.1MySQL:mysqlVer 14.14 Distrib 5.5.44(x86_64)安装Hive之前首先要确保hadoop集群搭建成功(1)Hive
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运行结果
更多推荐
所有评论(0)