Spark
目前的项目中有涉及到Spark,所以在网上简单了解了一下,然后在自己的虚拟机上简单实现了目前项目上使用Spark的流程。
上一篇博客介绍了使用外部表关联的方式通过hive sql的方式将hadoop中的数据同步到了hbase中,因为目前java有相关的API可以访问hbase,并且查询hbase的速度应该是比操作hive更快。hive sql操作hadoop中的数据的方式底层也是通过hadoop提供的MapReduce来实现的,MapReduce不是很好了解,但是hive sql给我们提供了一种类似sql的形式来操作,这样就很简单了。虽然这样对于我们开发来说不用去写MapReduce了,但是MapReduce执行速度慢的问题还是存在的。
所以Spark就是来解决hive sql操作hadoop数据比较慢的问题,对于一个复杂的sql可能会产生中间结果,对于这些中间结果,hive sql,或者说hadoop中的MapReduce会将这些中间结果存到磁盘中,需要的时候再从磁盘里读出来,而Spark会将这些中间结果缓存到内存中。说到这里应该很明白了,Spark很大程度上是基于内存计算的,减少了很多次磁盘IO,所以速度更快了。
安装scala(安装使用spark不需要安装scala环境)
正如上面的标题说的,scala不是非要安装,spark内置了scala,我这里记录一下,就不用单独开贴记录安装scala了。
安装scala也很简单
1.官网上下载
scala下载连接
2.将压缩包传到你自己的虚拟机上并且解压
tar -zxf scala-2.12.6.tgz
3.然后添加环境变量,并且让配置文件生效
打开配置文件
vi /etc/profile
在文件最底部添加下面的内容
#SCALA_HOME
export SCALA_HOME=/root/software/scala212
export PATH=$SCALA_HOME/bin:$PATH
然后执行 source /etc/profile,让配置文件生效
之后执行一下scala -version看一下输出内容是否安装了
安装spark
1.安装spark也是先从官网上下载相关压缩包
spark官网下载链接
2.将压缩包上传到虚拟机上并且解压
tar -zxf spark-3.1.2-bin-hadoop3.2.tgz
3.添加环境变量,让配置文件生效
打开配置文件
vi /etc/profile
在文件底部添加下面的内容
#SPARK_HOME
export SPARK_HOME=/root/software/spark312
export PATH=$PATH:$SPARK_HOME/bin
退出之后执行source /etc/profile让配置文件生效
4.将相关jar包和配置文件拷贝到spark中
先切到spark的jars文件夹
cd /root/software/spark312/jars
然后将hive中的jar包复制到这里
[root@hadoop3 jars]# cp /opt/soft/hive312/lib/hive-beeline-3.1.2.jar ./
[root@hadoop3 jars]# cp /opt/soft/hive312/lib/hive-cli-3.1.2.jar ./
[root@hadoop3 jars]# cp /opt/soft/hive312/lib/hive-exec-3.1.2.jar ./
[root@hadoop3 jars]# cp /opt/soft/hive312/lib/hive-jdbc-3.1.2.jar ./
[root@hadoop3 jars]# cp /opt/soft/hive312/lib/hive-metastore-3.1.2.jar ./
[root@hadoop3 jars]# cp /opt/soft/hive312/lib/mysql-connector-java-8.0.25.jar ./
再将hive的hive-site.xml文件复制到spark的conf文件夹下
再hive-site.xml文件中添加下面的内容
<property>
<name>hive.metastore.uris</name>
<value>thrift://你的虚拟机ip:9083</value>
</property>
然后就可以执行spark-shell了
在这里就可以执行scala的语句了,如果项目中需要定时的操作,也可以编写一个脚本执行下面是一个简单的例子
#!/bin/bash
spark-shell < test.scala &> ./scala.log
前提是正确启动了hadoop,hive,正确安装了spark,并且hive中有这个表,行吧,就写这么多吧,还有很多地方需要去熟练和掌握
# 是不是一定要有所失,才能有所悟