zoukankan      html  css  js  c++  java
  • Spark SQL 之 Migration Guide

    Spark SQL 之 Migration Guide


    支持的Hive功能

    转载请注明出处:http://www.cnblogs.com/BYRans/

    Migration Guide

    与Hive的兼容(Compatibility with Apache Hive)

    Spark SQL与Hive Metastore、SerDes、UDFs相兼容。Spark SQL兼容Hive Metastore从0.12到1.2.1的所有版本。Spark SQL也与Hive SerDes和UDFs相兼容,当前SerDes和UDFs是基于Hive 1.2.1。

    在Hive warehouse中部署Spark SQL

    Spark SQL Thrift JDBC服务与Hive相兼容,在已存在的Hive上部署Spark SQL Thrift服务不需要对已存在的Hive Metastore做任何修改,也不需要对数据做任何改动。

    Spark SQL支持的Hive特性

    Spark SQL支持多部分的Hive特性,例如:

    • Hive查询语句,包括:

      • SELECT
      • GROUP BY
      • ORDER BY
      • CLUSTER BY
      • SORT BY
    • 所有Hive运算符,包括

      • 比较操作符(=, ⇔, ==, <>, <, >, >=, <=, etc)
      • 算术运算符(+, -, *, /, %, etc)
      • 逻辑运算符(AND, &&, OR, ||, etc)
      • 复杂类型构造器
      • 数学函数(sign,ln,cos,etc)
      • 字符串函数(instr,length,printf,etc)
    • 用户自定义函数(UDF)

    • 用户自定义聚合函数(UDAF)

    • 用户自定义序列化格式器(SerDes)

    • 窗口函数

    • Joins

      • JOIN
      • {LEFT|RIGHT|FULL} OUTER JOIN
      • LEFT SEMI JOIN
      • CROSS JOIN
    • Unions

    • 子查询

      • SELECT col FROM ( SELECT a + b AS col from t1) t2
    • Sampling

    • Explain

    • 表分区,包括动态分区插入

    • 视图

    • 所有的Hive DDL函数,包括:

      • CREATE TABLE
      • CREATE TABLE AS SELECT
      • ALTER TABLE
    • 大部分的Hive数据类型,包括:

      • TINYINT
      • SMALLINT
      • INT
      • BIGINT
      • BOOLEAN
      • FLOAT
      • DOUBLE
      • STRING
      • BINARY
      • TIMESTAMP
      • DATE
      • ARRAY<>
      • MAP<>
      • STRUCT<>

    支持的Hive功能

    下面是当前不支持的Hive特性,其中大部分特性在实际的Hive使用中很少用到。

    Major Hive Features

    • Tables with buckets:bucket是在一个Hive表分区内进行hash分区。Spark SQL当前不支持。

    Esoteric Hive Features

    • UNION type
    • Unique join
    • Column statistics collecting:当期Spark SQL不智齿列信息统计,只支持填充Hive Metastore的sizeInBytes列。

    Hive Input/Output Formats

    • File format for CLI: 这个功能用于在CLI显示返回结果,Spark SQL只支持TextOutputFormat
    • Hadoop archive

    Hive优化
    部分Hive优化还没有添加到Spark中。没有添加的Hive优化(比如索引)对Spark SQL这种in-memory计算模型来说不是特别重要。下列Hive优化将在后续Spark SQL版本中慢慢添加。

    • 块级别位图索引和虚拟列(用于建立索引)
    • 自动检测joins和groupbys的reducer数量:当前Spark SQL中需要使用“ SET spark.sql.shuffle.partitions=[num_tasks]; ”控制post-shuffle的并行度,不能自动检测。
    • 仅元数据查询:对于可以通过仅使用元数据就能完成的查询,当前Spark SQL还是需要启动任务来计算结果。
    • 数据倾斜标记:当前Spark SQL不遵循Hive中的数据倾斜标记
    • jion中STREAMTABLE提示:当前Spark SQL不遵循STREAMTABLE提示
    • 查询结果为多个小文件时合并小文件:如果查询结果包含多个小文件,Hive能合并小文件为几个大文件,避免HDFS metadata溢出。当前Spark SQL不支持这个功能。

    Reference

    Data Types

    Spark SQL和DataFrames支持的数据格式如下:

    • 数值类型
      • ByteType: 代表1字节有符号整数. 数值范围: -128 到 127.
      • ShortType: 代表2字节有符号整数. 数值范围: -32768 到 32767.
      • IntegerType: 代表4字节有符号整数. 数值范围: -2147483648 t到 2147483647.
      • LongType: 代表8字节有符号整数. 数值范围: -9223372036854775808 到 9223372036854775807.
      • FloatType: 代表4字节单精度浮点数。
      • DoubleType: 代表8字节双精度浮点数。
      • DecimalType: 表示任意精度的有符号十进制数。内部使用java.math.BigDecimal.A实现。
      • BigDecimal由一个任意精度的整数非标度值和一个32位的整数组成。
    • String类型
      • StringType: 表示字符串值。
    • Binary类型
      • BinaryType: 代表字节序列值。
    • Boolean类型
      • BooleanType: 代表布尔值。
    • Datetime类型
      • TimestampType: 代表包含的年、月、日、时、分和秒的时间值
      • DateType: 代表包含的年、月、日的日期值
    • 复杂类型
      • ArrayType(elementType, containsNull): 代表包含一系列类型为elementType的元素。如果在一个将ArrayType值的元素可以为空值,containsNull指示是否允许为空。
      • MapType(keyType, valueType, valueContainsNull): 代表一系列键值对的集合。key不允许为空,valueContainsNull指示value是否允许为空
      • StructType(fields): 代表带有一个StructFields(列)描述结构数据。
        • StructField(name, dataType, nullable): 表示StructType中的一个字段。name表示列名、dataType表示数据类型、nullable指示是否允许为空。

    Spark SQL所有的数据类型在 org.apache.spark.sql.types 包内。不同语言访问或创建数据类型方法不一样:

    • Scala
      代码中添加 import org.apache.spark.sql.types._,再进行数据类型访问或创建操作。
      scalaAccessDataTypes

    • Java
      可以使用 org.apache.spark.sql.types.DataTypes 中的工厂方法,如下表:
      javaAccessDataTypes

  • 相关阅读:
    Mysql命令下导出select查询数据之 select ... into outfile方法
    接口调试工具Postman之自动同步Chrome cookies,实现自动登陆验证
    PHP函数file_get_contents()使用 https 协议时报错:SSL operation failed
    MySQL中连接超时自动断开的解决方案
    UEditor富文本WEB编辑器设置代码高亮
    Laravel 自定义公共函数全局使用,并设置自定加载
    Laravel 解决blade模板转义html标签问题
    PHP 高效导入导出Excel(csv)方法之fgetcsv()和fputcsv()函数
    Mysql命令行tab自动补全方法
    PHP利用get_headers()函数判断远程的url地址是否有效
  • 原文地址:https://www.cnblogs.com/BYRans/p/5051034.html
Copyright © 2011-2022 走看看