Spark连接访问Hive数据

打印 上一主题 下一主题

主题 846|帖子 846|积分 2538

  1.         Spark可以直接与Hive进行交互,读取Hive的数据,并在Spark中进行数据分析。以下为Spark读取Hive数据的具体操作步骤。
复制代码

  • 配置Hive的thrift服务
    进入Hive的配置目次,我的Hive安装在/usr/local目次下,打开hive-site.xml文件
    1. cd /usr/local/hive/conf
    2. gedit hive-site.xml
    复制代码
  • 在hive-site.xml中添加thrift服务的配置。

    完备的Hive-site.xml配置内容如下所示:
    1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    3. <configuration>
    4.   <property>
    5.     <name>hive.metastore.warehouse.dir</name>
    6.     <value>/user/hive/warehouse</value>
    7.   </property>
    8.     <!--- 使用本地服务连接Hive,默认为true-->
    9.   <property>
    10.     <name>hive.metastore.local</name>
    11.     <value>true</value>
    12.   </property>
    13.   <property>
    14.     <name>javax.jdo.option.ConnectionURL</name>
    15.     <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</value>
    16.     <description>JDBC connect string for a JDBC metastore</description>
    17.   </property>
    18.   <property>
    19.     <name>javax.jdo.option.ConnectionDriverName</name>
    20.     <value>com.mysql.jdbc.Driver</value>
    21.     <description>Driver class name for a JDBC metastore</description>
    22.   </property>
    23.   <property>
    24.     <name>javax.jdo.option.ConnectionUserName</name>
    25.     <value>root</value>
    26.     <description>username to use against metastore database</description>
    27.   </property>
    28.   <property>
    29.     <name>javax.jdo.option.ConnectionPassword</name>
    30.     <value>123456</value>
    31.     <description>password to use against metastore database</description>
    32.   </property>
    33.   <property>
    34.     <name>hive.metastore.schema.verification</name>
    35.     <value>true</value>
    36.   </property>
    37.   <property>
    38.     <name>datanucleus.schema.autoCreateAll</name>
    39.     <value>true</value>
    40.   </property>
    41.   
    42.    <!-- 配置hive thrift服务-->
    43.   <property>
    44.       <name>hive.metastore.uris</name>
    45.       <value>thrift://localhost:9083</value>
    46.   </property>
    47. </configuration>
    复制代码
  • 开启thrift端口
    1. #启动hadoop集群
    2. start-all.sh
    3. #开启hive端口
    4. nohup hive --service metastore &
    复制代码
  • 在IDEA中创建一个Maven项目。
    JDK选择1.8,Archetype为[org.apache.maven.archetypes:maven-archetype-site-simple],点击[create]创建项目。

  • 添加Scala依赖。
    按序次点击顶部菜单栏中[File]->[Project Structure],配置项目架构结构配置。

    在项目结构配置中,选择[Global Libraries]->[+]->[Scala SDK](假如没有Scala SDK选项的同砚 ,需要自己在IDEA中下载Scala插件)。

    选择Spark对应的Scala SDK版本,本案例使用的是Spark3.2.1,支持Scala版本为2.12。点击OK,完成Scala配置。

    在[src/main/]目次下创建一个scala文件夹,并设置为源目次,专用于存放Scala代码。

  • 在pom.xml文件中添加以下依赖和打包插件。
    1.     <properties>
    2.      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    3.      <scala.binary.version>2.12</scala.binary.version>
    4.      <spark.version>3.2.1</spark.version>
    5.      <mysql.version>5.1.49</mysql.version>
    6. </properties>
    7.    <dependencies>
    8.         <!--Spark 依赖 -->
    9.         <dependency>
    10.             <groupId>org.apache.spark</groupId>
    11.             <artifactId>spark-core_${scala.binary.version}</artifactId>
    12.             <version>${spark.version}</version>
    13.         </dependency>
    14.        <!--Spark SQL依赖包-->
    15.         <dependency>
    16.             <groupId>org.apache.spark</groupId>
    17.             <artifactId>spark-sql_${scala.binary.version}</artifactId>
    18.             <version>${spark.version}</version>
    19.         </dependency>
    20.         <!--Mysql 连接-->
    21.         <dependency>
    22.             <groupId>mysql</groupId>
    23.             <artifactId>mysql-connector-java</artifactId>
    24.             <version>${mysql.version}</version>
    25.         </dependency>
    26.         <!--添加Spark连接Hive工具包-->
    27.         <dependency>
    28.             <groupId>org.apache.spark</groupId>
    29.             <artifactId>spark-hive_${scala.binary.version}</artifactId>
    30.             <version>${spark.version}</version>
    31.         </dependency>
    32.     </dependencies>
    33.     <build>
    34.         <plugins>
    35.             <!-- 该插件用于将Scala代码编译成class文件 -->
    36.             <plugin>
    37.                 <groupId>net.alchim31.maven</groupId>
    38.                 <artifactId>scala-maven-plugin</artifactId>
    39.                 <version>4.4.0</version>
    40.                 <executions>
    41.                     <execution>
    42.                         <!-- 声明绑定到maven的compile阶段 -->
    43.                         <goals>
    44.                             <goal>compile</goal>
    45.                         </goals>
    46.                     </execution>
    47.                 </executions>
    48.             </plugin>
    49.             <plugin>
    50.                 <groupId>org.apache.maven.plugins</groupId>
    51.                 <artifactId>maven-assembly-plugin</artifactId>
    52.                 <version>3.3.0</version>
    53.                 <configuration>
    54.                     <descriptorRefs>
    55.                         <descriptorRef>
    56.                             jar-with-dependencies
    57.                         </descriptorRef>
    58.                     </descriptorRefs>
    59.                 </configuration>
    60.                 <executions>
    61.                     <execution>
    62.                         <id>make-assembly</id>
    63.                         <phase>package</phase>
    64.                         <goals>
    65.                             <goal>single</goal>
    66.                         </goals>
    67.                     </execution>
    68.                 </executions>
    69.             </plugin>
    70.             <plugin>
    71.                 <groupId>org.apache.maven.plugins</groupId>
    72.                 <artifactId>maven-compiler-plugin</artifactId>
    73.                 <configuration>
    74.                     <source>8</source>
    75.                     <target>8</target>
    76.                 </configuration>
    77.             </plugin>
    78.         </plugins>
    79.     </build>
    复制代码
    完成pom.xml文件配置后,刷新工程,加载依赖包。
  • 在IDEA中创建一个Scala类。

    类名为SparkOnHiveDemo,范例选择Object

    在SparkOnHiveDemo类中添加以下代码,检察Hive数据库。
    1. import org.apache.spark.sql.SparkSession
    2. object SparkOnHiveDemo {
    3.   def main(args: Array[String]): Unit = {
    4.     val spark = SparkSession.builder()
    5.       .master("local[*]")
    6.       .appName(this.getClass.getName)
    7.       .enableHiveSupport()    //开启Hive模式
    8.       .config("hive.metastore.uris", "thrift://localhost:9083") //连接Hive thrift端口
    9.       .getOrCreate()
    10.     //使用Spark SQL方法,查看Hive数据库。
    11.     spark.sql("show databases").show()
    12.   }
    13. }
    复制代码
    运行结果如下。

    同时,我们也可以进入到Hive CLI界面使用同样的SQL指令检察结果进行对比。

    查询出来的结果划一,表现Spark可以正常访问Hive的数据,并在Hive中进行数据分析。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

渣渣兔

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表