精华内容
下载资源
问答
  • Hive权威指南

    2018-06-19 10:37:47
    hive编程指南你值得拥有的书hive编程指南你值得拥有的书
  • HBase权威指南,和Hive权威指南,这两部书都是高清并且有自带目录,阅读起来非常方便,内容十分全面。
  • Hive权威指南学习笔记

    2019-07-20 14:33:20
    原文链接: Hive权威指南学习笔记
    展开全文
  • 1:hive 1.1:hive简介 Hive 由 Facebook 实现并开源,是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据 映射为一张数据库表,并提供 HQL(Hive SQL)查询功能,底层数据是存储在 HDFS 上。Hive 的本质是将 SQL ...

    (一)hive权威指南学习

    1:hive简介

    1.1:hive简介

    Hive 由 Facebook 实现并开源,是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据
    映射为一张数据库表,并提供 HQL(Hive SQL)查询功能,底层数据是存储在 HDFS 上。Hive
    的本质是将 SQL 语句转换为 MapReduce 任务运行,使不熟悉 MapReduce 的用户很方便地利
    用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。
    Hive 只适合用来做海量离线数据统计分析,也就是数据仓库

    1.2:架构

    CLI,Shell 终端命令行(Command Line Interface),采用交互形式使用 Hive 命令行与 Hive进行交互,最常用(学习,调试,生产)
    JDBC/ODBC,是 Hive 的基于 JDBC 操作提供的客户端,用户(开发员,运维人员)通过这连接至Hive server 服务

    Web UI,通过浏览器访问 Hive
    hive架构

    语句执行
    在这里插入图片描述

    1.3:优缺点

    1:优点:

    1、可扩展性,横向扩展,Hive 可以自由的扩展集群的规模,一般情况下不需要重启服务
    横向扩展:通过分担压力的方式扩展集群的规模
    纵向扩展:一台服务器cpu i7-6700k 4核心8线程,8核心16线程,内存64G => 128G
    2、延展性,Hive 支持自定义函数,用户可以根据自己的需求来实现自己的函数
    3、良好的容错性,可以保障即使有节点出现问题,SQL 语句仍可完成执行

    2:缺点:

    1、Hive 不支持记录级别的增删改操作,但是用户可以通过查询生成新表或者将查询结
    果导入到文件中
    2、Hive 的查询延时很严重,因为 MapReduce Job 的启动过程消耗很长时间,所以不能用在交互查询系统中。
    3、Hive 不支持事务

    1.4、Hive 的数据存储

    1:存储结构

    1、Hive 的存储结构包括数据库、表、视图、分区和表数据等。数据库,表,分区等等都对
    应 HDFS 上的一个目录。表数据对应 HDFS 对应目录下的文件。
    2、Hive 中所有的数据都存储在 HDFS 中,没有专门的数据存储格式,因为 Hive 是读模式
    (Schema On Read),可支持 TextFile,SequenceFile,RCFile 或者自定义格式等
    3、 只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据
    Hive 的默认列分隔符:控制符 Ctrl + A,\x01
    Hive 的默认行分隔符:换行符 \n 4、Hive 中包含以下数据模型:
    database:在 HDFS 中表现为${hive.metastore.warehouse.dir}目录下一个文件夹
    table:在 HDFS 中表现所属 database 目录下一个文件夹

    external table:与 table 类似,不过其数据存放位置可以指定任意 HDFS 目录路径
    partition:在 HDFS 中表现为 table 目录下的子目录
    bucket:在 HDFS 中表现为同一个表目录或者分区目录下根据某个字段的值进行 hash 散列之后的多个文件
    view:与传统数据库类似,只读,基于基本表创建
    5、Hive 的元数据存储在 RDBMS 中,除元数据外的其它所有数据都基于 HDFS 存储。默认情况下,Hive 元数据保存在内嵌的 Derby 数据库中,只能允许一个会话连接,只适合简单的测试。实际生产环境中不适用,为了支持多用户会话,则需要一个独立的元数据库,使用MySQL 作为元数据库,Hive 内部对 MySQL 提供了很好的支持。
    6、Hive 中的表分为内部表、外部表、分区表和 Bucket 表

    2:内部表和外部表的区别:

    表数据的管理对象不同:
    删除内部表,删除表元数据和数据
    删除外部表,删除元数据,不删除数据
    内部表和外部表的使用选择:
    外部表:对已经存在的hdfs数据直接建表可使用,通过指定location路径加载文件。

    hive 其实仅仅只是对存储在HDFS 上的数据提供了一种新的抽象。而不是管理存储在 HDFS 上的数据。所以不管创建内部表还是外部表,都可以对 hive 表的数据存储目录中的数据进行增删操作。

    3:分区表和分桶表的区别:

    Hive 数据表可以根据某些字段进行分区操作,细化数据管理,可以让部分查询更快。同时表和分区也可以进一步被划分为 Buckets,分桶表的原理和 MapReduce 编程中的HashPartitioner 的原理类似
    分区和分桶都是细化数据管理,但是分区表是手动添加区分,由于 Hive 是读模式,所以对添加进分区的数据不做模式校验,分桶表中的数据是按照某些分桶字段进行 hash 散列形成的多个文件,所以数据的准确性也高很多
    分区:根据字段分区。分桶:根据字段hash散列

    2:hive的数据类型和文件格式

    1:数据类型

    1.1:基本数据类型

    tinyInt(byte),smallint(short),int,bigint(long),float,double,boolean,string类型

    1.2:集合数据类型

    Array数组:类型是通过下标来取值,字段的类型必须相同
    Map类型:key–>v的键值对,是通过key来取值
    Struct类型:类似于对象是通过定义时的名称来取值,和map区别是字段类型可以不同

    2:文本文件分隔符和编码

    2.1:hive默认分隔符

    换行:\n
    列分割:^A 	在创建表时使用,可用八进制\001代替
    集合类型数据分隔符:^B  可用八进制\002代替
    

    2.2:各类型文件分隔符

    CSV文件:数值间用逗号分割,行用\n
    TSV文件:数据间用回车键分隔符,换行\N

    3:HQL语句

    3.1:3种客户端

    1:hive

    在bin目录下,执行hive进入

    2:HiveServer2/beeline

    3:web UI

    在hive-site.xml配置文件中配置了ip和端口等信息
    浏览器输入:ip:port/hwi

    3.2:HQL的库表操作

    hive数据库shell操作语句
    包括ddl和dml操作

    4:hive的索引

    因为hive中的表是没有像在mysql中一样的主键的,所以为了提升查询速度,可以创建索引来实现。但是维护索引会消耗额外的存储空间

    4.1:索引操作

    创建索引:create index indexname on table tablename;
    删除索引:delet index if exists indexname on table tablename;
    查看索引:show index on table;

    5:调优

    5.1:explain解析HQL

    使用explain功能可以查看我们的HQL是如何转化为MR任务去执行的。
    使用:explain 加执行语句即可。explain hql;
    比如:explain select * …;

    5.2:join优化

    5.3:严格模式

    严格模式是为了避免执行不好的查询语句:比如查询分区表不指定分区。过多的数据查询会非常慢。

    情况1:查询分区表必须通过where 指定分区去过滤
    情况2:order by 排序必须跟limit限制返回结果条数
    情况3:join笛卡尔积关联使用on而不是直接用where过滤
    

    5.4:索引

    索引会加快group by语句执行
    等等以及其他优化

    展开全文
  • hive权威指南<一>

    2018-02-10 22:49:00
    一、ETL介绍: ... hive的版本:apache-hive-1.2.1 、hive-0.13.1-cdh5.3.6 https://github.com/apache/ 主要查看版本的依赖 下载地址: apache的: http://archive.apache.org/dist/hive/ cdh的: ...

    一、ETL介绍:
      数据抽取:把不同的数据源数据抓取过来,存到某个地方
      数据清洗:过滤那些不符合要求的数据或者修正数据之后再进行抽取
        不完整的数据:比如数据里一些应该有的信息缺失,需要补全后再写入数据仓库
        错误的数据:比如字符串数据后面有一个回车操作、日期格式不正确、日期越界等,需要修正之后再抽取
        重复的数据:重复数据记录的所有字段,需要去重
      数据转换:不一致的数据转换,比如同一个供应商在结算系统的编码是XX0001,而在CRM中编码是YY0001,统一编码 实现有多种方法:
    1、借助ETL工具(如Oracle的OWB、SQL Server的DTS、SQL Server的SSIS服务、Informatic等等)实现

      OWB:Oracle Warehouse Builder
      DTS:Data Transformation Service
      SSIS:SQL Server Integration Services
    2、SQL方式实现
    3、ETL工具和SQL相结合-----》间接引出hive
      借助工具可以快速的建立起ETL工程,屏蔽了复杂的编码任务,提高了速度,降低了难度,但是缺少灵活性。
      SQL的方法优点是灵活,提高ETL运行效率,但是编码复杂,对技术要求比较高。
      第三种是综合了前面二种的优点,会极大地提高ETL的开发速度和效率

    二、大数据平台架构概述:
      数据抽取:Canal/Sqoop(主要解决数据库数据接入问题)、还有大量的数据采用Flume解决方案
      数据存储:HDFS(文件存储)、HBase(KV存储)、Kafka(消息缓存)
      调度:采用了Yarn的统一调度以及Kubernetes的基于容器的管理和调度的技术
      计算分析:MR、HIVE、Storm、Spark、Kylin以及深度学习平台比如Caffe、Tensorflow等等
      应用平台:交互分析sql,多维分析:时间、地域等等,
      可视化:数据分析tableau,阿里datav、hcharts、echarts
      数据应用就是指数据的业务

    三、hive概述:
    由Facebook开源用于解决海量结构化日志的数据统计,后称为Apache Hive为一个开源项目
      结构化数据:数据类型,字段,value---》hive
      非结构化数据:比如文本、图片、音频、视频---》会有非关系型数据库存储,或者转换为结构化
      结构化日志数据:服务器生成的日志数据,会以空格或者指表符分割的数据,比如:apache、nginx等等
    Hive 是一个基于 Hadoop 文件系统之上的数据仓库架构,存储用hdfs,计算用mapreduce
    Hive 可以理解为一个工具,不存在主从架构,不需要安装在每台服务器上,只需要安装几台就行了
    hive还支持类sql语言,它可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能
    hive有个默认数据库:derby,默认存储元数据---》后期转换成关系型数据库存储mysql
      hive的版本:apache-hive-1.2.1 、hive-0.13.1-cdh5.3.6
      https://github.com/apache/ 主要查看版本的依赖
    下载地址:
      apache的:http://archive.apache.org/dist/hive/
      cdh的:http://archive.cloudera.com/cdh5/cdh/5/
    sql on hadoop的框架:
    hive--》披着sql外衣的map-reduce
    impala--》查询引擎,适用于交互式的实时处理场景
    presto--》分布式的sql查询引擎,适用于实时的数据分析
    spark sql
    等等。。。。
    https://www.cnblogs.com/tgzhu/p/7483422.html

    四、Hive的体系结构

      client:
        命令行 -常用
        JDBC

    metastore元数据:存储在数据库
      默认的数据库derby
      改成mysql
    元数据:表名,表的所属的数据库,表的拥有者,表的分区信息,表的类型,表数据的存储的位置
      cli-》metastore
      TBLS-》DBS-》hdfs的路径
    Driver:
      解析器:解析的HQL语句
      编译器:把HQL翻译成mapreduce代码
      优化器:优化
      执行器:把代码提交给yarn

    Hadoop:
      使用mapreduce的计算模型
      使用hdfs进行存储hive表数据

    五、Hive安装及使用

    请访问:http://www.cnblogs.com/xningge/p/8433792.html

     

    六、Hive客户端的基础语句:
      1、进入到hive的客户端:bin/hive;
      2、查看数据库:show databases;
      3、创建数据库:create database test;
      4、进入到数据库:use test;
      5、查看表:show tables;
      6、数据类型:
        tinyint、smallint、int、bigint -》int
        float、double、date
        string、vachar、char -》string
      7、create table hive_table(
          id int,
          name string
        );
      8、加载数据:
          load data local inpath '/opt/datas/hive_test.txt' into table hive_table;
          local:指定本地的数据文件存放路径
          不加local:指定数据在hdfs的路径
      9、查询语句:
        select * from hive_table;
      10、hive的默认数据分隔符是\001,也就是^A ,分割符 " ", "," ,"\t"等等
        如果说数据的分隔符与表的数据分隔符不一致的话,读取数据为null
          按下crtl+v然后再按下crtl+a就会出来^A(\001)

        create table row_table(
          id int,
          name string
          )ROW FORMAT DELIMITED FIELDS TERMINATED BY " ";

         load data local inpath '/opt/datas/hive_test.txt' into table row_table;

    七、hive在hdfs上的文件结构
          数据仓库的位置                数据库目录           表目录          表的数据文件
      /user/hive/warehouse             /test.db             /row_table       /hive_test.txt
      default默认的数据库:指的就是这个/user/hive/warehouse路径

    八、修改元数据存储的数据库:
      1、用bin/hive同时打开多个客户端会报错
        java.sql.SQLException: Another instance of Derby may have already booted the database /opt/modules/apache/hive-1.2.1/metastore_db.

        derby数据库默认只能开启一个客户端,这是一个缺陷,换个数据库存储元数据
        数据库可选有这几种:derby mssql mysql oracle postgres
        一般选择mysql元数据存储
      2、安装mysql
        查看自己虚拟机有没有mysql的安装包
        sudo rpm -qa | grep mysql
        卸载:sudo rpm -e --nodeps mysql-libs-5.1.66-2.el6_3.x86_64
        卸载完成之后再查看一下,确保卸载完成

        安装mysql服务:
        sudo yum -y install mysql-server
        (如果yum源有问题,那就更换一下yum源即可)
        安装完成之后
        sudo rpm -qa | grep mysql
        mysql-server-5.1.73-8.el6_8.x86_64
        mysql-5.1.73-8.el6_8.x86_64
        mysql-libs-5.1.73-8.el6_8.x86_64
        》查看mysql的服务
          chkconfig | grep mysql
        》开启mysqld的服务
        启动:sudo service mysqld start
        设置登陆密码:mysqladmin -u xningge password '????'
        设置开机启动:sudo chkconfig mysqld on
        进入mysql:
        mysql -uxningge -p????
        查询用户信息
        mysql> select User,Host,Password from user;
        设置远程登录权限
        mysql> grant all privileges on *.* to 'xningge'@'%' identified by '????' with grant option;
        删除用户信息
        mysql> delete from user where user='root' and host='127.0.0.1';
        刷新信息
        mysql> flush privileges;
        重启mysqld服务
        service mysqld restart
        退出mysql客户端
        qiut+;或者crtl+C
        重启mysqld服务
        sudo service mysqld restart

        可选项:用Windows工具操作linux上的mysql
        授权:grant all privileges on *.* to 'root'@'192.168.111.1' identified by '123456' with grant option;
        刷新信息
        mysql> flush privileges;
      3.配置hive-site.xml
        1、修改hive-site.xml
          https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin

        <property>
          <name>javax.jdo.option.ConnectionURL</name>
          <value>jdbc:mysql://hadoop01.xningge.com/metastore?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>xningge</value>
        </property>

        <property>
          <name>javax.jdo.option.ConnectionPassword</name>
          <value>????</value>
        </property>

      2、将驱动jar包拷贝到hive的lib目录下
        mysql-connector-java-5.1.27-bin.jar
      3、完成,可以启动hive bin/hive

      4、在mysql的metastore数据库中找到信息
        DBS:database 存储的hive数据库的信息
        TBLS:table 存储hive表的信息

    九、Hive操作命令
      1、描述表信息
        desc tablename;
        desc extended 表名;
        desc formatted 表名;
      2、修改表名
        alter table table_oldname rename to new_table_name;
      3、给表增加一个列
        alter table new_table add columns(age int);
        alter table new_table add columns(sex string comment 'sex');添加注释
      4、修改列的名字以及类型
        create table test_change(a int,b int,c int);
        修改列名 a -> a1
        alter table test_change change a a1 int;
        a1改a2,数据类型改成String,并且放在b的后面;
        alter table test_change change a1 a2 string after b int;
        将c改成c1,并放在第一列
        alter table test_change change c c1 int first;

      5、替换列(不能删除列,但是可以修改和替换,)是全表替换
        ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
        alter table test_change replace columns(foo int , too string);

      6、清除表数据truncate
        只清除表数据,元数据信息还是存在的,表的结构已经表还是在的
        truncate table row_table;
      7、删除表数据drop
        drop table row_table;
        清除数据,表以及表的结构清除,元数据也清除
      8、删除数据库
        drop database test_db CASCADE;
       删除数据库的信息,如果数据库不为空的话,则要加CASCADE字段
      9、查看hive自带的函数: show functions;
        desc function when;
        desc function extended when; ->查看详细的用法

    十、hive的常用配置
      1、hive的日志文件log4j:默认是在${java.io.tmpdir}/${user.name}也就是/tmp/hadoop/hive.log
        修改 hive-log4j.properties.template 修改为hive-log4j.properties
        修改 hive.log.dir=/opt/modules/apache/hive-1.2.1/logs
      2、显示数据库和列名,添加配置信息到hive-site.xml
        <property>
          <name>hive.cli.print.header</name>
          <value>true</value>
        </property>
        <property>
          <name>hive.cli.print.current.db</name>
          <value>true</value>
        </property>

    十一、hive常用的linux命令选项
      查看帮助信息 bin/hive -help
        1、--database指定登陆到哪个database 下面去
          bin/hive --database mydb;

        2、指定一条sql语句,必须用引号包裹
          bin/hive -e 'show databses'
          bin/hive -e 'select * from mydb.new_table'

        3、指定写sql语句的文件,执行sql
          bin/hive -f hivesql
          指定一些较为的sql语句,周期性的执行

        4、查看sql语句文件
          bin/hive -i hivesql
          执行文件的sql语句并进入到hive的客户端
          用来初始化一些操作

        5、bin/hive -S hivesql
          静默模式

        6、在当前回话窗口修改参数的属性,临时生效
          bin/hive --hiveconf hive.cli.print.header=false;

        7、在hive的客户端中使用set修改参数属性(临时生效),以及查看参数的属性
          set hive.cli.print.header -》查看参数的属性
          set hive.cli.print.header=true; -》修改参数属性

        8、常用的shell : !dfs
          -》! 表示访问的linux本地的文件系统 ->! ls /opt/modules/apache/
          -》dfs表示访问的是hdfs的文件系统 -> dfs -ls /;

        9、CREATE database_name[LOCATION hdfs_path]
          create database hive_test LOCATION "/location";
          自定义数据库在hdfs上的路径,把指定/location当成默认的数据库,
          所以这边数据库的名字不显示


        

     

    转载于:https://www.cnblogs.com/xningge/p/8439970.html

    展开全文
  • hive 权威 1、创建数据库 create database if not exists financials comment ‘hold all financial tables’ with dbproperties(‘creator’=‘wuwc’,‘date’=‘2019-12-09’); 2、设置变量和属性 set hive.cli....

    hive 权威
    1、创建数据库
    create database if not exists financials
    comment ‘hold all financial tables’
    with dbproperties(‘creator’=‘wuwc’,‘date’=‘2019-12-09’);

    2、设置变量和属性
    set hive.cli.print.current.db=true;

    3、删除数据库
    drop database if exists financials cascade;

    4、修改数据库
    alter database financials set dbproperties(‘updated’=‘greekw’)

    5、创建表

    • 内部表
      create table if not exists employees(
      name STRING,
      salary FLOAT,
      subordinates ARRAY,
      deductions MAP<STRING,FLOAT>
      )
      row format delimited
      fields terminated by ‘\001’
      collection items terminated by ‘\002’
      map keys terminated by ‘\003’
      line terminated by ‘\n’
      comment ‘员工表’
      tblproperties(‘creator’=‘wuwc’,‘date’=‘2019-12-09’)
      location ‘/user/hive/warehouse/financials.db/employees’;
    • like创建表
      create table if not exists employees02
      like financials.employees;

    create external table if not exists financials.stocks
    (
    stock_code STRING,
    symbol STRING,
    price_open FLOAT,
    price_high FLOAT,
    price_low FLOAT,
    price_close FLOAT
    )
    row format delimited fields terminated by ‘,’
    location ‘/data/stocks’;

    • 外部表

    6、查看表
    describe formatted employees;

    7、分区表和管理表

    • 内部分区表
      create table if not exists employees_part(
      name STRING,
      salary FLOAT,
      subordinates ARRAY,
      deductions MAP<STRING,FLOAT>
      )
      partitioned by (country string,state string)
      ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’ ;

    • 外部分区表
      create external table if not exists log_msg(
      hms int,
      serverity string,
      server string,
      processId int,
      msg string
      )
      partitioned by (year int,month int,day int)
      row format delimited fields terminated by ‘\t’;

    修改表
    1、表重命名
    alter table log_msg rename to log_msg_new

    2、增删改表的分区
    alter table log_msg add if not exists
    partition by(year=2019,month=12) location ‘/logs/2019/12’;

    alter table log_msg drop if exists partition(year=2019,month=12);

    3、增删改列
    alter table log_msg add columns(
    app_name string comment ‘应用名称’
    )

    4、修改表

    • 修改表属性

      • alter table table_name set tblproperties(‘key’=‘value’);
    • 修改表其他属性

    • alter table … achive/unachive/touch partition; 分区操作

    • alter table table_name partition(year=2019,month=12) enable no_drop; 开启分区保护

    数据操作

    create table t10(

    id int

    ,name string

    ,hobby array

    ,add map<String,string>

    )

    partitioned by (pt_d string,sex string)

    row format delimited

    fields terminated by ‘,’

    collection items terminated by ‘-’

    map keys terminated by ‘:’

    ;

    create table t1(

    id int

    ,name string

    ,hobby array

    ,add map<String,string>

    )

    partitioned by (pt_d string)

    row format delimited

    fields terminated by ‘,’

    collection items terminated by ‘-’

    map keys terminated by ‘:’

    ;

    装载数据

    从本地文件系统导入数据
    从HDFS中导入数据
    从其他的Hive表中导入数据
    创建表的同时导入数据

    • load data local inpath ‘本地路径’ overwrite into table table_name partition();
      正确操作:
      load data local inpath ‘/data/hive’ overwrite into table log_msg partition(year=2019,month=12,day=10);

    insert overwrite table log_msg partition(year=2019,month=12,day=11) select * from log_msg;

    Need to specify partition columns because the destination table is partitioned

    Partition not found ‘12’

    • load data inpath ‘分布式文件路径’ overwrite into table table_name partition();

    • insert overwrite table table_name partition() select *from table_name;

    • 动态分区和静态分区,静态分区必须在动态分区前;

        - hive.exec.dynamic.partition=true:开启动态分区;
        
        - hive.exec.dynamic.partition.mode=nostrict: 容许所有分区都是动态;
        
        - hive.exec.max.dynamic.partitions.pernode=100:每个mapper或reduce创建的最大动态分区个数;
        
        - hive.exec.max.dynamic.partitions=1000:最大可创建动态分区个数;
        
        - hive.exec.max.created.files=1000:全局可以创建的最大文件个数;
      

    from stu
    insert into table student01 partition(city=‘beijing’) select id, sname, age where city=‘beijing’
    insert into table student02 partition(city=‘shanghai’) select id, sname, age where city=‘shanghai’;

    • 创建表
      create external table if not exists student(
      id string,
      sname string,
      age int
      )
      row format delimited fields terminated by ‘,’;

    create table if not exists student_hdfs(id string,sname string,age int)
    row format delimited fields terminated by ‘,’
    lines terminated by ‘\n’;

    create table if not exists student_insert(id string,sname string,age int)
    row format delimited fields terminated by ‘,’
    lines terminated by ‘\n’;

    • 从本地加载数据
      load data local inpath ‘/data/hive/student.txt’ overwrite into table student;

    • 从hdfs

    load data inpath ‘/user/hdfs/student.txt’ overwrite into table student_hdfs;

    • 错误:
      Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask

    • insert 方式
      insert overwrite table student_insert select * from student;

    • from insert方式
      from student insert into table student_insert select id,sname,age where age>28;

    • 创建分区表
      create external table if not exists student_part(id string,sname string,age int)
      partitioned by (city string)
      row format delimited fields terminated by ‘,’
      lines terminated by ‘\n’;

    create external table if not exists student__double_part(id string,sname string,age int)
    partitioned by (country string,city string)
    row format delimited fields terminated by ‘,’
    lines terminated by ‘\n’;

    • 添加分区

    ALTER TABLE student_part ADD if not exists PARTITION(city=‘beijing’) location ‘分区位置’

    FAILED:SemanticException table is not partitioned but partition spec exists:{address=china}
    在新建表的时候,并没有创建分区列address,所以只有在存在分区列的表上执行增加分区的操作,才会成功。

    • 加载分区数据
      ALTER TABLE student_part ADD if not exists PARTITION(city=‘shanghai’)
    • load data local inpath ‘/data/hive/student.txt’ overwrite into table student_part partition(city=‘beijing’);
    • insert 方式
      from student
      insert into table student_part partition(city=‘guangdong’) select id,sname,age
      insert into table student_part partition(city=‘chongqing’) select id,sname,age;

    from student
    insert into table student_double_part partition(country='china,'city=‘chongqing’) select id,sname,age;

    • 修复分区

      dfs -mkdir /user/hive/warehouse/financials.db/student__double_part/country=japan/city=tokoy;

      • msck repair table table_name;
    • 查看分区

      • show partitions table_name;
    • 动态分区

    set hive.exec.dynamic.partition=true;
    set hive.exec.dynamic.partition.mode=nostrict;

    from student_part

    insert into table student_part partition(city) select id, sname, age, city

    insert into table student_part partition(city) select id, sname, age, city ;

    • 静态和动态混合的

    • 创建表的同时导入数据

      • create table student_part_create as select * from student_part;
    • 分桶:分区和分桶都是按字段来组织数据的存放,
      分区是相同的字段值存放在一个文件中,而分桶是字段哈希值相同的数据存放在一个文件中。
      create table student_cluster( id string, sname string, age int)
      clustered by(id) into 2 buckets
      row format delimited fields terminated by ‘,’
      lines terminated by ‘\n’;

    • 数据导出

    • 导出到本地
      insert overwrite directory ‘’ select * from student where age>28;

    insert overwrite local directory ‘/data/hive/student_export.txt’ select * from student where age>28;

    • 导出到hdfs

    http://blog.leanote.com/post/yongjian3311@163.com/Hive%E4%BF%AE%E6%94%B9%E8%A1%A8%E7%BB%93%E6%9E%84

    ####hive查询

    case …when … then
    select id,sname,age,
    case
    when age>30 then ‘old’
    when age>30 and age<20 then ‘mid’
    else ‘young’
    end as level from student;

    • hive join查询

      • left/right/full/笛卡尔积/

      • 关闭笛卡尔积:set hive.mapred.mode=strict

      • map-side join查询

    • order by /sort by等

      • set hive.mapred.mode=strict 则使用order by 需要加上limit

      • order by 全局排序,sort by 局部排序

      • distribute by 和group by

    • 类型转换函数cast(field as int ),round(),floor()

    索引

    模式

    • 分区方案

    • 唯一键和标准化

    • 每个表的分区

    调优

    • explain/explain externed 使用

    • limit限制调整

    • join 优化

    • 本地模式

    • 并行执行

    • 严格模式

    • 调整mapper和reducer个数

    • JVM重用

    • 动态分区数调整

    • 单个mr中多个group by

    文件格式和压缩方法

    • 查看编解码器

    • 设置中间压缩
      set hive.exec.compress.intermediate=true

    • 设置输出压缩
      set hive.exec.compress.output=true

    • sequence file 格式
      支持NONE,RECORD,BLOCK等

    hive函数

    自定义hive文件格式

    • 设置表的文件格式:stored as 文件格式;

    • 文件格式

      • sequencefile

      • rcfile

    • 记录格式

      • serDe

      • CSV 和TSV

      • XML UDF

      • xpth

      • json serDe

    hive thrift服务

    • hive server或hive thrift是一个基于thrift协议的组件,可以基于java,c++,python等语言远程访问;

    • 启动hive server

      • bin/hive --service hiveserver &
    • 管理hiveserver

      • httpproxy负载hiveserver
    • hive metastore

      • 启动metastore

      • bin/hive --service metastore &

    hive 连接外部存储

    • hive连接hbase

    方案一 建立 Hive 表,关联 HBase 表,插入数据到 Hive 表的同时能够影响 HBase 表

    • 创建连接外部表
      create table hive_hbase_emp_table(
      empno int,
      ename string comment ‘姓名’,
      job string,
      mgr int,
      hiredate string,
      sal double,
      deptno int
      )
      stored by ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
      with serdeproperties(“hbase.columns.mapping”=":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:deptno")
      TBLPROPERTIES (“hbase.table.name” = “hbase_emp_table”);

    CREATE TABLE emp(
    empno int,
    ename string,
    job string,
    mgr int,
    hiredate string,
    sal double,
    deptno int)
    row format delimited fields terminated by ‘,’;

    load data local inpath ‘/data/hive/emp.txt’ into table emp;

    insert into table hive_hbase_emp_table select * from emp;

    SemanticException [Error 10101]: A non-native table cannot be used as target for LOAD

    方案二:
    在 HBase 中已经存储了某一张表 hbase_emp_table,
    然后在 Hive 中创建一个外部表来 关联 HBase 中的 hbase_emp_table 这张表,使之可以借助 Hive 来分析 HBase 这张表中的数 据
    create external table hive_crs_data_report(
    rowkey string comment ‘查询主键’,
    params string comment ‘请求参数’,
    timestamp string comment ‘时间戳’,
    dataClass string comment ‘类型’,
    data string comment ‘数据’
    )
    stored by ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
    with serdeproperties(“hbase.columns.mapping”=":key,cf1:params,cf1:timestamp,cf1:dataClass,cf1:data")
    TBLPROPERTIES (“hbase.table.name” = “crs_data_report_test_able”);

    hive权限管理和锁

    • hive0.10后版本权限控制是基于元数据控制,之前版本是通过linux的用户组合用户控制

    • 使用Hive的元数据配置权限之前必须现在hive-site.xml中配置两个参数

      • hive.security.authorization.enabled:开启权限验证,默认为false

      • hive.security.authorization.createtable.owner.grants:参数是指表的创建者对表拥有所有权限

      • hive.security.authorization.enabled参数是开启权限验证,默认为false。
        hive.security.authorization.createtable.owner.grants参数是指表的创建者对表拥有所有权限

    hive 和oozie整合

    HCatalog

    展开全文
  • 目录1.Hive中的数据库2.修改数据库3.创建表3.1管理表3.2外部表4.分区表和管理表4.1外部分区表4.2自定义表的存储格式5.删除表6.修改表6.1.表重命名6.2.增加、修改和删除表分区6.3.修改列信息6.4.增加列6.5.删除或者...
  • Hive只有有限索引的功能。Hive中没有普通关系型数据库中键的概念,但是还是可以对一些字段建立索引来加速某些操作的。一张表的索引数据存储在另外一张表中。 当逻辑分区实际上太多太细而几乎无法使用时,建立索引也...
  • hive看上去与实际操作都像一个关系型数据库,但是事实上Hive是反模式。 9.1 按天划分的表 对于数据集增长很快的情况,可以使用这种方式,在表名中加入一个时间戳,例如upply_2020_05_20、upply_2020_05_21等。 当
  • 文章目录1 使用视图来降低查询复杂度2 ...当一个查询引用视图时,这个视图所定义的查询语句将和用户的查询语句组合在一起,然后供Hive指定查询计划。从逻辑上讲,可以想象为Hive先执行这个视图,然后使用这个结果进...
  • 此外,如果属性 hive.exec.model.local.auto 的值设置为true的话,Hive还会尝试使用本地模式执行其他的操作: set hive.exec.mode.local.auto=true; 否则,Hive使用MapReduce来执行其他所有的查询。 提示: 最好...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 194
精华内容 77
关键字:

hive权威指南