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; |
|
来自: 昵称23016082 > 《Hive》