Hive on Spark 和 Spark sql on Hive,你能分的清楚么

Hive on Spark 和 Spark sql on Hive,你能分的清楚么

结构上 Hive On Spark 和 SparkSQL 都是一个翻译层,把一个 SQL 翻译成分布式可执行的 Spark 程序。Hive 和 SparkSQL 都不负责计算。Hive 的默认执行引擎是 mr,还可以运行在 Spark 和 Tez。Spark 可以连接多种数据源,然后使用 SparkSQL 来执行分布式计算。

Hive On Spark 配置

(1)首先安装包要选择对,否则就没有开始了。

Hive 版本:apache-hive-2.1.1-bin.tar

spark 版本:spark-1.6.3-bin-hadoop2.4-without-hive (不需要把 Hive 编译进去)

(2)假设你已经安装好 Hive(元数据为 Derby)和 spark,那么默认 Hive 走 mr,需要修改以下配置让 Hive 走 spark


    hive.execution.engine
    spark

(3)配置环境变量及运行时参数

在 hive-site.xml 中配置 SPARK_HOME;

在 hive-site.xml 或者或者 spark-default.conf 或者 spark-env.conf 配置 spark 运行时参数,也可以在 Hive 运行环境中设置临时参数:

set spark.master=
set spark.eventLog.enabled=true;
set spark.eventLog.dir=
set spark.executor.memory=512m;            
set spark.serializer=org.apache.spark.serializer.KryoSerializer;

将编译好的 Spark 安装包中 lib 目录下的 spark-assembly-*.jar 包添加至 HIVE_HOME/lib 中

(4)启动 Hive

/opt/hive/bin/hive --service metastore

(5)启动 Hive 命令行窗口

beeline -u jdbc:hive2://localhost:10000  或者  /opt/hive/bin/hive

(6)开启你的 Hive on spark 之旅

0: jdbc:hive2://localhost:10000> create table test (f1 string,f2 string) stored as orc;

No rows affected (2.018 seconds)

0: jdbc:hive2://localhost:10000> insert into test values(1,2);

Spark sql on Hive

(1)获取包

Hive 版本:apache-hive-2.1.1-bin.tar

spark 版本:spark-1.6.3-bin-hadoop2.4 (需要把 Hive 编译进去)

(2)在 $SPARK_HOME/conf 目录创建 hive-site.xml 文件,内容如下:

  
  
    hive.metastore.uris  
    thrift://master1:9083  
    Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.  
    

(3)如果你使用的元数据库是 mysql, 那么请把 mysql 驱动放到 $SPARK_HOME/lib 下,否则跳过。

(4)启动 Hive 元数据服务,待 spark 运行时访问。

(5)执行命令

./bin/spark-shell --master spark://master:7077
scala> val hc = new org.apache.spark.sql.hive.HiveContext(sc);
scala> hc.sql("show tables").collect.foreach(println)
[sougou,false]
[t1,false]

Sparkthriftserver 启

spark 提供了 spark-sql 命令可以直接操作 hive 或 impala,可以启用 sparkthriftserver 服务,然后利用 beeline 远程连接 spark,利用 spark sql。sparksql 的诞生其实就是为了代替 hsql。Sparksql 的元数据也是使用 hive 的 metastore 进行管理,所以需要配置 hive.metastore.uris 参数(以上环境博主都是部署在cnaaa服务器上的,感兴趣的朋友可以自己部署一套环境练习下)

这里说下 sparkthriftserver 和 hivethriftserver 的区别,二者的端口一定要区分:

hivethriftserver:hive 服务端的服务,远程通过 jdbc 或者 beeline 连接,使用 hsql 操作 hive。

sparkthriftserver:spark 的服务,远程通过 jdbc 或者 beeline 连接 spark,使用 spark sql 操作 hive。

(1)在 $SPARK_HOME/conf 目录创建 hive-site.xml 文件,内容如下:

  
  
    hive.metastore.uris  
    thrift://master1:9083  
    Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.  
    

   
       hive.server2.thrift.min.worker.threads
       5
   
   
       hive.server2.thrift.max.worker.threads
       500
   
   
       hive.server2.thrift.port
       10001
   
   
       hive.server2.thrift.bind.host
       master
   
  

(2)启动 sparkthriftserver

./start-thriftserver.sh --hiveconf hive.server2.thrift.port=10000 --master yarn --driver-class-path /data/spark-2.2.0-bin-hadoop2.7/jars/mysql-connector-java-5.1.43-bin.jar --executor-memory 5g --total-executor-cores 5

启动 sparkthriftserver 后,后台默认会执行 spark-sql 命令,实际上是用 spark-submit 向 yarn 提交一个任务。这样就会在 yarn 的 8088 页面任务栏中起一个常驻任务,用来执行 spark sql。

(3)连接 spark

./beeline -u jdbc:hive2://172.168.108.6:10001 -n root

(4)这里的 sql 可以在 8088 页面看到执行过程。

你可能感兴趣的:(hive,spark,大数据)