[大数据 Hive的周边工具 Sqoop应用集成]

目录

前言:

Hive的周边工具介绍及其应用场景的详细信息:

服务器指令实现Sqoop集成Hive,Mysql实现数据导出

集成Hive

集成MySQL

Java Springboot框架 集成Sqoop,Hive,Mysql  实现hive的导入/导出

POM依赖:

在application.properties文件中添加以下配置:

代码实现:

指令含义解读:

控制器实现


前言:

    分享一下大数据相关的应用学习,代码不是所有,主要是看实现的简单思路,和相关java层对应指令含义

Hive的周边工具介绍及其应用场景的详细信息:

  • Sqoop:Sqoop是一个开源工具,用于在Hadoop和关系型数据库之间进行数据传输。Sqoop可以将关系型数据库中的数据导入到Hadoop中,或将Hadoop中的数据导出到关系型数据库中。Sqoop主要应用于数据仓库的构建和数据集成等场景。

  • Flume:Flume是一个分布式的日志收集和聚合系统,可以将数据从不同的数据源(如Web服务器、数据库、应用程序等)收集到中央数据存储中。Flume主要应用于数据的实时采集和处理,包括日志分析、事件处理等。

  • Kafka:Kafka是一个高吞吐量的分布式消息系统,可以处理实时数据流或消息。Kafka可以作为消息和数据的缓冲区,将不同数据源的数据发送到相应的处理节点中,以实现实时处理和分析等场景。

  • Spark:Spark是一个开源的大数据处理框架,可以在内存中进行数据处理和分析。Spark可以与Hive结合使用,读取和处理Hive中的数据,并使用Spark的机器学习和深度学习等库进行数据分析和挖掘。

服务器指令实现Sqoop集成Hive,Mysql实现数据导出

集成Hive

  • 配置Hive的JDBC驱动:将hive-jdbc-x.x.x-standalone.jar复制到$SQOOP_HOME/lib目录下。
  • 导入数据到Hive:$SQOOP_HOME/bin/sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password password --table table_name --hive-import --hive-table hive_table_name
  • 导出数据到Hive:$SQOOP_HOME/bin/sqoop export --connect jdbc:mysql://localhost:3306/test --username root --password password --table table_name --export-dir /path/to/hdfs/directory --hive-import --hive-table hive_table_name

集成MySQL

  • 配置MySQL的JDBC驱动:将mysql-connector-java-x.x.x.jar复制到$SQOOP_HOME/lib目录下。
  • 导入数据到MySQL:$SQOOP_HOME/bin/sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password password --table table_name --target-dir /path/to/hdfs/directory --fields-terminated-by ',' --lines-terminated-by ' ' --delete-target-dir --m 1 --direct
  • 导出数据到MySQL:$SQOOP_HOME/bin/sqoop export --connect jdbc:mysql://localhost:3306/test --username root --password password --table table_name --export-dir /path/to/hdfs/directory --input-fields-terminated-by ',' --input-lines-terminated-by ' ' --update-key id --update-mode allowinsert --batch --direct

其中,--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参数表示使用批量模式导出数据。

Java Springboot框架 集成Sqoop,Hive,Mysql  实现hive的导入/导出

POM依赖:


    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

在application.properties文件中添加以下配置:

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);
    }
}

你可能感兴趣的:(hive,sqoop,大数据)