环境:Ubuntu 14.04
一、安装mysql创建hive数据库
sudo apt-get install mysql-server mysql-client mysql -u root -p #创建hive用户 insert into mysql.user(Host,User,Password) values("localhost","hive",password("hive")); #创建hive数据库 create database hive; #分配权限 grant all on hive.* to hive@'%' identified by 'hive'; grant all on hive.* to hive@'localhost' identified by 'hive'; flush privileges;
二、安装hive
1. 下载并解压hive
sudo wget http://mirror.bit.edu.cn/apache/hive/hive-2.1.0/apache-hive-2.1.0-bin.tar.gz sudo tar -zxvf apache-hive-2.1.0-bin.tar.gz sudo mv apache-hive-2.1.0 hive
2 . 配置环境变量
3 . 修改配置文件sudo vim /etc/profile export HIVE_HOME=/usr/local/hive export PATH=$PATH:$HIVE_HOME/bin source /etc/profile
hive中的配置文件在conf目录下
cp hive/conf/hive-default.xml.template hive/conf/hive-site.xml sudo vim hive/conf/hive-site.xml #添加以下配置 <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </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>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property>
拷贝mysql-connector-java-5.1.6-bin.jar 到hive 的lib目录中。
注:把jline-2.12.jar拷贝到hadoop的share/hadoop/yarn/lib/目录下,替代jline-0.9.94.jar,否则启动可能会报错。
4 . 在HDFS上创建hive所需目录
5 . 启动hivehadoop fs -mkdir /tmp hadoop fs -mkdir /user/hive/warehouse #修改上述路径的访问权限,使用户组具有写入权限 hadoop fs -chmod g+w /tmp hadoop fs -chmod g+w /user/hive/warehouse
报错解决:#启动hive hive #退出hive的交互式shell hive>quit;
Exception in thread "main" java.lang.RuntimeException: Hive metastore database is not initialized. Please use schematool (e.g. ./schematool -initSchema -dbType ...) to create the schema. If needed, don't forget to include the option to auto-create the underlying database in your JDBC connection string (e.g. ?createDatabaseIfNotExist=true for mysql)
执行:schematool -dbType mysql -initSchema
三、数据导入
1 . 下载UFO数据
sudo wget http://7xjg29.com1.z0.glb.clouddn.com/ufo.tsv
2 . 上传数据到HDFS
3 . 创建数据表hadoop fs -put ufo.tsv /tmp/ufo.tsv
#创建表 CREATE TABLE ufodata(sighted STRING, reported STRING,sighting_location STRING, shape STRING,duration STRING,description STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'; #查看所有的表 show tables; #使用正则匹配表名 show tables '.*data' #查看表中各字段 describe ufodata; #查看详细表描述 describe extended ufodata;
这里需要解释ROW FORMAT与FIELDS TERMINATED BY,前者告诉hive每行数据包含多个有界字段,后者则指定了分隔符为‘\t’。
4 . 将数据导入到表中
更多查询可参考附录的记录组成。#将hdfs上的文件插入ufodata表中 LOAD DATA INPATH '/tmp/ufo.tsv' OVERWRITE INTO TABLE ufodata; #统计记录数 select count(*) from ufodata; #或在终端直接执行如下语句查询 hive -e "select count(*) from ufodata;" #查看sighted字段前5列
四、Hive常用命令
#执行sql语句 hive -e "select count(*) from tablename;" #执行hql脚本 hive -f command.hql #建表语句 create table ufodata(sighted string,reported string,sighting_location string, shape string,duration string,description string) row format delimited fields terminated by '\t'; #从hdfs导入文件 load data inpath '/tmp/ufo.tsv' overwrite into table ufodata; #基于现有文件创建表 create external table states(abbreviation string,full_name string) row format delimited fields terminated by '\t'; location '/tmp/states'; #创建表并从其他表导入数据 create table tablename as select * from tablename2 ; #仅复制表结构不导入数据 create table tablename3 like tablename; #增加一个字段 alter table tablename add columns(new_col String); #修改表名 alter table oldname rename to newname; #从其他表导入数据 insert overwrite table tablename2 select * from tablename1 ; #查看所有函数 show functions; #查看函数用法 describe function substr;
附录:
UFO目击事件记录组成
Sighting date :目击发生时间
Recorded date :报告目击事件的日期
Location :目击事件发生的地点
Shape:UFO的形状
Duration:目击事件的持续时间
Description:目击事件的大致描述