编程教育资源分享平台

网站首页 > 后端开发 正文

[干货]Hive与Spark sql整合并测试效率

luoriw 2024-04-04 12:50:36 后端开发 10 ℃ 0 评论

在目前的大数据架构中hive是用来做离线数据分析的,而在Spark1.4版本中 spark 加入了spark sql , 我们知道spark的优势是速度快,那么到底spark sql 会比hive 快多少呢。

Spark 1.4 在spark sql中加入了 窗口函数,这降低了hive 向spark sql迁移的难度。

本文有两个目的,一是hive 与spark sql 整合,二是测试 spark sql 与 hive的效率。

一下是版本信息:

hive版本 hive-0.12.0

spark版本 spark-1.5.2

Scala版本 scala-2.11.6

老规矩,没有废话

在Hive-site.xml 填入如下信息

<configuration>

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://10.10.113.44:3306/hive?createDatabaseIfNotExist=true</value>

</property>

<property>

<name>javax.jdo.option.ConnectionDriverName</name>

<value>com.mysql.jdbc.Driver</value>

</property>

<property>

<name>javax.jdo.option.ConnectionUserName</name>

<value>root</value>

</property>

<property>

<name>javax.jdo.option.ConnectionPassword</name>

<value>123456</value>

</property>

<property>

<name>datanucleus.autoCreateTables</name>

<value>true</value>

</property>

<property>

<name>datanucleus.autoCreateColumns</name>

<value>true</value>

</property>

<property>

<name>datanucleus.autoCreateSchema</name>

<value>true</value>

</property>`

</configuration>

这样做的目的是使用mysql作为hive的 metastore数据库。

将配置好的文件拷贝到 spark的 conf 目录下

[hadoop@10.10.113.45 ~/hive/conf]gt;cp hive-site.xml /home/hadoop/spark/conf/

修改spark 中conf 目录下的spark-env.sh 文件,并添加如下内容

SPARK_EXECUTOR_MEMORY=2G

SPARK_DRIVER_MEMORY=1500M

SPARK_MASTER_IP=10.10.113.45

SPARK_WORKER_MEMORY=4g

export JAVA_HOME=/usr/local/java

export HADOOP_CONF_DIR=/home/hadoop/hadoop/etc/hadoop

export HIVE_CONF_DIR=/home/hadoop/hive/conf

export SPARK_CLASSPATH=$SPARK_CLASSPATH:/home/hadoop/hive/lib/mysql-connector-java-5.1.28.jar

修改log4j.properties.template 加入如下内容

log4j.rootCategory=WARN, console

然后重启 spark

./sbin/start-all.sh

我们首先来看一下,hive中有哪些数据库

hive> show databases;

OK

default

Hive1

然后在进入spark sql中看一下 是否一样。

spark-sql> show databases;OK

default

hive1

(删除掉日志信息后的结果)

我们看到 数据是一样的。

下面 我们来 测试一下hive和spark sql 查询同一张表的效率如何:

1、准备数据

Csv 格式的数据 dividends.csv,一共有15208条数据。

2、将数据上传到hadoop集群中

[hadoop@10.10.113.45 ~]gt;hdfs dfs -put dividends.csv /

[hadoop@10.10.113.45 ~]gt;hdfs dfs -ls /

Found 8 items

-rw-r--r-- 1 hadoop supergroup 405380 2015-11-26 14:29 /dividends.csv

drwxr-xr-x - hadoop supergroup 0 2015-11-23 17:22 /hbase

drwxr-xr-x - hadoop supergroup 0 2015-10-30 11:21 /hive_external

drwxr-xr-x - hadoop supergroup 0 2015-11-20 14:37 /spark

drwxr-xr-x - root supergroup 0 2015-11-25 15:37 /tachyon

-rw-r--r-- 1 hadoop supergroup 99 2015-11-25 16:36 /test.txt

drwx------ - hadoop supergroup 0 2015-11-26 10:08 /tmp

drwxr-xr-x - hadoop supergroup 0 2015-10-29 16:30 /user

3、在hive中建测试表

hive> create table test (

> a string ,

> b string ,

> c string ,

> d int

> )

> row format delimited

> fields terminated by ',';

OK

Time taken: 0.061 seconds

4、接着在spark sql 中看一下 是都存在

spark-sql> show tables;

ct false

s false

ss false

sss false

test false

whatsit false

5、将数据load 到hive中

hive> load data inpath '/dividends.csv' overwrite into table test;

Loading data to table default.test

Table default.test stats: [num_partitions: 0, num_files: 1, num_rows: 0, total_size: 405380, raw_data_size: 0]

OK

Time taken: 0.242 seconds

6、在hive中做count(*) 查询

hive> select count(*) from test;

OK

_c0

15208

Time taken: 20.104 seconds, Fetched: 1 row(s)

花费了20秒时间。

7,我们在spark中做相同的操作

hive> select count(*) from test;

15/11/26 14:38:10 INFO scheduler.StatsReportListener: 133.0 ms 133.0 ms 133.0 ms 133.0 ms 133.0 ms 133.0 ms133.0 ms 133.0 ms 133.0 ms

15208

花费了多长时间呢? 0.133秒

spark的速度是hive的200倍!!!!!!(不同硬件,会有不同)

这里只分享干货技术!!!!!!!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表
最新留言