0%

spark中连接hive

spark中连接hive

由于spark是大数据的分析计算引擎,hive作为一个数据仓库,spark经常需要和hive结合起来使用,spark sql如果需要连接到一个hive上,需要将hive-site.xml复制到spark的conf目录下(如果使用spark内置的hive元数据仓库,则会在spark的工作目录下创建Hive元数据仓库,metastore_db),且由于Hive的元数据存储在mysql中,所以spark的jars目录下还需要有mysql驱动

由于我下载的版本是没有集成hive的,所以又下载了一个spark源码包进行编译的

1
2
# 在源码包中进行执行
./build/mvn -Phive -Phive-thriftserver -DskipTests clean package

执行完了之后会将jars包打到/源码包/assembly/target/scala-2.12/jars中,我把这里的所有包直接拷贝到spark的jars目录下

之后启动hive的元数据

1
bin/hive --service metastore

启动hive的hiveserver2

1
bin/hiveserver2

在spark中就可以访问hive数据了

有三种方式可以获取hive数据

使用spark-shell

在spark-shell中使用spark.sql编写sql语句就可以直接访问hive的表数据了

使用spark-sql

也可以直接使用spark-sql直接在其中编写执行sql语句

1
bin/spark-sql

使用spark-beeline

在hive中开启了hiveserver2,可以直接使用协议进行连接hive,而spark的spark thrift server协议与hiveserver2是一致的,spark thrift server的目的只是取代hiveserver2

启动spark thrift server

1
sbin/start-thriftserver.sh

使用beeline进行连接

1
bin/beeline -u jdbc:hive2://localhost:10000 -n zhanghe

在连接的时候如果遇到用户权限问题而连接不上的话,可以修改hadoop中的core-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!--zhanghe是我的用户名,这里要配置成与你所使用的一致
配置该用户允许通过代理访问的主机节点
-->
<property>
<name>hadoop.proxyuser.zhanghe.hosts</name>
<value>*</value>
</property>
<!--zhanghe是我的用户名,这里要配置成与你所使用的一致
配置该用户允许代理的用户所属组
-->
<property>
<name>hadoop.proxyuser.zhanghe.groups</name>
<value>*</value>
</property>

代码访问

1
2
3
4
5
6

val spark = SparkSession
.builder()
.appName("spark sql ")
.getOrCreate()
spark.sql(sql).show()

欢迎关注我的其它发布渠道