• hadoop hive组件介绍及常用cli命令


    Hive架构图

     

    Hive产生原因

     1 关系型数据库以产生多年sql成熟

     2 简化开发降低成本

     3 java成员可编写udf函数

    Hive是什么

      Hive是基于hadoop的一个数据库工具,使用Hql作为接口,maprduce作为执行层

      Hdfs作为储存层。设计的目的是让sql开发人员java技能较弱的人编写并查询海量数据

      缺点执行效率低

    Hive的访问

    Hive ----odbc/jdbc----hiveserver2

    Hive---hive

    Compiler 编译器

    Optimizer 优化器

    Executor 执行调度

    Mapreducetez的区别

    TezApache最新开源的支持DAG作业的计算框架,它直接源于MapReduce框架,核心思想是将MapReduce两个操作进一步拆分,即Map被拆分成InputProcessorSortMergeOutputReduce被拆分成InputShuffleSortMergeProcessorOutput等,这样,这些分解后的元操作可以任意灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的DAG作业。总结起来,Tez有以下特点:

    1Apache二级开源项目(源代码今天发布的)

    2)运行在YARN之上

    3) 适用于DAG(有向图)应用(同ImpalaDremelDrill一样,可用于替换Hive/Pig等)

    Tez可以将多个有依赖的作业转换为一个作业(这样只需写一次HDFS,且中间节点较少),从而大大提升DAG作业的性能。Tez已被Hortonworks用于Hive引擎的优化,经测试,性能提升约100

    Hive cli说明

    命令

    描述

    Quit

    Exit

    退出交互式

    Reset

    重置配置为默认值

    Set           

    修改特定变量的值

    Set -v  

    输出所有hadoophive的配置变量

    DDL

    创建数据库

    Hive>create database student;

    判断数据库是否存在

    Hive>create database if not EXISTS studnet;

    显示现有数据库

    Hive>show databases;

    条件查询数据库

    Hive>show databases like ‘h.*’

    创建指定存放位置

    Hive>create database student

    Location ‘路径

    创建数据库时添加注释信息

    Hive>create database student

       >comment ‘注释

    使用数据库

    Hive>use student;

    删除数据库

    Hive>dorp database if exists student;

    当数据库存在表时,先删除表再删除数据库

    Hive>drop database if exists student cassade;4

    创建表

    Hive>use databases;

       >create table if not Exists student(

    Name string  comment ‘姓名

    Age  int comment ‘年龄

    )

    Comment ‘创建学生表

    Tblproperties(‘creator’=’lhs’,created_at=’data’)

    Location ‘表文件地址

    创建表,复制表结构

    Create table if not exists student2

    Like Student.student

    显示数据库中的表

     Hive>use student;

    Hive>show tables;

    显示表扩展信息

    Hive>describe extended Student.student;

    指定显示某个字段信息

    Hive>descrbe student.student.name;

    外部表

    删除表不删除数据

    Hive>create external teble if not exists student(

    Name string,

    Age int

    )

    Row format delimited fields terminated by ‘,’//以什么规则拆分

    Location ‘路径

    修改表名

    Alter table student rename to student1;

    修改列

    Alter table student change column name name1

    String

    Comment ‘name修改为name1

    After severity

    增加列

    ALTER TABLE log_messages ADD COLUMNS (  

     app_name   STRING COMMENT 'Application name',  

     session_id LONG   COMMENT 'The current session id');

    删除替换列

    ALTER TABLE log_messages REPLACE COLUMNS (  

     hours_mins_secs INT    COMMENT 'hour, minute, seconds from timestamp',  

     severity        STRING COMMENT 'The message severity'  

     message         STRING COMMENT 'The rest of the message');  

    DML

    从本地文件加载到表

    1 hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;

    OVERWRITE表示覆盖表中数据,如果没有使用OVERWRITE将把数据追加到表中原有数据后面

    载入文件中的内容必须按照正确地分隔符分割列,load data并不会进行数据验证

    1 hive> LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');2 hive> LOAD DATA LOCAL INPATH './examples/files/kv3.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-08');

    上面给两条语句将数据载入到不同的分区

    1 hive> LOAD DATA INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');

    上面的命令从HDFS中加载文件。从HDFS中加载文件将移动文件

    SQL(结构化查询语言)用于查询数据

    查询

    1 hive> SELECT a.foo FROM invites a WHERE a.ds='2008-08-15';

    invites表的2008-08-15分区中查询出foo字段

    1 hive> INSERT OVERWRITE DIRECTORY '/tmp/hdfs_out' SELECT a.* FROM invites a WHERE a.ds='2008-08-15';

    查询invites表的2008-08-15分区的所有字段内容并将查询结果导入到hdfs/tmp/hdfs_out文件中

    1 hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/local_out' SELECT a.* FROM pokes a;

    将查询结果保存到本地文件

    hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a;  

    hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a WHERE a.key < 100;

      hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/reg_3' SELECT a.* FROM events a;

    hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_4' select a.invites, a.pokes FROM profiles a;   hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT COUNT(*) FROM invites a WHERE a.ds='2008-08-15';  

    hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT a.foo, a.bar FROM invites a;   

    hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/sum' SELECT SUM(a.pc) FROM pc1 a;

    一些查询示例

    GROUP BY使用

    1 hive> FROM invites a INSERT OVERWRITE TABLE events SELECT a.bar, count(*) WHERE a.foo > 0 GROUP BY a.bar;2 hive> INSERT OVERWRITE TABLE events SELECT a.bar, count(*) FROM invites a WHERE a.foo > 0 GROUP BY a.bar;

    (上面的两条语句是等价的)

    JOIN

    1 hive> FROM pokes t1 JOIN invites t2 ON (t1.bar = t2.bar) INSERT OVERWRITE TABLE events SELECT t1.bar, t1.foo, t2.foo;

    join使用时要注意方式的选择({LEFT|RIGHT|FULL} [OUTER] JOIN)及优化,下面是一些参考

    http://yugouai.iteye.com/blog/1849395

    http://www.open-open.com/lib/view/open1341214750402.html

    多表插入(MULTITABLE INSERT

    1   FROM src2   

    INSERT OVERWRITE TABLE dest1 SELECT src.* WHERE src.key < 100

    INSERT OVERWRITE TABLE dest2 SELECT src.key, src.value WHERE src.key >= 100 and src.key < 200

    INSERT OVERWRITE TABLE dest3 PARTITION(ds='2008-04-08', hr='12') SELECT src.key WHERE src.key >= 200 and src.key < 300

    INSERT OVERWRITE LOCAL DIRECTORY '/tmp/dest4.out' SELECT src.value WHERE src.key >= 300;

    上面的语句含义是从src表中查询出各表需要的数据插入到不同的表中

  • 相关阅读:
    SQLSERVER FUNCTIONS
    批处理命令学习
    java回调
    android布局中容易混淆的几个属性
    UML类图关系
    android面试试题
    Handler基础
    Android中自定义属性的使用
    php中钩子函数&实现
    Handler高级
  • 原文地址:https://www.cnblogs.com/tsxylhs/p/7261985.html
Copyright © 2020-2023  润新知