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

  • 相关阅读:
    Elementary Methods in Number Theory Exercise 1.2.25
    Elementary Methods in Number Theory Exercise 1.2.14
    图解欧几里德算法
    图解欧几里德算法
    Elementary Methods in Number Theory Exercise 1.2.14
    Android中的长度单位详解(dp、sp、px、in、pt、mm)
    分享下多年积累的对JAVA程序员成长之路的总结
    android异常之都是deamon惹的祸The connection to adb is down, and a severe error has occured.
    TomatoCartv1.1.8.2部署时报错
    JavaScript浏览器对象之二Document对象
  • 原文地址:https://www.cnblogs.com/doublexi/p/15638331.html
Copyright © 2011-2022 走看看