1.安装:
1.只需要解压压缩包;
2.将conf目录下的hive-default.xml.template --> hive-site.xml,配置文件内容不需要修改和配置;
3.hive是运行在HDFS之上的,必须给hadoop2.X配置环境变量,hive启动的时候会根据环境变量去读取HDFS的信息。
export HADOOP_HOME=/opt/hadoop-2.5.1
export PATH=$PATH:$HADOOP_HOME/bin
4.hive运行还需要mysql数据库的支持:安装mysql数据库;
将mysql-connector-java-5.1.32.tar.gz里面的连接数据库的jar包复制到hive目录的lib目录下。
5.给用户授权:
mysql>grant all on *.* to root@'%' identified by '123456';
mysql>grant all on *.* to root@'Ivan-PC1' identified by '123456'
6.配置文件hive-site.xml
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://Ivan-PC1/hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
7.运行:bin目录 ./hive 进入。
(其中又步骤不是必须的,但是后面会用到,就直接配置了)
2.hive命令的使用:类似于sql语句。
注意:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes
是到mysql中的hive数据库里执行 alter database hive character set latin1;改变hive元数据库的字符集,问题就可以解决!
3.创建表格举例:数组,map,集合,files
create table t_stu(
id int,
name string,
age int,
like array<string>,
tedian struct<color:string,classid:int>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '_'
MAP KEYS TERMINATED BY ':';
输入文件格式:
1,张三,25,sport1_book1_TV1_BM1,color:red1_classid:11
2,李四,27,sport2_book2_TV2_BM2,color:red2_classid:12
3,王五,35,sport3_book3_TV3_BM3,color:red3_classid:13
4,赵六,22,sport4_book4_TV4_BM4,color:red4_classid:14
加载文件命令:
load data local inpath ‘/root/data.txt’ into table t_stu;
hive在运行时有一些元数据需要保存。默认保持到DBMS。
4.通过java调用hive:
通过java调用hive命令。
开启hive服务hiveserver2
修改配置文件:
<name>hive.server2.thrift.bind.host</name>
<value>Ivan-PC1</value> //监听指定主机,不能使用localhost,否则是监听127.0.0.1
<name>hive.localize.resource.wait.interval</name>
<value>5000(L)</value> //hivede BUG 改成5000
启动服务:
hive --servic hiveserver2
后台启动服务
hive --servic hiveserver2 &>/dev/null &
测试:
找另外一台机器,解压hive
./beeline
!connect jdbc:hive2://192.168.1.246:10000/default
root
连接成功之后可以运行ddl,dml等
开放javajdbc客户端连接hiveserver2
java代码:
package hiveTest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class HiveJDBC {
public static void main(String[] args) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
Class.forName("org.apache.hive.jdbc.HiveDriver");
conn = DriverManager.getConnection("jdbc:hive2://Ivan-PC1:10000/default", "root", "");
st = conn.createStatement();
rs = st.executeQuery("select count(*) from t_tmp ");
System.out.println(rs.getRow());
} catch (Exception e) {
e.printStackTrace();
}
}
}
5.正则表达式建表:对于那些规则不好判断的文件使用正则表达式匹配
add jar /opt/apache-hive-0.13.0/lib/hive-contrib-0.13.1.jar;需要jar
tomcat登陆日志文件对应的表创建:
create table t_log(
host string,
identity string,
user string,
time string,
request string,
status string,
size string)
row format
serde 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
with serdeproperties
("input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) (\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)")
stored as textfile;
([^ ]*):除空格,匹配任意,一个()表示一个单元,每个()之间有空格
(-|\\[[^\\]]*\\]):[]中的额内容,但是去除[]
6.课外题:自定义函数UDF
count(),max(),min()......
load data inpath '/root/core.txt' into table t_core;
FAILED: SemanticException Line 1:17 Invalid path ''/root/core.txt'': No files matching path hdfs://mycluster/root/core.txt
错误原因:没有家local,默认的从hdfs中找文件
自定义函数的jar包添加,创建,使用:
add jar /home/user/hadoop_jar/hiveudf.jar;
create temporary function pass_score AS ‘com.oserp.hiveudf.PassExam’;
select stuNo,pass_score(score) from student;
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。