• Hive与parquet与json


    总感觉hive与parquet和json有点关系,但又说不明白
    感觉hive应该算是一种数据库,parquet和json是两种存储格式
     
    hive是建立在hadoop上的数据仓库,列式数据库
    可以通过HQL查询hive表上的数据,但不能进行交互式查询
    HQL是一种类SQL语言,能将其转为Map/Reduce
    适合大量数据
     
    数据存储
    对于一个表app,它在HDFS中的路径为:/warehouse/app   , 其中wh实在hive-site.xml中指定的数据仓库的目录,所有的Table(不包括External Table)都保存在这个目录
    Partition对应数据库中的Partition列的密集索引,所有的数据都存储在对应的目录中。例如包含dt和city两个Partition,其中dt=20190101,city=US,则HDFS目录为/warehouse/app/dt=20190101/city=US
    Buckets对指定列计算hash,根据hash值切分数据,每个Bucket对应一个文件。将user列分散至32个bucket,对应hash值为20的HDFS目录为:/warehouse/app/dt=20190101/city=US/part-00020
     
     
    parquet是列式存储
    每个字段分为几种属性
    required (出现1次
    repeated(出现多次
    optional (0或1次
    每个字段可以分为基本类型,或者复杂类型group
    基本类型有
    INT64,INT32,BOOLEAN,BINARY,FLOAT,DOUBLE,INT96,FIX_LEN_BYTE_ARRAY
    当写一个Parquet文件时,必须按照上面来构建一个schema对应的message字符串
    MessageType schema=MessageTypeParser.parseMessageType(message)
    最终的parquet文件可以与hive数据库相关联,支持hive sql查询
    create table tableName(key string,value string) stored as parquet                                //创建表
    alter table tableName add if not exists partition(date="2019") location hdfs://....            //与parquet文件关联
     
     
    json
    能把数据结构转换为string(里面保存了key,value长度,类型等等)
    读取json的方式
    val fileStream = fs.open(path)
    val fileBuffer = new Array[Byte](fileStream.available())
    fileStream.readFully(fileBuffer)
    parse(new String(fileBuffer)).extract[Map[String,List[String]]]
     
  • 相关阅读:
    数据类型补充
    Kubernetes1.18.5 Cilium安装
    Cilium安装要求
    CentOS内核升级
    临时存储 Ephemeral Storage
    Pod优先级
    kubelet 垃圾回收策略
    Kubernetes Eviction驱逐
    根据PID查看具体的容器
    Kubernetes 资源预留(二)
  • 原文地址:https://www.cnblogs.com/lmhyhblog/p/10470620.html
Copyright © 2020-2023  润新知