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


posted on 2018-05-05 13:15  疯狂的小萝卜头  阅读(4609)  评论(0编辑  收藏  举报