Advertisement

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 中

如果在初始状态下需要启动初始化命令,则使用MySQL作为数据库类型,并启动初始化配置:schematool -dbType mysql -initSchema

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

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

配置完成后就可在shell中以CLI的方式访问hive 进行操作验证。

[三]、Remote方式

使用Postgres数据库(IP地址为192.168.174.200)作为示例来注册并配置 hive 用户及 hive 数据表。
远程连接通常需要分别设置服务端以及客户端的配置文件。

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

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

如果这是初始操作,则需启动初始配置流程,请输入以下命令:schematool -database.mysql -initSchema.

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

Hive metastore URI Thrift connection URI This is the Thrift URI used by the metastore client to connect to a remote metastore. hive.metastore.warehouse.dir /user/hive/warehouse 表示仓库默认数据库的位置。

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

当不配置端口以启动metastore服务时,默认监听的是9083号端口,请确保客户端的Hive应用所使用的Hive代理服务器地址与该监听地址匹配。一旦服务端启动成功,则客户端能够顺利进行Hive操作。

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

复制代码
    Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStor

Spark2.0安装

下载

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

Spark 原始代码需要通过编译器构建才能运行;而 Scala 2.11 则需要从原始代码开始构建才能执行

基于用户提供的Hadoop预构建版本:这是一个名为"Hadoop free"的开源版本,适用于所有Hadoop版本

为 Hadoop 版本 2.7 及以上提供预编译选项:这些选项需与本地部署的 Hadoop 版本保持一致。此外还包括了从 Hadoop 大纲项目中支持的所有版本:包括从 HDFS 开始支持的 CDH(即可行解算器)版本。

解压
复制代码
    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

复制HIVE_HOME/conf/hive-site.xml和hive-log4j.properties至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

另外一种方法是避免在屏幕上输出额外的INFO级别日志,并详细配置Spark的日志级别以达到预期效果。
具体的配置如下:
例如:设置日志级别为WARN并禁止打印到控制台。
这可以通过以下代码实现:
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.htmll

全部评论 (0)

还没有任何评论哟~