Spark SQL整合Hive


节点要求:

  • 启动hdfs
  • 启动spark

1.Spark SQL整合Hive配置

1.1修改配置文件
cd apps/apache-hive-2.3.2-bin/conf/
vi hive-site.xml

首先在 hive-site.xml 配置文件最后加入以下一个配置,这里为hive所在节点

<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop03:9083</value>
</property>
1.2拷贝配置文件

将hive-site.xml 配置文件放到$SPARK_HOME/conf 目录中

cp hive-site.xml $SPARK_HOME/conf/
scp -r hive-site.xml hadoop01:$SPARK_HOME/conf/
scp -r hive-site.xml hadoop02:$SPARK_HOME/conf/
1.3启动hive

启动mysqld服务

sudo service mysqld start

启动hive

hive

在hive的节点上设置以后台形式启动,hive_thriftserver.log会自动创建

nohup hive --service metastore 1>/home/hadoop/logs/hive_thriftserver.log 2>&1 &

然后直接在hadoop01启动spark sql

spark-sql
1.4测试

hive中的操作spark sql都能做,这里我在hive中建了一个表

use default;
create table test_sparksql(id int,name string);

在这里插入图片描述

然后在spark sql中查看

扫描二维码关注公众号,回复: 8747172 查看本文章
use default;
show tables;

在这里插入图片描述

整合成功

2.IDEA编写Spark程序读写Hive

2.1pom.xml文件

需要的一些maven依赖

<properties>
    <scala.version>2.11.8</scala.version>
    <spark.version>2.3.1</spark.version>
  </properties>
 
<dependencies>
    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>${scala.version}</version>
    </dependency>
 
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-sql_2.11</artifactId>
      <version>${spark.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-hive_2.11</artifactId>
      <version>${spark.version}</version>
    </dependency>
  </dependencies>
2.2 配置文件

hive-site.xml

<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost/hive_bd1906?createDatabaseIfNotExist=true</value>
        <description>JDBC connect string for a JDBC metastore</description>
        <!-- 配置的mysql的连接url 如果 mysql 和 hive 在同一个服务器节点,那么请更改 hadoop03 为 localhost -->
    </property>

    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        <description>mysql的驱动类</description>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
        <description>mysql用户名</description>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
        <description>mysql密码</description>
    </property>

    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://hadoop03:9083</value>
    </property>
</configuration>

hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
<!-- 指定副本数 -->
<property>
 <name>dfs.replication</name>
 <value>2</value>
</property>

<!--指定 hdfs 的 nameservice 为 bd1906,需要和 core-site.xml 中保持一致-->
<property>
 <name>dfs.nameservices</name>
 <value>bd1906</value>
</property>

<!-- bd1906 下面有两个 NameNode,分别是 nn1,nn2 -->
<property>
 <name>dfs.ha.namenodes.bd1906</name>
 <value>nn1,nn2</value>
</property>

<!-- nn1 的 RPC 通信地址 -->
<property>
 <name>dfs.namenode.rpc-address.bd1906.nn1</name>
 <value>hadoop01:8020</value>
</property>

<!-- nn1 的 http 通信地址 -->
<property>
 <name>dfs.namenode.http-address.bd1906.nn1</name>
 <value>hadoop01:50070</value>
</property>

<!-- nn2 的 RPC 通信地址 -->
<property>
 <name>dfs.namenode.rpc-address.bd1906.nn2</name>
 <value>hadoop02:8020</value>
</property>

<!-- nn2 的 http 通信地址 -->
<property>
 <name>dfs.namenode.http-address.bd1906.nn2</name>
 <value>hadoop02:50070</value>
</property>

<!-- 指定 NameNode 的 edits 元数据在 JournalNode 上的存放位置 QJM -->
<property>
 <name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/bd1906</value>
</property>

<!-- 指定 JournalNode 在本地磁盘存放数据的位置 -->
<property>
 <name>dfs.journalnode.edits.dir</name>
 <value>/home/hadoop/data/hadoopdata/journaldata</value>
</property>

<!-- 开启 NameNode 失败自动切换 -->
<property>
 <name>dfs.ha.automatic-failover.enabled</name>
 <value>true</value>
</property>

<!-- 配置失败自动切换实现方式 -->
<!-- 此处配置在安装的时候切记检查不要换行-->
<property>
 <name>dfs.client.failover.proxy.provider.bd1906</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
 <name>dfs.ha.fencing.methods</name>
 <value>
 sshfence
 shell(/bin/true)
 </value>
</property>

<!-- 使用 sshfence 隔离机制时需要 ssh 免登陆 -->
<property>
 <name>dfs.ha.fencing.ssh.private-key-files</name>
 <value>/home/hadoop/.ssh/id_rsa</value>
</property>

<!-- 配置 sshfence 隔离机制超时时间 -->
<property>
 <name>dfs.ha.fencing.ssh.connect-timeout</name>
 <value>30000</value>
</property>
</configuration>

从linux上拿到这两个文件,然后将这两个文件放在resources文件夹中,注意如果不放hdfs-site.xml会报找不到nn1的错误
在这里插入图片描述

2.3启动hiveserver2

在Hive的节点上启动hiveserver2服务

hiveserver2

在这里插入图片描述
可以看到卡在了日志这里,这是正常现象,访问hiveserver2的Web页面
http://hadoop03:10002/
在这里插入图片描述
可以看到页面说明服务启动成功

2.4实现代码
import org.apache.spark.sql.SparkSession

/**
  *
  */
object SparkSQL_Hive {
  def main(args: Array[String]): Unit = {
    System.setProperty("HADOOP_USER_NAME", "hadoop")
    val sparkSession: SparkSession = SparkSession.builder()
      .appName("SparkSQL_Hive")
      .master("local")
      .enableHiveSupport()
      .getOrCreate()
      //查询mianshi数据库中的mianshi01表
    sparkSession.sql("select * from mianshi.mianshi01").show()
    sparkSession.stop()

  }
}

正确输出结果

在这里插入图片描述

发布了101 篇原创文章 · 获赞 265 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/a805814077/article/details/103098197