下面是“SpringBoot连接Hive实现自助取数的示例”的完整攻略:
一、准备工作
在开始前我们需要准备以下工具和环境:
- JDK 1.8及以上版本;
- Maven;
- IntelliJ IDEA;
- Hive。
其中,Hive是我们连接数据源的关键。如果你还没有安装Hive,可以参考以下链接进行安装:
- Hive官网:http://hive.apache.org/
- Hive在CentOS上的安装教程:https://www.jianshu.com/p/f1b10412d2c9
二、创建SpringBoot项目
-
打开IntelliJ IDEA,选择“Create New Project”,然后选择“Spring Initializr”选项。
-
在下一步中,填写项目的Group、Artifact、Type等信息,并将“Packaging”设置为“jar”。
-
在下一步中,添加以下依赖:
<dependencies>
<!--Spring Boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--Spring Boot Web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--Hive JDBC-->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>3.1.2</version>
</dependency>
<!--JUnit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
- 创建Application.java类,并进行如下配置:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public DataSource dataSource() {
// 设置Hive JDBC驱动类
System.setProperty("hive.jdbc.driver", "org.apache.hive.jdbc.HiveDriver");
// 设置JDBC连接Hive的URL
String url = "jdbc:hive2://localhost:10000/default";
// 创建DataSource并返回
return DataSourceBuilder.create()
.url(url)
.username("")
.password("")
.build();
}
}
- 在application.properties中添加如下配置:
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
spring.datasource.driver-class-name=org.apache.hive.jdbc.HiveDriver
spring.datasource.url=jdbc:hive2://localhost:10000/default
spring.datasource.username=
spring.datasource.password=
三、编写基本操作
在完成上述准备工作后,我们可以开始编写基本操作了。这里,我们会创建一个Controller,并实现两个API:分别是查询所有的表,查询指定表的所有数据。
- 创建HiveController.java类:
@RestController
public class HiveController {
@Autowired
private JdbcTemplate jdbcTemplate;
@GetMapping("/tables")
public List<Map<String, Object>> tables() {
return jdbcTemplate.queryForList("show tables");
}
@GetMapping("/show/{tableName}")
public List<Map<String, Object>> show(@PathVariable String tableName) {
return jdbcTemplate.queryForList("select * from " + tableName);
}
}
其中,我们注入了JdbcTemplate,并使用它来执行SQL语句。在上面的两个API中,我们使用JdbcTemplate分别查询所有的表和指定表的所有数据。
- 启动项目并访问API
现在,我们可以启动项目,并访问这两个API了:
- GET请求http://localhost:8080/tables,返回所有的表;
- GET请求http://localhost:8080/show/{tableName},返回指定表的所有数据。
至此,我们已经成功连接了Hive,并在SpringBoot应用中实现了基本的操作。
四、示例展示
接下来,让我们通过两个示例来演示如何使用SpringBoot连接Hive实现自助取数。
示例一:汇总报表
这个任务要求我们汇总每天的访问量,并生成报表。
- 在Hive中创建表
首先,我们需要在Hive中创建一个访问日志的表。假设表的名称为“access_logs”,并包含以下字段:
字段 | 类型 |
---|---|
url | 字符串 |
user_id | 字符串 |
datetime | 字符串 |
可以使用以下命令创建这个表:
CREATE TABLE access_logs(
url STRING,
user_id STRING,
datetime STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t';
- 插入样本数据
为了演示方便,我们可以插入以下样本数据:
INSERT INTO access_logs (url, user_id, datetime)
VALUES
('/blog', 'admin', '2019-01-01 10:30:01'),
('/blog', 'user1', '2019-01-01 11:30:01'),
('/blog', 'user2', '2019-01-01 12:30:01'),
('/home', 'admin', '2019-01-01 10:30:01'),
('/home', 'admin', '2019-01-01 11:30:01'),
('/about', 'user3', '2019-01-02 10:30:01'),
('/blog', 'user1', '2019-01-02 11:30:01');
- 更新HiveController.java类
将HiveController.java类更新为以下内容:
@RestController
public class HiveController {
@Autowired
private JdbcTemplate jdbcTemplate;
@GetMapping("/report")
public List<Map<String, Object>> report() {
StringBuilder sb = new StringBuilder();
sb.append("SELECT DATE_FORMAT(from_unixtime(UNIX_TIMESTAMP(datetime)), 'yyyy-MM-dd') as day, url, COUNT(url) as num FROM access_logs ");
sb.append("GROUP BY DATE_FORMAT(from_unixtime(UNIX_TIMESTAMP(datetime)), 'yyyy-MM-dd'), url");
return jdbcTemplate.queryForList(sb.toString());
}
}
这个API会返回访问量统计报表,输出类似以下内容:
[
{
"num": 5,
"day": "2019-01-01",
"url": "/blog"
},
{
"num": 2,
"day": "2019-01-01",
"url": "/home"
},
{
"num": 1,
"day": "2019-01-02",
"url": "/about"
},
{
"num": 1,
"day": "2019-01-02",
"url": "/blog"
}
]
至此,我们已经完成了汇总报表的自助取数功能。
示例二:用户查询
这个任务要求我们查询特定用户的访问日志。
- 更新HiveController.java类
将HiveController.java类更新为以下内容:
@RestController
public class HiveController {
@Autowired
private JdbcTemplate jdbcTemplate;
@GetMapping("/user-access")
public List<Map<String, Object>> userAccess(@RequestParam String userId) {
StringBuilder sb = new StringBuilder();
sb.append("SELECT url, datetime FROM access_logs WHERE user_id = ");
sb.append("'" + userId + "'");
return jdbcTemplate.queryForList(sb.toString());
}
}
这个API会接收一个参数,即要查询的用户ID,然后返回这个用户的所有访问记录。
- 启动项目并访问API
现在,我们可以启动项目,并访问下面的API,以查看特定用户的访问记录:
- GET请求http://localhost:8080/user-access?userId=admin
该API会返回管理员(用户ID为“admin”)的所有访问记录。
至此,我们已经完成了用户查询的自助取数功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot连接Hive实现自助取数的示例 - Python技术站