Hive踩坑指南

1  Hive简介

Hive是一个数据仓库基础工具,在Hadoop中用来处理结构化数据。它架构在Hadoop之上,总归为大数据,并使得查询和分析方便。

它提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。但是不要把Hive当作以下东西:

  • 一个关系数据库
  • 一个设计用于联机事务处理(OLTP)
  • 实时查询和行级更新的语言

它只是一个数据仓库,存放的都是文件。Hive有具以下特点:

  • 它存储架构在一个数据库中并处理数据到HDFS
  • 它是专为OLAP设计
  • 它提供SQL类型语言查询叫HiveQL或HQL
  • 它是熟知,快速,可扩展和可扩展的

2  常用操作

由于Hive操作与SQL语句有一定程度上的不同,故记录一下。

  • 创建表:
    1 create table tmp.tbl_website_about(domain string, home string, about string, service string, product string);
  • 增加字段:
    1 ALTER TABLE tmp.tbl_website_about ADD COLUMNS(language STRING);
  • 保留字段,其余字段全删除:
    1 ALTER TABLE tmp.tbl_website_about REPLACE COLUMNS(language STRING);

    注意,该代码表示只保留language字段,其余全删除。

  • 插入多条数据:
    1 insert into tmp.tbl_website_about values('1','2','3','4','5','6'),('q','w','e','r','t','y');
    注意,因为Hive是默认以换行符作为字段分隔符,所以在插入文本时往往会因换行符导致若干问题出现,此问题暂无解决方法,只能将\n\r替换为空格后再进行存储,也可以参考这篇文章
  • 删除表中所有数据:
    1 truncate table tmp.tbl_website_about;
  • 删除表(可恢复):
    1 drop table tmp.tbl_website_about;
  • 永久删除表(不可恢复):
    1 drop table tmp.tbl_website_about purge;

3  Tidb数据库的表中数据复制到Hive

  1. 进入到HIve的服务器内,并进入指定用户,例如:
    1 $ ssh emr-v2-gateway
    2 $ sudo su - hadoop
  2. 通过以下指令进入到spark-shell。
    1 spark-shell --executor-memory 8g --driver-memory 4g --num-executors 5
  3. 通过以下指令复制表内容。
    1 val df = spark.sql("select * from tidb_spider.tbl_website_about")
    2 df.write.mode("overwrite").saveAsTable("tmp.tbl_website_about_test")

    注意,overwrite表示全覆盖,即使表字段不同,也会根据Tidb中的字段结构重新规划字段结构。

4  CSV文件导入HIve

在实际应用中,往往需要将CSV文件导入到Hive中,方便于多表查询。

将本机文件上传至将远程服务器可以参考这篇文章,CSV文件转为Hive可以参考以下步骤。

  1. 根据SCV的字段结构在hive中创建表,例如:
    1 create table tmp.website_about_dolang(domain string, language string) row format delimited fields terminated by ','; 

    注意,一定要以逗号为分隔符。

  2. 进入到HIve的服务器内,并进入指定用户,例如:
    1 $ ssh emr-v2-gateway
    2 $ sudo su - hadoop
  3. 输入 hive 指令,进入HIve。
  4. 输入以下指令,导表。
    1 $ load data local inpath '/home/hadoop/andrew/domainLanguage.csv' overwrite into table website_about_dolang;
上一篇:大话设计模式笔记(二十三)の享元模式


下一篇:C# 接口