目录
前言:
Hive的周边工具介绍及其应用场景的详细信息:
服务器指令实现Sqoop集成Hive,Mysql实现数据导出
集成Hive
集成MySQL
Java Springboot框架 集成Sqoop,Hive,Mysql 实现hive的导入/导出
POM依赖:
在application.properties文件中添加以下配置:
代码实现:
指令含义解读:
控制器实现
分享一下大数据相关的应用学习,代码不是所有,主要是看实现的简单思路,和相关java层对应指令含义
Sqoop:Sqoop是一个开源工具,用于在Hadoop和关系型数据库之间进行数据传输。Sqoop可以将关系型数据库中的数据导入到Hadoop中,或将Hadoop中的数据导出到关系型数据库中。Sqoop主要应用于数据仓库的构建和数据集成等场景。
Flume:Flume是一个分布式的日志收集和聚合系统,可以将数据从不同的数据源(如Web服务器、数据库、应用程序等)收集到中央数据存储中。Flume主要应用于数据的实时采集和处理,包括日志分析、事件处理等。
Kafka:Kafka是一个高吞吐量的分布式消息系统,可以处理实时数据流或消息。Kafka可以作为消息和数据的缓冲区,将不同数据源的数据发送到相应的处理节点中,以实现实时处理和分析等场景。
Spark:Spark是一个开源的大数据处理框架,可以在内存中进行数据处理和分析。Spark可以与Hive结合使用,读取和处理Hive中的数据,并使用Spark的机器学习和深度学习等库进行数据分析和挖掘。
其中,--hive-import参数表示将数据导入到Hive中,--hive-table参数指定Hive表名;--target-dir参数表示将数据导入到HDFS中的目录,--delete-target-dir参数表示在导入数据前删除目标目录,--m参数表示使用的map任务数,--direct参数表示使用直接模式导入数据;--input-fields-terminated-by参数表示输入文件的字段分隔符,--input-lines-terminated-by参数表示输入文件的行分隔符,--update-key参数表示更新数据时使用的主键,--update-mode参数表示更新模式,--batch参数表示使用批量模式导出数据。
org.apache.hadoop
hadoop-common
2.7.7
org.apache.hadoop
hadoop-client
2.7.7
org.apache.hive
hive-jdbc
2.3.4
org.apache.sqoop
sqoop
1.4.7
mysql
mysql-connector-java
8.0.20
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=UTF-8&useUnicode=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
hive.jdbc.url=jdbc:hive2://localhost:10000/default
hive.jdbc.username=hive
hive.jdbc.password=hive
sqoop.bin.path=/usr/local/sqoop/bin/
public boolean exportDataFromMySQLToHive(String tableName) {
String sqoopCommand = String.format("%ssqoop export --connect %s --username %s --password %s \
--table %s --input-fields-terminated-by ',' --input-lines-terminated-by '\n' \
--hive-import --hive-table %s --hive-database default --create-hive-table \
--driver com.mysql.jdbc.Driver --outdir ./ --verbose",
sqoopBinPath, dataSourceUrl, dataSourceUsername, dataSourcePassword, tableName, tableName);
try {
Process process = Runtime.getRuntime().exec(sqoopCommand);
int exitValue = process.waitFor();
if (exitValue == 0) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public boolean importDataFromHiveToMySQL(String tableName) {
String sqoopCommand = String.format("%ssqoop export --connect %s --username %s --password %s \
--table %s --hive-import --hive-table %s --hive-database default \
--input-null-string '\\N' --input-null-non-string '\\N' \
--input-fields-terminated-by ',' --input-lines-terminated-by '\n' \
--driver com.mysql.jdbc.Driver --outdir ./ --verbose",
sqoopBinPath, dataSourceUrl, dataSourceUsername, dataSourcePassword, tableName, tableName);
try {
Process process = Runtime.getRuntime().exec(sqoopCommand);
int exitValue = process.waitFor();
if (exitValue == 0) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
@Resource注解表示注入JdbcTemplate对象,@Value注解表示注入配置文件中的属性值,exportData方法实现数据导出,createMysqlTable方法实现在MySQL中创建表。
export
: 表示使用Sqoop的导出命令。--connect
: 指定MySQL的JDBC连接URL。--username
: 指定MySQL的用户名。--password
: 指定MySQL的密码。--table
: 指定要导出的MySQL表名。--export-dir
: 指定HDFS中的导出目录。--input-fields-terminated-by
: 指定输入文件的字段分隔符。--input-lines-terminated-by
: 指定输入文件的行分隔符。--input-null-string
: 指定输入文件中的空字符串。--input-null-non-string
: 指定输入文件中的非字符串类型的空值。--hive-import
: 表示将数据导入到Hive中。--hive-overwrite
: 表示覆盖Hive中已有的数据。--hive-table
: 指定Hive中的表名。--hive-drop-import-delims
: 表示在导入数据时删除输入文件中的分隔符。--num-mappers
: 指定使用的Mapper数量。--batch
: 表示启用批处理模式。--direct
: 表示使用直接模式,将数据直接写入Hive中,而不是先写入HDFS中再导入到Hive中。
@RestController
public class DataController {
@Autowired
private DataServiceImpl dataService;
@PostMapping("/mysql-to-hive")
public boolean exportDataFromMySQLToHive(@RequestBody String tableName) {
return dataService.exportDataFromMySQLToHive(tableName);
}
@PostMapping("/hive-to-mysql")
public boolean importDataFromHiveToMySQL(@RequestBody String tableName) {
return dataService.importDataFromHiveToMySQL(tableName);
}
}