五、 电商用户画像环境搭建

众所周知,Hive的执行任务是将hql语句转化为MapReduce来计算的,Hive的整体解决方案很不错,但是从查询提交到结果返回需要相当长的时间,查询耗时太长。这个主要原因就是由于Hive原生是基于MapReduce的,那么如果我们不生成MapReduce Job,而是生成Spark Job,就可以充分利用Spark的快速执行能力来缩短HiveHQL的响应时间。

本项目采用SparkSql与hive进行整合(spark on hive),通过SparkSql读取hive中表的元数据,把HiveHQL底层采用MapReduce来处理任务,导致性能慢的特点,改为更加强大的Spark引擎来进行相应的分析处理,快速的为用户打上标签构建用户画像。

5.1 环境准备

  • 1、搭建hadoop集群

  • 2、安装hive构建数据仓库

  • 3、安装spark集群

  • 4、sparksql 整合hive

5.2 sparksql整合hive

  Spark SQL主要目的是使得用户可以在Spark上使用SQL,其数据源既可以是RDD,也可以是外部的数据源(比如文本、Hive、Json等)。Spark SQL的其中一个分支就是Spark on Hive,也就是使用Hive中HQL的解析、逻辑执行计划翻译、执行计划优化等逻辑,可以近似认为仅将物理执行计划从MR作业替换成了Spark作业。SparkSql整合hive就是获取hive表中的元数据信息,然后通过SparkSql来操作数据。

整合步骤:

① 需要将hive-site.xml文件拷贝到Spark的conf目录下,这样就可以通过这个配置文件找到Hive的元数据以及数据存放位置。

② 如果Hive的元数据存放在Mysql中,我们还需要准备好Mysql相关驱动,比如:mysql-connector-java-5.1.35.jar

5.3 测试sparksql整合hive是否成功

先启动hadoop集群,在启动spark集群,确保启动成功之后执行命令:

/var/local/spark/bin/spark-sql  --master spark://itcast01:7077  --executor-memory 1g  --total-executor-cores 4

指明master地址、每一个executor的内存大小、一共所需要的核数、

mysql数据库连接驱动。

执行成功后的界面:进入到spark-sql 客户端命令行界面

接下来就可以通过sql语句来操作数据库表:

查看当前有哪些数据库 ---show databases;

看到以上结果,说明sparksql整合hive成功!

日志太多,我们可以修改spark的日志输出级别(conf/log4j.properties)

前方高能:

在spark2.0版本后由于出现了sparkSession,在初始化sqlContext的时候,会设置默认的spark.sql.warehouse.dir=spark-warehouse,

此时将hive与sparksql整合完成之后,在通过spark-sql脚本启动的时候,还是会在哪里启动spark-sql脚本,就会在当前目录下创建一个spark.sql.warehouse.dir为spark-warehouse的目录,存放由spark-sql创建数据库和创建表的数据信息,与之前hive的数据信息不是放在同一个路径下(可以互相访问)。但是此时spark-sql中表的数据在本地,不利于操作,也不安全。

所有在启动的时候需要加上这样一个参数:

--conf  spark.sql.warehouse.dir=hdfs://node1:9000/user/hive/warehouse

保证spark-sql启动时不在产生新的存放数据的目录,sparksql与hive最终使用的是hive同一存放数据的目录。

如果使用的是spark2.0之前的版本,由于没有sparkSession,不会有spark.sql.warehouse.dir配置项,不会出现上述问题。

最后的执行脚本;

spark-sql \

--master spark://node1:7077 \

--executor-memory 1g \

--total-executor-cores 2 \

--conf  spark.sql.warehouse.dir=hdfs://node1:9000/user/hive/warehouse

最新文章

  1. 飞鱼(FlyFish)——便捷的原型在线制作工具
  2. Android的Message Pool是什么——源码角度分析
  3. SSH三大框架的JAR包下载地址
  4. 练习ajax的时候出现这个问题 还没解决
  5. css参考文档; 官方英文说明!! 1 margin padding 百分比参照物 2 margin值为auto时的说明 3 div在div里垂直居中方法 4 dispaly:flex说明
  6. Setup Factory 程序打包
  7. Node.js学习(11)----HTTP服务器与客户端
  8. 【译】 AWK教程指南 10编写可与用户交互的AWK程序
  9. Hadoop的初步理解
  10. Unrooted Tests错误
  11. Akka(37): Http:客户端操作模式
  12. cocos2dx3.2移植android
  13. 10位时间戳使用moment转化为日期
  14. 爬虫基础(五)-----scrapy框架简介
  15. 对Jpa中Entity关系映射中mappedBy的理解
  16. Codeforces 1097G
  17. 1.5:Unity Render Pipeline
  18. 移动 Ubuntu16.04 桌面左侧任务栏到屏幕底部
  19. 让一个继承unittest.TestCase的类下的setUp和tearDown只执行一次
  20. mysql 表锁进程非常多的情况

热门文章

  1. (数据科学学习手札112)Python+Dash快速web应用开发——表单控件篇(上)
  2. Python中类的特殊属性和魔术方法
  3. 前端学习 node 快速入门 系列 —— 服务端渲染
  4. 使用MyBatis的步骤
  5. P1047_校门外的树(JAVA语言)
  6. Java进阶专题(二十七) 将近2万字的Dubbo原理解析,彻底搞懂dubbo (下)
  7. SQL必知必会,带你系统学习
  8. C++实现控制台学生学籍管理系统
  9. 编程相关术语(Python)
  10. 统计学习方法——实现AdaBoost