zoukankan      html  css  js  c++  java
  • Spark2.0集成Hive操作的相关配置与注意事项

    前言

    已完成安装Apache Hive,具体安装步骤请参照,Linux基于Hadoop2.8.0集群安装配置Hive2.1.1及基础操作

    补充说明

    Hive中metastore(元数据存储)的三种方式:

    内嵌Derby方式
    Local方式
    Remote方式
    [一]、内嵌Derby方式
    这个是Hive默认的启动模式,一般用于单元测试,这种存储方式有一个缺点:在同一时间只能有一个进程连接使用数据库。

    配置文件 hive-site.xml 中jdbc URL、驱动、用户名、密码等的配置信息

    执行初始化命令:schematool -dbType derby -initSchema

    查看初始化后的信息: schematool -dbType derby -info

    配置完成后就可在shell中以CLI的方式访问hive 进行操作验证。
    [二]、Local方式
    以本地Mysql数据库为例:创建好用户:hive;database:hive。

    配置文件 hive-site.xml 中jdbc URL、驱动、用户名、密码等属性值配置信息

    ps:需要把数据库的驱动包copy到目录 <HIVE_HOME>/lib 中

    如果是第一次需要执行初始化命令:schematool -dbType mysql -initSchema

    查看初始化后信息 schematool -dbType mysql -info

    初始化后查看mysql中表情况:show tables;

    配置完成后就可在shell中以CLI的方式访问hive 进行操作验证。
    [三]、Remote方式
    以Postgres数据库(192.168.174.200)为例:创建好用户:hive;database:hive_meta。Remote方式需要分别配置服务端和客户端的配置文件:

    服务端的 hive-site.xml 中jdbc URL、驱动、用户名、密码等属性值配置如下:

    ps:需要把Postgres的驱动包copy到目录 <HIVE_HOME>/lib 中

    如果是第一次需要执行初始化命令:schematool -dbType mysql -initSchema

    客户端中配置内容修改如下:

    <!-- thrift://<host_name>:<port> 默认端口是9083 -->
    <property>
      <name>hive.metastore.uris</name>
      <value>thrift://192.168.174.200:9083</value>
      <description>Thrift uri for the remote metastore. Used by metastore client to connect to remote metastore.</description>
    </property>
     
    <!--  hive表的默认存储路径 -->
    <property>
      <name>hive.metastore.warehouse.dir</name>
      <value>/user/hive/warehouse</value>
      <description>location of default database for the warehouse</description>
    </property>



    hive metastore 服务端启动命令:
    hive --service metastore -p <port_num>

    如果不加端口默认启动:hive --service metastore,则默认监听端口是:9083 ,注意客户端中的端口配置需要和启动监听的端口一致。服务端启动正常后,客户端就可以执行hive操作了。

    以下异常,可通过Remote方式配置解决。

    Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStor

    Spark2.0安装

    下载

    官网下载地址:http://spark.apache.org/downloads.html


    Source code: Spark 源码,需要编译才能使用,另外 Scala 2.11 需要使用源码编译才可使用
    Pre-build with user-provided Hadoop: “Hadoop free” 版,可应用到任意 Hadoop 版本

    Pre-build for Hadoop 2.7 and later: 基于 Hadoop 2.7 的预先编译版,需要与本机安装的 Hadoop 版本对应。可选的还有 Hadoop 2.4 and later、Hadoop 2.3、Hadoop 1.x,以及 CDH 4。

    解压
    tar -zxvf spark-2.0.0-bin-hadoop2.7.tgz
    移动文件夹
    mv spark-2.0.0-bin-hadoop2.7 /usr/local/hadoop/

    修改配置文件

    新建修改spark-env.sh
    cd /usr/local/hadoop/spark-2.0.0-bin-hadoop2.7/conf
    cp spark-env.sh.template spark-env.sh
    在spark-env.sh文件顶部添加以下内容
    export SPARK_MASTER_HOST=127.0.0.1
    export SPARK_LOCAL_IP=127.0.0.1
    export HADOOP_HOME=/usr/local/hadoop/hadoop-2.8.0
    export HIVE_HOME=/usr/local/hadoop/apache-hive-2.1.1-bin
    export HIVE_CONF_DIR=${HIVE_HOME}/conf
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export HDFS_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export SPARK_CLASSPATH=$HIVE_HOME/lib:$SPARK_CLASSPATH

    根据实际情况进行相应修改


    export SPARK_MASTER_HOST=127.0.0.1
    export SPARK_LOCAL_IP=127.0.0.1
    是为了解决Spark2.0单机模式无法启动master的问题
    未配置会显示以下异常
    Exception in thread "main" java.net.BindException: 无法指定被请求的地址: Service 'sparkMaster' failed after 16 retries (starting from 7077)! Consider explicitly setting the appropriate port for the service 'sparkMaster' (for example spark.ui.port for SparkUI) to an available port or increasing spark.port.maxRetries.
    集成访问已安装的Hive
    1、拷贝$HIVE_HOME/conf/hive-site.xml和hive-log4j.properties到 $SPARK_HOME/conf/
    2、在$SPARK_HOME/conf/目录中,修改spark-env.sh,添加
    export HIVE_HOME=/usr/local/hadoop/apache-hive-2.1.1-bin
    export SPARK_CLASSPATH=$HIVE_HOME/lib:$SPARK_CLASSPATH

    3、另外也可以设置一下Spark的log4j配置文件,使得屏幕中不打印额外的INFO信息:
    log4j.rootCategory=WARN, console


    为解决以下异常:

    Caused by: MetaException(message:Version information not found in metastore. )
    需修改conf/hive-site.xml 中的 “hive.metastore.schema.verification” 值为 false即可解决


    修改spark-submit、spark-sql
    在文件顶部添加以下内容:
    export HADOOP_HOME=/usr/local/hadoop/hadoop-2.8.0
    export HIVE_HOME=/usr/local/hadoop/apache-hive-2.1.1-bin
    export HIVE_CONF_DIR=${HIVE_HOME}/conf
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export HDFS_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

    为了解决以下异常:

    EXCEPTION: When running with master 'yarn' either HADOOP_CONF_DIR or YARN_CONF_DIR must be set in the environment. in spark

    启动

    启动spark-sql
    spark-sql

    启动spark-submit
    spark-submit --class com.gm.hive.SparkHive.App --master yarn /usr/local/hadoop/kczyqktj_spark-0.0.1-SNAPSHOT-allinone.jar

    JAVA编写Spark2.0程序的注意事项

    访问已有Hive
    .config("spark.sql.warehouse.dir", "/user/hive/warehouse/").enableHiveSupport()
    完整示例
    package com.gm.hive.SparkHive;
    
    import org.apache.spark.sql.Dataset;
    import org.apache.spark.sql.Row;
    import org.apache.spark.sql.SparkSession;
    
    /**
     * Spark sql获取Hive数据
     * 
     */
    public class App {
    	public static void main(String[] args) {
    
    		SparkSession spark = SparkSession.builder().master("local[2]")
    				.appName("SparkHive")
    				.config("spark.sql.warehouse.dir", "/user/hive/warehouse/").enableHiveSupport()
    				.getOrCreate();
    
    		spark.sql("show databases").show();
    		spark.sql("show tables").show();
    		spark.sql("use db_hive_edu");
    		Dataset<Row> data = spark
    				.sql("select hc_storetypeid,count(hc_storetypeid) from db_hive_edu.hc_casewoodlist where hc_wpstate=2 and hc_storetypeid !='null' group by hc_storetypeid order by hc_storetypeid");
    		data.show();
    
    	}
    }
    相关地址:http://spark.apache.org/docs/2.0.0/sql-programming-guide.html


  • 相关阅读:
    整合第二次(SSM第一次)------------>spring+struts2+mybatis
    整合初步--------->SSH(注解版)
    整合初步______SH
    Spring 配置数据源之一三兄弟
    Spring 中面向AOP之一系列做法
    Spring Bean的生命周期详解
    Linux常用指令大全
    CentOS7 下 RabbitMQ 3.7.8 安装 步骤
    Unhandled exception handling in iOS and Android with Xamarin.
    改进Xamarin应用程序中的HTTP性能
  • 原文地址:https://www.cnblogs.com/gmhappy/p/9472438.html
Copyright © 2011-2022 走看看