zoukankan      html  css  js  c++  java
  • Hive on Spark配置

    Hive on Spark 官网详情https://cwiki.apache.org//confluence/display/Hive/Hive+on+Spark:+Getting+Started

    参考:https://www.cnblogs.com/wh984763176/p/13503875.html

    版本要求:(版本很重要)

    安装和Spark对应版本一起编译的Hive,当前官网推荐的版本关系如下:

    image

    环境要求:三台linux服务器,安装好spark,并配置好spark on yarn模式。

    安装好hive和metastore。

    安装spark与hive

    安装spark可以参考前面的文章:

    Spark集群环境搭建——部署Spark集群:https://www.cnblogs.com/doublexi/p/15624795.html

    安装hive,可以参考:

    Hive安装部署:https://www.cnblogs.com/doublexi/p/15636547.html

    配置Hive on Spark

    1、查看当前的计算引擎

    set hive.execution.engine;

    可以看到hive默认的计算引擎为MR,而且有提示,这个配置即将被废弃了,推荐使用spark或者tez

    clipboard

    2、在线修改计算引擎为spark

    set hive.execution.engine=spark;

    clipboard

    这种方式只在当前终端有效,终端关闭,再打开又恢复为了mr。

    想要永久修改引擎为spark,可以修改配置文件

    3、修改hive-site.xml

    <!-- 使用spark计算引擎 -->
    <property>
        <name>hive.execution.engine</name>
        <value>spark</value>
    </property>
    <!-- 这个配置注释掉,本次不能用
    <property>
       <name>spark.master</name>
       <value>spark://dev-spark-master-206:7077</value>
    </property>
    -->
    <property>
        <name>spark.home</name>
        <value>/data/apps/spark-3.1.2/</value>
    </property>
    <property>
        <name>spark.master</name>
        <value>yarn</value>
    </property>
    <property>
        <name>spark.eventLog.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>spark.eventLog.dir</name>
        <value>hdfs://dev-spark-master-206:8020/spark-eventlog</value>
    </property>
    <property>
        <name>spark.executor.memory</name>
        <value>512m</value>
    </property>
    <property>
        <name>spark.driver.memory</name>
        <value>512m</value>
    </property>
    <property>
        <name>spark.serializer</name>
        <value>org.apache.spark.serializer.KryoSerializer</value>
    </property>
    <property>
        <name>spark.yarn.jars</name>
        <value>hdfs://dev-spark-master-206:8020/spark-jars/*</value>
    </property>
    <property>
        <name>hive.spark.client.server.connect.timeout</name>
        <value>300000</value>
    </property>

    4、拷贝jar包和xml配置

    将Hive的lib目录下的指定jar包拷贝到Spark的jars目录下:

    hive-beeline-3.1.2.jar
    hive-cli-3.1.2.jar hive-exec-3.1.2.jar
    hive-jdbc-3.1.2.jar
    hive-metastore-3.1.2.jar
    
    
    [root@dev-spark-slave-171 hive-3.1.2]# cd /data/apps/hive-3.1.2/lib/
    [root@dev-spark-slave-171 lib]# cp hive-beeline-3.1.2.jar hive-cli-3.1.2.jar hive-exec-3.1.2.jar hive-jdbc-3.1.2.jar hive-metastore-3.1.2.jar /data/apps/spark-3.1.2/jars/

    将Spark的jars目录下的指定jar包拷贝到Hive的lib目录下: (重要)

    spark-network-common_2.12-3.1.2.jar
    spark-core_2.12-3.1.2.jar
    scala-library-2.12.10.jar
    chill-java-0.9.5.jar
    chill_2.12-0.9.5.jar
    jackson-module-paranamer-2.10.0.jar
    jackson-module-scala_2.12-2.10.0.jar
    jersey-container-servlet-core-2.30.jar
    jersey-server-2.30.jar
    json4s-ast_2.12-3.7.0-M5.jar 
    kryo-shaded-4.0.2.jar minlog-1.3.0.jar
    scala-xml_2.12-1.2.0.jar
    spark-launcher_2.12-3.1.2.jar
    spark-network-shuffle_2.12-3.1.2.jar
    spark-unsafe_2.12-3.1.2.jar
    xbean-asm7-shaded-4.15.jar
    
    [root@dev-spark-slave-171 hive-3.1.2]# cd /data/apps/spark-3.1.2/jars/
    [root@dev-spark-slave-171 jars]# cp spark-network-common_2.12-3.1.2.jar spark-core_2.12-3.1.2.jar scala-library-2.12.10.jar chill-java-0.9.5.jar chill_2.12-0.9.5.jar jackson-module-paranamer-2.10.0.jar jackson-module-scala_2.12-2.10.0.jar jersey-container-servlet-core-2.30.jar jersey-server-2.30.jar json4s-ast_2.12-3.7.0-M5.jar kryo-shaded-4.0.2.jar minlog-1.3.0.jar scala-xml_2.12-1.2.0.jar spark-launcher_2.12-3.1.2.jar spark-network-shuffle_2.12-3.1.2.jar spark-unsafe_2.12-3.1.2.jar xbean-asm7-shaded-4.15.jar /data/apps/hive-3.1.2/lib/

    将hadoop中的yarn-site.xml、hdfs-site.xml以及Hive的hive-site.xml放入spark的conf中

    cp /data/apps/hadoop-3.2.2/etc/hadoop/hdfs-site.xml /data/apps/hadoop-3.2.2/etc/hadoop/yarn-site.xml /data/apps/hive-3.1.2/conf/hive-site.xml /data/apps/spark-3.1.2/conf/

    5、上传至HDFS

    为了使各个节点都能够使用 Spark 引擎进行计算,需要将Spark的jars目录下所有依赖包上传至HDFS

    [root@dev-spark-slave-171 jars]# cd /data/apps/spark-3.1.2/jars/
    [root@dev-spark-slave-171 jars]# hdfs dfs -put * /spark-yarn/jars/

    6、将spark目录与hive中lib目录,分发到其余机器,让三台机器配置同步。

    rsync-script /data/apps/spark-3.1.2/
    rsync-script /data/apps/hive/lib/

    7、重启spark与hive的metastore

    stop-all.sh
    start-all.sh
    
    nohup hive --service metastore &
    nohup hiveserver2 &

    8、测试

    再次启动hive,可以看到默认引擎已经改为了spark了。

    clipboard

    hive登录,执行插入的sql

    insert into table test.student values(1,'zhouqi',50);

    或者聚合计算的sql也行:

    select count(1) from test.student;

    运行成功后,如下图:

    image

    在yarn上,可以看到这个Application,点击这个Application ID

    image

    点击ApplicationMaster

    image

    在spark上也看到这个任务

    image

    当你退出hive的时候,这个Application任务也就随之结束了,可以查看history。


    报错:

    如果执行的过程中报错:

    Failed to execute spark task, with exception 'org.apache.hadoop.hive.ql.metadata.HiveException(Failed to create Spark client for Spark session a103f35a-b3fa-439d-9b1f-d17521f5ff57)'

    FAILED: Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Failed to create Spark client for Spark session a103f35a-b3fa-439d-9b1f-d17521f5ff57

    clipboard

    查看logs/hive.log,发现如下报错:

    2021-12-02T17:30:56,452 ERROR [16d94a1c-186d-4fa5-8b10-4eff1cc22037 main] spark.SparkTask: Failed to execute spark task, with exception 'org.apache.hadoop.hive.ql.metadata.HiveException(Failed to create Spark client for Spark session a103f35a-b3fa-439d-9b1f-d17521f5ff57)'

    org.apache.hadoop.hive.ql.metadata.HiveException: Failed to create Spark client for Spark session a103f35a-b3fa-439d-9b1f-d17521f5ff57

    Caused by: java.lang.NoClassDefFoundError: org/apache/spark/SparkConf

    Caused by: java.lang.ClassNotFoundException: org.apache.spark.SparkConf

    clipboard

    执行上述4、5、6、7步骤之后,这个问题消失,变成了一个新的问题:

    Job failed with java.lang.ClassNotFoundException: org.apache.spark.AccumulatorParam

    FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Spark job failed during runtime. Please check stacktrace for the root cause.

    clipboard

    经过,网上查找资料,发现是hive与spark的版本不对应导致的。

    目前我们使用的版本为:

    hive-3.1.2 + spark-3.1.2 (这个版本搭配不行,有问题)

    解决方案:

    1、重新编译hive3.1.2,让其支持spark-3.1.2。参考:https://forsre.cn/oasis/hive3.1.2%E7%BC%96%E8%AF%91%E6%94%AF%E6%8C%81spark3.0.0/

    2、切换版本

    我们使用hive-2.3.7+spark-2.4.5,试验成功。

    按照官方对应的版本为:https://cwiki.apache.org//confluence/display/Hive/Hive+on+Spark:+Getting+Started

    clipboard

    可以按照提示去选择对应的spark和hive的版本,然后继续上述步骤操作就可以了。

    关于配置Hive on spark,可以参考:https://blog.csdn.net/pucao_cug/article/details/72773564

    https://www.cnblogs.com/wh984763176/p/13503875.html

  • 相关阅读:
    python—虚拟环境搭建
    pytnon—线程,进程
    python——新excel模块之openpyxl
    装饰器——应用
    css样式
    HTML
    广图登陆知网下载资源教程
    使用k-近邻算法改进约会网站的配对效果
    k-近邻算法概述
    机器学习基础
  • 原文地址:https://www.cnblogs.com/doublexi/p/15638331.html
Copyright © 2011-2022 走看看