impala 和 hive安装及基础使用

impala 安装

具体安装步骤参照:https://gaoming.blog.csdn.net/article/details/107399914 里面包含完整的Hadoop组件安装。

impala 使用

  • 登录

    impala-shell
    在这里插入图片描述

  • 同步hive元数据

    invalidate metadata;  #同步hive元数据
    show databases;  #查看同步之后的数据库
    

    在这里插入图片描述

  • 创建数据库

    create database db_hive_test;
    
  • 在impala-shell端创建表

    CREATE TABLE IF NOT EXISTS hive_test
    (
    s1 int,
    s2 string,
    s3 string,
    s4 string
    ) row format delimited fields terminated by '|'
    
  • 在impala-shell执行查询
    在这里插入图片描述

  • 描述表:describe hive_test;

  • 删除表:drop table hive_test;

  • 修改表:alter table hive_test add columns (s5 int);

  • 创建视图:create view hive_test_view as select * from hive_test_view where s1 = 1;

  • 删除表/清空表

    drop table if exists table_name;
    truncate table table_name; #(先删除,再创建)
    
  • 表重命名:alter table table_name rename new_table;

  • 描述表详情:desc extended hive_test;
    在这里插入图片描述

  • 压缩
    在Impala中,parquet存储格式的默认压缩方式为snappy。通过以下命令可以修改该配置:
    set compression_code=snappy; (snappy,none,gzip...)

  • 设置Parquet 格式存储

    创建表的时候可以通过 STORED AS PARQUET 语句来指定文件的存储格式

    CREATE TABLE hive_test_parquet LIKE hive_test STORED AS PARQUET;
    

    可以使用 Insert 语句来将一张旧表中的数据拷贝到新的 Parquet 存储格式的表中

    INSERT OVERWRITE TABLE hive_test_parquet SELECT * FROM hive_test;
    

    检查 Parquet 表的创建

    SHOW TABLE STATS hive_test_parquet ;
    

    在这里插入图片描述

    Parquet 是一种柱状存储格式,所有在查询中选择更少的列会让查询执行更快。我们应该尽量避免以下这种查询方式:SELECT * FROM hive_test_parquet;

  • 导入的数据全部都是null,
    原因:create table时需要指定分隔符策略,row format delimited fields terminated by '|';

向Hive导入数据

已完成表创建

  • 从本地文件导入到Hive

    load data local inpath '/home/data/store_sales.dat' into table store_sales;
    
  • load data inpath 从hdfs导入

    查看hadoop文件

    hadoop fs -ls /
    

    新建文件夹

    hadoop dfs -mkdir /input 
    

    在这里插入图片描述
    上传本地文件

    vi test1.txt
    # 键入内容保存wq!
    

    上传文件

    hadoop fs -put test1.txt  /input
    

    查看文件

    hadoop fs -ls /input
    hadoop fs -cat /input/test1.txt
    

    在这里插入图片描述
    加载本地文件到hive

    load data local inpath '/input/test1.txt' into table default.student;
    

    加载数据覆盖表中已有的数据

    load data inpath '/input/test1.txt' overwrite into table default.student;
    
  • 使用sqoop从数据库导入

    sqoop import --connect jdbc:mysql://S0:3306/big_data_test --username root --password 1qaz@WSX --table store_sales  -m 1 --hive-import --hive-database db_hive_test  --hive-table store_sales
    

分区表

  • 创建表分区

    create table if not exists hive_partition_test66(
     id int,
     name string,
     phone string,
     address string
     ) 
     partitioned by (year int,month int) 
     row format delimited 
     fields terminated by "|"
     lines terminated by "\n"
     stored as PARQUET;
    
  • 插入数据

    insert into hive_partition_test66 PARTITION (year=2020,month=1) values(1,'张三','18600000000','哈尔滨'),(2,'李四','18700000000','哈尔滨'); 
    
    insert into hive_partition_test66 PARTITION (year=2020,month=2) values(3,'王五','18800000000','哈尔滨'),(4,'马六','18900000000','哈尔滨'); 
    
  • 特殊说明

    在使用impala创建分区表时,可能出现以下异常:

    ERROR: AnalysisException: Unable to INSERT into target table (db_hive_test.hive_partition_test44) 
    because Impala does not have WRITE access to HDFS location: hdfs://S0:8020/user/hive/warehouse/db_hive_test.db/hive_partition_test44
    

    原因分析:
    在这里插入图片描述

    默认情况下,如果插入语句创建任何新的子目录下面的分区表,这些子目录分配权限的用户默认的HDFS的权限。使每个子目录具有相同的权限为在HDFS的父目录,指定--insert_inherit_permissions启动选项的impalad守护。

    我使用的是cloudera manager,在下图
    在这里插入图片描述
    在这里插入图片描述
    第四页的mpala Daemon 命令行参数高级配置代码段中新增--insert_inherit_permissions
    在这里插入图片描述
    之后重启Impala服务即可。

    其他解决方案:手动更改HDFS目录权限,参考命令如下:

    hdfs dfs -chmod -R 777 /user/hive/warehouse/db_hive_test.db/hive_partition_test/
    

    注意事项:hdfs集群上更改数据库表权限之后,一定要记住登录到impala-shell上使用invaladate metadata命令进行元数据更新,否则更改的权限在impala状态下是不生效的

  • 查看表分区

    show partitions hive_partition_test;
    

    在这里插入图片描述

  • 删除分区:

    alter table hive_partition_test drop partition(year=2020,month=1);
    
  • 增加分区:

    alter table hive_partition_testadd partition(year=2020,month=3);
    

更多HBASE参照请参考:
https://blog.csdn.net/qq_41837900/article/details/90578798

posted on 2020-07-22 17:59  疯狂的小萝卜头  阅读(578)  评论(0编辑  收藏  举报