hive
hive
环境搭建
-
解压:tar -zxvf apach-hive....... -C /usr/local/src
-
cd /usr/local/src 执行:
-
vim /root/.bash_profile (记得source)
export HIVE_HOME=/usr/local/src/hive export PATH=$PATH:$HIVE_HOME/bin -
cd /usr/local/src/hive/conf 执行: cp hive-env.sh.template hive-env.sh
export JAVA_HOME=/usr/local/src/jdk export HADOOP_HOME=/usr/local/src/hadoop export HIVE_HOME=/usr/local/src/hive -
cp hive-default.xml.template hive-site.xml (管理元数据配置)
注意:写的时候字母大小写不能变
javax.jdo.option.ConnectionURL jdbc:mysql://l:3306/hive?createDatabaseIfNotExist=true&characterEncoding=utf8 javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver javax.jdo.option.ConnectionUserName root javax.jdo.option.ConnectionPassword 123456 hive.querylog.location /usr/local/src/hive/tmp hive.exec.local.scratchdir /usr/local/src/hive/tmp hive.downloaded.resources.dir /usr/local/src/hive/tmp -
将mysql的jdbc驱动包拷贝到/hive/lib/ : cp /h3cu/mysql-connector-java-.... /usr/local/src/hive/lib/
-
将 hive/lib 下的 jline-2.12.jar 到hadoop中:cp jline-2.12.jar /usr/local/src/hadoop/share/hadoop/yarn/lib/
-
cd /usr/local/src/hadoop/share/hadoop/yarn/lib 执行:rm -rf jline-0.9.94.jar
-
cd /usr/local/src/hive/bin 初始化hive元数据仓库: schematool -dbType mysql -initSchema
初始化成功图:
1.常用命令
-
创建内部表:
hive>create table tablename(name string,age int ,birth string) >row format delimited >fields terminated by ',' >lines terminated by '\n'; 或者: hive>create table (name string,age int ,birth string) row format delimited fields terminated by ',' lines terminated by '\n'; 区别:第一种写完之后,如果报错,只能显示任意一个 > 后面的代码 第二种写完后如果报错,可以全部出现 -
创建外部表:
hive>create external table tablename(name string,age int ,birth string) >row format delimited >fields terminated by ',' >lines terminated by '\n'; -
编辑表信息:
-
修改表名:alter table emp rename to employee;
-
修改字段:
alter table emp change name ename string;
alter table emp change salary salary double;
-
添加列:alter table emp add columns (dept string);
-
-
数据加载如入表:
load data [local] inpath 'filePath' [overwrite] into table tableName;
-
使用案例
load data local inpath '/opt/temp/hive_local.txt' overwrite into table employee;
-
-
查询语句与mysql基本一致!
2.自定义函数
写之前需要导入jar包依赖:
org.apache.hive
hive-exec
2.1.0
package com.xyz;
import org.apache.hadoop.hive.ql.exec.UDF;
/**
* @author 小勇子start
* @create 2021-10-06 13:26
*/
public class HiveOne extends UDF {
public String evaluate(String hsp) {
if (hsp.equals("协和医院") || hsp.equals("同济医院") || hsp.equals("四川大学华西医院") || hsp.equals("中国人民解放军总医院") || hsp.equals("第四军医大学西京医院"))
return "三甲";
else if(hsp.equals("复旦大学附属中山医院") || hsp.equals("中山大学附属第一医院") || hsp.equals("复旦大学附属华山医院") || hsp.equals("北京大学第一医院"))
return "二甲";
else if(hsp.equals("中国医科大学附属第一医院") || hsp.equals("中南大学湘雅二医院") || hsp.equals("北京大学第三医院"))
return "一甲";
else
return "";
}
}
3.使用自定义函数
-
将自定义好的函数打成jar包上传至Linux
-
启动hive
-
添加jar包:add jar /opt/test/xxxx.jar
-
创建自定义临时函数:create temporary function 方法名 as 'com.xyz.HiveOne';
使用案例:
hive> select h.hsp.zdy(h.hsp) , count(*) from tb_hospital h group by h.hsp;
补充:将结果写入本地文件中:
insert overwrite local directory '/opt/temp/xxx' row format delimited fields terminated by ',' select * from tb_xxx;