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]]]
     
  • 相关阅读:
    edge.js架起node.js和.net互操作桥梁
    Swift学习:闭包(Closures)
    swift UIAlertController教程
    linux配置IP的方法
    centos 6.5安装vncserver 并开启远程桌面
    CSS中各种居中方法
    jquery中的index方法和eq方法
    line-height的用法(一)
    第八章—BOM(一)
    第四章—变量,作用域和内存问题(一)
  • 原文地址:https://www.cnblogs.com/lmhyhblog/p/10470620.html
Copyright © 2011-2022 走看看