hive


hive

环境搭建

  1. 解压:tar -zxvf apach-hive....... -C /usr/local/src

  2. cd /usr/local/src 执行:

  3. vim /root/.bash_profile (记得source)

    export HIVE_HOME=/usr/local/src/hive
    export PATH=$PATH:$HIVE_HOME/bin
    
  4. 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
    
  5. 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
    
    
  6. 将mysql的jdbc驱动包拷贝到/hive/lib/ : cp /h3cu/mysql-connector-java-.... /usr/local/src/hive/lib/

  7. 将 hive/lib 下的 jline-2.12.jar 到hadoop中:cp jline-2.12.jar /usr/local/src/hadoop/share/hadoop/yarn/lib/

  8. cd /usr/local/src/hadoop/share/hadoop/yarn/lib 执行:rm -rf jline-0.9.94.jar

  9. cd /usr/local/src/hive/bin 初始化hive元数据仓库: schematool -dbType mysql -initSchema

    初始化成功图:

1.常用命令

  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';
    
    区别:第一种写完之后,如果报错,只能显示任意一个 > 后面的代码
         第二种写完后如果报错,可以全部出现
    
  2. 创建外部表:

    hive>create external table tablename(name string,age int ,birth string)
        >row format delimited
        >fields terminated by ','
        >lines terminated by '\n';
    
  3. 编辑表信息:

    • 修改表名: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);

  4. 数据加载如入表:

    load data [local] inpath 'filePath' [overwrite] into table tableName;

    • 使用案例

      load data local inpath '/opt/temp/hive_local.txt' overwrite into table employee;

  5. 查询语句与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.使用自定义函数

  1. 将自定义好的函数打成jar包上传至Linux

  2. 启动hive

  3. 添加jar包:add jar /opt/test/xxxx.jar

  4. 创建自定义临时函数: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;