• Hive on spark实践


    起因

    搭建数据平台时,对已经存储在Hive的结构化数据进行一些简单的查询是一个比较常见的需求,目前我使用的版本是Hive 2.3,它支持的执行引擎有SparkTez

    配置

    利用Cloudera的CDH套件搭建好Hadoop 2.6,可CDH中的Hive版本不高,于是独立安装Hive 2.3,根据Hive官网上的Hive on Spark教程开始配置。

    Standalone

    配置了Spark Standalone模式之后,配置Hive遇到一些困难。

    由于使用的是pre-build版本的Spark,遇到报错:

    java.lang.NoSuchFieldError: SPARK_RPC_CLIENT_CONNECT_TIMEOUT
        at org.apache.hive.spark.client.rpc.RpcConfiguration.<clinit>(RpcConfiguration.java:46)
    

    接下来要自己编译Spark without Hive,可是一直没有解决,报错为:

    [info] 'compiler-interface' not yet compiled for Scala 2.11.8. Compiling...
    error: scala.reflect.internal.MissingRequirementError: object java.lang.Object in compiler mirror not found.
        at scala.reflect.internal.MissingRequirementError$.signal(MissingRequirementError.scala:17)
        at scala.reflect.internal.MissingRequirementError$.notFound(MissingRequirementError.scala:18)
    

    非常曲折,最后选择尝试已经配置好的Yarn模式的Spark。

    Yarn

    Yarn模式的Spark集群已经就绪,在Hive中配置Spark

    set hive.execution.engine=spark;
    set spark.master=yarn;
    set spark.executor.memory=512m;
    set spark.serializer=org.apache.spark.serializer.KryoSerializer;
    set spark.eventLog.enabled=true;
    set spark.eventLog.dir=<Spark event log folder (must exist)>
    

    上传Spark应用所需的Spark依赖jar包到Hdfs中,例如放到Hdfs中的/spark-jars目录,并配置hive-site.xml

    <property>
      <name>spark.yarn.jars</name>
      <value>hdfs://xxxx:8020/spark-jars/*</value>
    </property>
    

    注意这里需要保证使用Hive时的用户能够有权限访问Hdfs上指定的目录。

    用户数据导入

    源数据

    当源数据是JSON并位于Hdfs的/tmp目录,如

    {
        "time": "1515682813526",
        "uid": 1,
        "ip": "1.1.1.1",
        "path": "https://github.com",
        "referer": "https://google.com"
    }
    

    创建Hive外部表

    CREATE EXTERNAL TABLE IF NOT EXISTS tmp.pageview(
        time BIGINT,
        uid  BIGINT,
        ip   STRING,
        path STRING,
        referer STRING
    )
    ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
    STORED AS TEXTFILE
    LOCATION '/tmp';
    

    导入ORC表

    ORC表是Hive的一种高效表,在查询上更加快速,可以从外部表将数据导入ORC表。

    CREATE TABLE IF NOT EXISTS orc.pageview(
        time BIGINT,
        uid  BIGINT,
        ip   STRING,
        path STRING,
        referer STRING
    )
    STORED AS ORC;
    
    FROM tmp.pageview pv
    INSERT INTO TABLE orc.pageview
    SELECT time, uid, ip, path, referer;
    
  • 相关阅读:
    Java 零基础跑起第一个程序
    Xcode6 引入第三方静态库project的方法
    Cocos2d-x3.0 RenderTexture(三)
    POJ 题目3461 Oulipo(KMP)
    unity3D游戏开发实战原创视频讲座系列9之塔防类游戏开发第一季
    android 虚拟按键是通过哪种机制上报的?
    深入理解 C 指针阅读笔记 -- 第五章
    【1】按照Django官网,编写一个web app 创建project/配置数据库
    [Swift]LeetCode442. 数组中重复的数据 | Find All Duplicates in an Array
    [Swift]LeetCode441. 排列硬币 | Arranging Coins
  • 原文地址:https://www.cnblogs.com/pier2/p/hive-on-spark-practice.html
Copyright © 2020-2023  润新知