- Spark可以直接与Hive进行交互,读取Hive的数据,并在Spark中进行数据分析。以下为Spark读取Hive数据的具体操作步骤。
复制代码
- 配置Hive的thrift服务
进入Hive的配置目次,我的Hive安装在/usr/local目次下,打开hive-site.xml文件
- cd /usr/local/hive/conf
- gedit hive-site.xml
复制代码 - 在hive-site.xml中添加thrift服务的配置。

完备的Hive-site.xml配置内容如下所示:
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
- <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
- <configuration>
- <property>
- <name>hive.metastore.warehouse.dir</name>
- <value>/user/hive/warehouse</value>
- </property>
- <!--- 使用本地服务连接Hive,默认为true-->
- <property>
- <name>hive.metastore.local</name>
- <value>true</value>
- </property>
- <property>
- <name>javax.jdo.option.ConnectionURL</name>
- <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value>
- <description>JDBC connect string for a JDBC metastore</description>
- </property>
- <property>
- <name>javax.jdo.option.ConnectionDriverName</name>
- <value>com.mysql.jdbc.Driver</value>
- <description>Driver class name for a JDBC metastore</description>
- </property>
- <property>
- <name>javax.jdo.option.ConnectionUserName</name>
- <value>root</value>
- <description>username to use against metastore database</description>
- </property>
- <property>
- <name>javax.jdo.option.ConnectionPassword</name>
- <value>123456</value>
- <description>password to use against metastore database</description>
- </property>
- <property>
- <name>hive.metastore.schema.verification</name>
- <value>true</value>
- </property>
- <property>
- <name>datanucleus.schema.autoCreateAll</name>
- <value>true</value>
- </property>
-
- <!-- 配置hive thrift服务-->
- <property>
- <name>hive.metastore.uris</name>
- <value>thrift://localhost:9083</value>
- </property>
- </configuration>
复制代码 - 开启thrift端口
- #启动hadoop集群
- start-all.sh
- #开启hive端口
- 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文件中添加以下依赖和打包插件。
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <scala.binary.version>2.12</scala.binary.version>
- <spark.version>3.2.1</spark.version>
- <mysql.version>5.1.49</mysql.version>
- </properties>
- <dependencies>
- <!--Spark 依赖 -->
- <dependency>
- <groupId>org.apache.spark</groupId>
- <artifactId>spark-core_${scala.binary.version}</artifactId>
- <version>${spark.version}</version>
- </dependency>
- <!--Spark SQL依赖包-->
- <dependency>
- <groupId>org.apache.spark</groupId>
- <artifactId>spark-sql_${scala.binary.version}</artifactId>
- <version>${spark.version}</version>
- </dependency>
- <!--Mysql 连接-->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>${mysql.version}</version>
- </dependency>
- <!--添加Spark连接Hive工具包-->
- <dependency>
- <groupId>org.apache.spark</groupId>
- <artifactId>spark-hive_${scala.binary.version}</artifactId>
- <version>${spark.version}</version>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <!-- 该插件用于将Scala代码编译成class文件 -->
- <plugin>
- <groupId>net.alchim31.maven</groupId>
- <artifactId>scala-maven-plugin</artifactId>
- <version>4.4.0</version>
- <executions>
- <execution>
- <!-- 声明绑定到maven的compile阶段 -->
- <goals>
- <goal>compile</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-assembly-plugin</artifactId>
- <version>3.3.0</version>
- <configuration>
- <descriptorRefs>
- <descriptorRef>
- jar-with-dependencies
- </descriptorRef>
- </descriptorRefs>
- </configuration>
- <executions>
- <execution>
- <id>make-assembly</id>
- <phase>package</phase>
- <goals>
- <goal>single</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>8</source>
- <target>8</target>
- </configuration>
- </plugin>
- </plugins>
- </build>
复制代码 完成pom.xml文件配置后,刷新工程,加载依赖包。
- 在IDEA中创建一个Scala类。
类名为SparkOnHiveDemo,范例选择Object
在SparkOnHiveDemo类中添加以下代码,检察Hive数据库。
- import org.apache.spark.sql.SparkSession
- object SparkOnHiveDemo {
- def main(args: Array[String]): Unit = {
- val spark = SparkSession.builder()
- .master("local[*]")
- .appName(this.getClass.getName)
- .enableHiveSupport() //开启Hive模式
- .config("hive.metastore.uris", "thrift://localhost:9083") //连接Hive thrift端口
- .getOrCreate()
- //使用Spark SQL方法,查看Hive数据库。
- spark.sql("show databases").show()
- }
- }
复制代码 运行结果如下。
同时,我们也可以进入到Hive CLI界面使用同样的SQL指令检察结果进行对比。
查询出来的结果划一,表现Spark可以正常访问Hive的数据,并在Hive中进行数据分析。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |