Hive学习笔记

3 篇文章 0 订阅
3 篇文章 0 订阅
  • Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
  • 解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
  • Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select * from tbl不会生成MapRedcue任务)。

Hive的数据类型

  • primitive_type:
    | array_type
    | map_type
    | struct_type
  • primitive_type:
    |TINYINT
    | SMALLINT
    | INT
    | BIGINT
    | BOOLEAN
    | FLOAT
    | DOUBLE
    | STRING

Hive内部表与外部表的区别

未被external修饰的是内部表(managed table),被external修饰的为外部表(external table)。

  • 内部表数据由Hive自身管理,外部表数据由HDFS管理;
  • 内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定;
  • 删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
    对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

hive搭建-单用户模式

  1. 安装mysql;
  2. 上传apache-hive-3.1.1-bin.tar.gz并解压到/opt/目录下
tar -zxvf  apache-hive-3.1.1-bin.tar.gz -C /opt/
  1. 环境配置
vi /etc/profile

export HIVE_HOME=/opt/apache-hive-3.1.1-bin
export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEPPER_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin

  1. 修改hive-site.xml
    切换到/opt/apache-hive-3.1.1-bin/conf目录下,将hive-default.xml.template 拷贝一份,并重命名为hive-site.xml
    然后编辑hive-site.xml文件。
cp hive-default.xml.template hive-site.xml
vi hive-site.xml
<!-- 指定HDFS中的hive仓库地址 -->  
<property>  
  <name>hive.metastore.warehouse.dir</name>  
  <value>/root/hive/warehouse</value>  
</property>  
   
<property>  
  <name>hive.metastore.local</name>  
  <value>true</value>  
</property>  

<!-- 指定mysql的连接 -->
<property>  
  <name>javax.jdo.option.ConnectionURL</name>  
  <value>jdbc:mysql://localhost/hive_remote?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>root</value>  
</property>  
   
<property>  
  <name>javax.jdo.option.ConnectionPassword</name>  
  <value>password</value>  
</property> 

注: hive-site.xml 文件中的配置过多,配置自己所需的即可,其他的可以删除。

  1. 添加数据驱动包
    将mysql 的驱动包上传到 /opt/apache-hive-3.1.1-bin/lib。

  2. 初始化数据库
    记得先启动mysql服务

schematool  -initSchema -dbType mysql

执行成功之后,可以看到hive数据库和一堆表已经创建成功了。

  1. 进入hive
    hive的数据存储在hdfs中,因此要先启动hdfs,启动顺序如下:

    • 先在zookeeper节点上启动zk服务:zkServer.sh start

    • 在主namenode上启动hdfs:start-dfs.sh

    • 启动yarn:start-yarn.sh,通过jps查看是否全部启动成功;

    • 启动hive:

      • 输入hive进入hive窗口。hive命令默认是启动client服务,相当于
      hive --service cli
      

      此方式不需要启动server,使用本地的metastore,可以直接做一些简单的数据操作和测试。

      • 使用远程的metastore,metastore可以和hive客户端不在一个机器上。
      服务器1启动metastore服务
      
      hive --service metastore
      

      如上启动,会启动端口号默认9083的metastore服务,也可以通过-p指定端口号。

      hive --service metastore -p 9083
      
      服务器2作为客户端做如下配置,可使其连接服务器1的metastore.
      
      <property>  
        <name>hive.metastore.local</name>  
        <value>false</value>  
      </property>
      
      <property>
         <name>hive.metastore.uris</name>
         <value>thrift://node01:9083</value><!-- 此处是服务器1的ip -->
      </property>
      
      

      然后服务器2直接输入 hive 启动cli即可。此时不需要启动server,使用远程的metastore。

  2. hive基本操作

    • 创建库:
    create database db_hive_test;
    
    • 创建表:
    create table db_hive_test.student(id int,name string) row format delimited fields terminated by '\t';
    

    说明: terminated by ‘\t’ 表示文本分隔符要使用Tab,行与行之间不能有空格。

    • 准备数据文件
    vim /home/hive/student.txt
    中间的空格符使用Tab建
    
    1001    zhangsan
    1002    lisi
    1003    wangwu
    
    • 加载数据
    load data local inpath '/home/hive/student.txt'  into table db_hivetest.student;
    
    select * from db_hiveTest.student;
    

wordcount案例

  • 建表
create table docs(line string);

create table wc(word string, num int);
  • 加载数据
1、建数据
vi /home/temp/wc

hadoop java
hello lemon hadoop
java lemon
lemon

2、加载数据
load data local inpath '/home/temp/wc' into table docs;

  • 统计单词个数
from (select explode(split(line, ' ')) as word from docs) w 
insert into table wc 
  select word, count(1) as num 
  group by word 
  order by word;

  • 查询结果
select * from wc;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值