zoukankan      html  css  js  c++  java
  • 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]]]
     
  • 相关阅读:
    安装PetShop后调试的诸多问题
    初学FF(火狐)的扩展(Extensions)
    发现JavaScript中Number的toFixed()四舍五入时的一个问题,请教大虾!(原来是浏览器问题)
    PHP哪用手工配置啊。。。哎。。真是的。
    新鸟文章:foreach里的Sqlcommand(有SqlTransaction)
    说下按位异或(^)和按位与(&)的一点知识(没技术含量的)
    How browers work?
    开篇:希望结交各位,共同学习进步!
    第01章 基础知识
    20060818网摘
  • 原文地址:https://www.cnblogs.com/lmhyhblog/p/10470620.html
Copyright © 2011-2022 走看看