Spark on Hive-derby数据库-thriftserver-多客户端使用

首先,要明确spark on hivehive on spark 的区别。

--spark on hive:是spark 通过spark-sql 使用hive 语句操作hive,底层运行的还是 spark rdd。它是通过sparksql来加载hive的配置文件,获取到hive的元数据信息,这样就可以拿到hive的所有表的数据,接下来就可以用sparksql来操作hive表中的数据。

--hive on spark:是hive的执行引擎变成了spark,不再是mapreduce。这个要相对于麻烦,需要重新编译spark源码,打成jar包,将hive的执行引擎换成spark。

其次,hive的meta数据支持三种方式存储,一种远端存储,两种本地存储。远端存储比较适合生产环境。详细信息查看 hive metastore。

一、本地derby存储

这种方式是最简单的存储方式,本人只在hive-site.xml中添加如下配置:

 

javax.jdo.option.ConnectionURL 

jdbc:derby:;databaseName=metastore_db;create=true 

   

 

javax.jdo.option.ConnectionDriverName 

org.apache.derby.jdbc.EmbeddedDriver 

   

 

hive.metastore.local 

true 

   

 

hive.metastore.warehouse.dir 

/user/hive/warehouse 

   

 

hive.metastore.warehouse.dir 

/user/hive/warehouse 

   

注意:使用derby存储方式时,运行hive会在当前目录生成一个derby文件和一个metastore_db目录。这种存储方式的弊端是在同一个目录下同时只能有一个hive客户端能使用数据库,否则会提示如下错误:

hive> show tables;  

FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Failed to start database 'metastore_db', see the next exception for details.  

NestedThrowables:  

java.sql.SQLException: Failed to start database 'metastore_db', see the next exception for details.  

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask 

二、本地mysql存储

这种方式存储需要在本地运行一个mysql服务器,并做如下配置(需要将mysql的jar包拷贝到$HIVE_HOME/lib目录下)

  

  

hive.metastore.warehouse.dir  

/user/hive_remote/warehouse  

  

  

hive.metastore.local  

true  

  

  

javax.jdo.option.ConnectionURL  

jdbc:mysql://localhost/hive_remote?createDatabaseIfNotExist=true  

  

  

javax.jdo.option.ConnectionDriverName  

com.mysql.jdbc.Driver  

  

  

javax.jdo.option.ConnectionUserName  

hive  

  

  

javax.jdo.option.ConnectionPassword  

password  

  

三、远端mysql

这种方式存储需要在远端服务器运行一个mysql服务器,并且需要在Hive服务器启动meta服务。远程mysql服务器ip:192.168.200.110,数据库hive_remote,配置如下:

  

  

    hive.metastore.warehouse.dir  

    /user/hive/warehouse  

  

  

    javax.jdo.option.ConnectionURL  

    jdbc:mysql://192.168.1.214:3306/hive_remote?createDatabaseIfNotExist=true  

  

  

    javax.jdo.option.ConnectionDriverName  

    com.mysql.jdbc.Driver  

  

  

    javax.jdo.option.ConnectionUserName  

    hive  

  

  

    javax.jdo.option.ConnectionPassword  

    password  

  

  

    hive.metastore.local  

    false  

  

  

    hive.metastore.uris  

    thrift://192.168.1.188:9083  

  

  

注意:这里把hive的服务端和客户端都放在同一台服务器上了。服务端和客户端可以拆开,将hive-site.xml配置文件拆为如下两部分:

1)服务端配置:

  

  

    hive.metastore.warehouse.dir  

    /user/hive/warehouse  

  

  

    javax.jdo.option.ConnectionURL  

    jdbc:mysql://192.168.1.214:3306/hive_remote?createDatabaseIfNotExist=true  

  

  

    javax.jdo.option.ConnectionDriverName  

    com.mysql.jdbc.Driver  

  

  

    javax.jdo.option.ConnectionUserName  

    root  

  

  

    javax.jdo.option.ConnectionPassword  

    test1234  

  

2)客户端配置:

  

  

    hive.metastore.warehouse.dir  

    /user/hive/warehouse  

  

  

    hive.metastore.local  

    false  

  

  

    hive.metastore.uris  

    thrift://192.168.1.188:9083  

  

启动hive服务端程序:hive --service metastore

客户端直接使用hive命令即可

由于公司使用的是内网环境,网盘用不了,自己装的虚拟环境也不能通过yum来进行安装,下载的rpm包又缺少其他的依赖,只能选择本地derby存储。接下来,配置spark on hive(前提hdfs、yarn、hive已经搭建好了):

1、hive-site.xml配置:

    hive.cli.print.header

    true

    Whether to print the names of the columns in query output.

    hive.cli.print.current.db

    true

    Whether to include the current database in the Hive prompt.

    hive.metastore.uris

    thrift://hadoop110:9083

         hive.metastore.warehouse.dir

         hdfs://hadoop110:9000/user/hive/warehouse

2、在spark的conf中创建hive-site.xml的软连接 ln -s /xxx/xxx/hive-site.xml

3、配置spark-env.sh:

export JAVA_HOME=/opt/module/jdk1.8.0_211

export SCALA_HOME=/opt/module/scala-2.11.12

export HADOOP_HOME=/opt/module/hadoop-2.7.2

export HADOOP_CONF_DIR=/opt/module/hadoop-2.7.2/etc/hadoop

4、将spark的jars中的所有包上传到hdfs上,然后在spark-default.xml中配置路径。这样可以提高程序运行过程中寻找jar包的效率

hadoop fs -put spark/jars/* /spark_jars/

spark-default.xml中配置:

spark.yarn.jars=hdfs://hadoop110:9000/spark_jars/*

5、启动hive服务:hive --service metastore &

6、启动spark的thriftserver服务:/opt/module/spark-2.1/sbin/start-thriftserver.sh

7、启动beeline,注意:下次启动需要在同一个目录下,否则就会生成新的元数据文件。

启动多个beeline窗口也可以访问滴。哈哈哈!!!

你可能感兴趣的:(Spark on Hive-derby数据库-thriftserver-多客户端使用)