[大数据 Sqoop,hive,HDFS数据操作]

这篇具有很好参考价值的文章主要介绍了[大数据 Sqoop,hive,HDFS数据操作]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

🥗前言:

🥗实现Sqoop集成Hive,HDFS实现数据导出

🥗依赖:

🥗配置文件:

🥗代码实现:

🥗控制器调用:

🥗Linux指令导入导出:

🥗使用Sqoop将数据导入到Hive表中。例如:

🥗使用Sqoop将数据从Hive表导出到MySQL中。例如:

🥗使用Sqoop将数据导入到HDFS中。例如:

🥗使用Sqoop将数据从HDFS中导出到本地文件系统中。例如:


🥗前言:

   以为是结束,原来是开始,无语

🥗实现Sqoop集成Hive,HDFS实现数据导出

🥗依赖:

<dependency>
    <groupId>org.apache.sqoop</groupId>
    <artifactId>sqoop</artifactId>
    <version>1.4.7</version>
</dependency>

<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-jdbc</artifactId>
    <version>3.1.2</version>
</dependency>

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>3.3.1</version>
</dependency>

🥗配置文件:

# Hive配置
hive.jdbc.driverClassName=org.apache.hive.jdbc.HiveDriver
hive.jdbc.url=jdbc:hive2://localhost:10000/default
hive.jdbc.username=hive
hive.jdbc.password=

# HDFS配置
fs.defaultFS=hdfs://localhost:9000

# Sqoop配置
sqoop.bin.path=/path/to/sqoop/bin

🥗代码实现:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.sqoop.Sqoop;
import org.apache.sqoop.tool.SqoopTool;
import org.apache.sqoop.tool.SqoopToolExport;
import org.apache.sqoop.tool.SqoopToolImport;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.io.IOException;

@Component
public class SqoopHiveHDFSImportExport {
    @Resource
    private JdbcTemplate jdbcTemplate;

    @Value("${hive.jdbc.driverClassName}")
    private String hiveDriverClassName;

    @Value("${hive.jdbc.url}")
    private String hiveUrl;

    @Value("${hive.jdbc.username}")
    private String hiveUsername;

    @Value("${hive.jdbc.password}")
    private String hivePassword;

    @Value("${fs.defaultFS}")
    private String defaultFS;

    @Value("${sqoop.bin.path}")
    private String sqoopBinPath;

    public void importDataToHive() {
        String[] sqoopArgs = new String[]{
                "--connect", "jdbc:mysql://localhost:3306/test",
                "--username", "root",
                "--password", "password",
                "--table", "table_name",
                "--hive-import",
                "--hive-table", "hive_table_name",
                "--hive-overwrite",
                "--hive-drop-import-delims",
                "--input-fields-terminated-by", ",",
                "--input-lines-terminated-by", "\n",
                "--null-string", "\\N",
                "--null-non-string", "\\N",
                "--direct"
        };
        SqoopTool tool = SqoopTool.getTool("import");
        Sqoop sqoop = new Sqoop((SqoopToolImport) tool);
        int res = Sqoop.runSqoop(sqoop, sqoopArgs);
        if (res != 0) {
            throw new RuntimeException("Sqoop import failed");
        }
    }

    public void exportDataToHDFS() throws IOException {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", defaultFS);
        FileSystem fs = FileSystem.get(conf);
        Path outputPath = new Path("/path/to/hdfs/directory");
        if (fs.exists(outputPath)) {
            fs.delete(outputPath, true);
        }
        String[] sqoopArgs = new String[]{
                "--connect", "jdbc:mysql://localhost:3306/test",
                "--username", "root",
                "--password", "password",
                "--table", "table_name",
                "--export-dir", outputPath.toString(),
                "--input-fields-terminated-by", ",",
                "--input-lines-terminated-by", "\n",
                "--update-key", "id",
                "--update-mode", "allowinsert",
                "--batch",
                "--direct"
        };
        SqoopTool tool = SqoopTool.getTool("export");
        Sqoop sqoop = new Sqoop((SqoopToolExport) tool);
        int res = Sqoop.runSqoop(sqoop, sqoopArgs);
        if (res != 0) {
            throw new RuntimeException("Sqoop export failed");
        }
    }

    public void importDataFromHDFS() {
        String[] sqoopArgs = new String[]{
                "--connect", hiveUrl,
                "--username", hiveUsername,
                "--password", hivePassword,
                "--table", "hive_table_name",
                "--export-dir", "/path/to/hdfs/directory",
                "--input-fields-terminated-by",",
                "--input-lines-terminated-by", "\n",
                "--null-string", "\N",
                "--null-non-string", "\N",
                "--direct"
           };
          SqoopTool tool = SqoopTool.getTool("import");
          Sqoop sqoop = new Sqoop((SqoopToolImport) tool);
          int res = Sqoop.runSqoop(sqoop, sqoopArgs);
           if (res != 0) {
            throw new RuntimeException("Sqoop import failed");
             }
        }

public void exportDataFromHive() {
    String[] sqoopArgs = new String[]{
            "--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", "\n",
            "--update-key", "id",
            "--update-mode", "allowinsert",
            "--batch",
            "--direct"
    };
    SqoopTool tool = SqoopTool.getTool("export");
    Sqoop sqoop = new Sqoop((SqoopToolExport) tool);
    int res = Sqoop.runSqoop(sqoop, sqoopArgs);
    if (res != 0) {
        throw new RuntimeException("Sqoop export failed");
    }
}

🥗指令含义:

🥗exportDataFromHive方法:

  • export: 表示使用Sqoop的导出命令。
  • --connect: 指定MySQL的JDBC连接URL。
  • --username: 指定MySQL的用户名。
  • --password: 指定MySQL的密码。
  • --table: 指定要导出的MySQL表名。
  • --export-dir: 指定HDFS中的导出目录。
  • --input-fields-terminated-by: 指定输入文件的字段分隔符。
  • --input-lines-terminated-by: 指定输入文件的行分隔符。
  • --update-key: 指定更新数据时使用的主键。
  • --update-mode: 指定更新数据的模式,allowinsert表示允许插入新数据。
  • --batch: 表示启用批处理模式。
  • --direct: 表示使用直接模式,将数据直接写入MySQL中,而不是先写入HDFS中再导入到MySQL中。

exportDataFromHive方法中的sqoopArgs字符串中指定的--export-dir参数是HDFS中的目录,是因为在将Hive中的数据导出到MySQL时,需要将数据先导出到HDFS中,然后再使用Sqoop将数据从HDFS导入到MySQL中。这是因为Sqoop是基于Hadoop的数据传输工具,可以将数据从Hadoop生态系统中的各种数据源(如HDFS、Hive、HBase等)导入到关系型数据库中,也可以将数据从关系型数据库导出到Hadoop生态系统中的各种数据源中。

exportDataFromHive方法中,我们使用Sqoop将Hive中的数据导出到HDFS中,然后再使用Sqoop将HDFS中的数据导入到MySQL中。这样做的好处是可以将数据存储在HDFS中,方便进行后续的数据处理和分析。同时,使用HDFS作为中间存储介质,可以提高数据传输的效率和稳定性,避免了直接将数据从Hive导出到MySQL中可能出现的网络传输问题和数据丢失问题。

🥗importDataToHive方法

  • import: 表示使用Sqoop的导入命令。
  • --connect: 指定MySQL的JDBC连接URL。
  • --username: 指定MySQL的用户名。
  • --password: 指定MySQL的密码。
  • --table: 指定要导入的MySQL表名。
  • --hive-import: 表示将数据导入到Hive中。
  • --hive-table: 指定Hive中的表名。
  • --hive-overwrite: 表示覆盖已存在的Hive表。
  • --hive-drop-import-delims: 表示删除导入数据中的分隔符。
  • --input-fields-terminated-by: 指定输入文件的字段分隔符。
  • --input-lines-terminated-by: 指定输入文件的行分隔符。
  • --null-string: 指定输入文件中的空字符串。
  • --null-non-string: 指定输入文件中的非字符串类型的空值。
  • --direct: 表示使用直接模式,将数据直接导入到Hive中。

这些指令的具体含义可以参考Sqoop的官方文档。其中,--input-fields-terminated-by--input-lines-terminated-by指定了输入文件的字段分隔符和行分隔符,这里使用了逗号和换行符。--null-string--null-non-string指定了输入文件中的空字符串和非字符串类型的空值,这里使用了\N表示空值。--hive-overwrite表示覆盖已存在的Hive表,--hive-drop-import-delims表示删除导入数据中的分隔符,这两个指令可以保证数据导入的正确性。

这些指令的具体含义可以参考Sqoop的官方文档。其中,--input-fields-terminated-by--input-lines-terminated-by指定了输入文件的字段分隔符和行分隔符,这里使用了逗号和换行符。--update-key指定了更新数据时使用的主键,这里使用了id作为主键。--update-mode指定了更新数据的模式,这里使用了allowinsert表示允许插入新数据。

🥗控制器调用:

@Autowired
private SqoopHiveHDFSImportExport sqoopHiveHDFSImportExport;

public void importDataToHive() {
    sqoopHiveHDFSImportExport.importDataToHive();
}

public void exportDataToHDFS() throws IOException {
    sqoopHiveHDFSImportExport.exportDataToHDFS();
}

public void importDataFromHDFS() {
    sqoopHiveHDFSImportExport.importDataFromHDFS();
}

public void exportDataFromHive() {
    sqoopHiveHDFSImportExport.exportDataFromHive();
}

🥗Linux指令导入导出:

需要准备的工作

  1. 安装Hive和HDFS,sqoop 这些都是在java环境之上进行
  2. 编写Hive表

🥗使用Sqoop将数据导入到Hive表中。例如:

sqoop import --connect jdbc:mysql://localhost/mydatabase --username myusername \n--password mypassword --table mytable --hive-import --create-hive-table \n--hive-table mytable --hive-database mydatabase --null-string '\N' --null-non-string '\N'

🥗使用Sqoop将数据从Hive表导出到MySQL中。例如:

sqoop export --connect jdbc:mysql://localhost/mydatabase --username myusername \n--password mypassword --table mytable --export-dir /user/hive/warehouse/mydatabase.db/mytable \n--input-fields-terminated-by ',' --input-lines-terminated-by '
'

🥗使用Sqoop将数据导入到HDFS中。例如:

sqoop import --connect jdbc:mysql://localhost/mydatabase --username myusername \n--password mypassword --table mytable --target-dir /user/hive/warehouse/mydatabase.db/mytable \n--null-string '\N' --null-non-string '\N'

🥗使用Sqoop将数据从HDFS中导出到本地文件系统中。例如:

sqoop export --connect jdbc:mysql://localhost/mydatabase --username myusername \n--password mypassword --table mytable --export-dir /user/hive/warehouse/mydatabase.db/mytable \n--input-fields-terminated-by ',' --input-lines-terminated-by '
' --outdir ./ \n--bindir ./ --m 1 --direct --fetch-size 1000

该命令从HDFS的/user/hive/warehouse/mydatabase.db/mytable目录下导出数据,然后将数据导入到本地文件系统中。导出的数据文件会保存在当前目录下。文章来源地址https://www.toymoban.com/news/detail-493271.html

到了这里,关于[大数据 Sqoop,hive,HDFS数据操作]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Hadoop】通过Sqoop实现从MySQL导入数据到HDFS

    各位CSDN的朋友们大家好!这篇文章是在困扰了我三天(甚至更久),经过不断尝试与踩坑总结出来的通过 Sqoop 从Mysql数据库导入数据到 Hadoop hdfs 的详细笔记与感想,希望能帮助到大家!本篇文章收录于 初心 的 大数据 专栏。 🏠 个人主页:初心%个人主页 🧑 个人简介:大家

    2024年02月06日
    浏览(47)
  • 大数据bug-sqoop(二:sqoop同步mysql数据到hive进行字段限制。)

    新增加三个参数 –query “${sql}” 这个参数添加对应表的sql语句。注意结尾必须添加 $CONDITIONS ,必须添加where 条件,如果没有where条件,写成where 1=1。案例如下: \\\"select id,key_id,key_type,\\\'\\\' as encryption_cert_chain,device_type,account_id_hash,user_identifier,user_id,request_id,device_id,vehicle_id,vehicl

    2024年02月12日
    浏览(32)
  • Sqoop(二):Hive导出数据到Oracle

    把Hive中的数据导入Oracle数据库。 1. 解释一下各行代码: 2. 案例: 3. 表多的话,把所有表名存放在文件下,循环跑批每个表 参考: https://codeleading.com/article/51121246034/#google_vignette

    2024年02月10日
    浏览(33)
  • Sqoop数据导入到Hive表的最佳实践

    将数据从关系型数据库导入到Hive表是大数据领域中的常见任务之一,Sqoop是一个强大的工具,可以帮助实现这一目标。本文将提供Sqoop数据导入到Hive表的最佳实践,包括详细的步骤、示例代码和最佳建议,以确保数据导入过程的高效性和可维护性。 Sqoop是一个开源工具,用于

    2024年01月23日
    浏览(33)
  • 使用sqoop从Hive导出数据到MySQL

    1、启动hadoop:start-all.sh。 2、启动mysql:support-files/mysql.server start。 3、启动hive:hive。 4、在hive中创建表。 (学生信息:学号xh,姓名xm)xsxx: create table bigdata03.xsxx ( xh String, xm String ) row format delimited fields terminated by \\\',\\\'stored as textfile; (课程信息:课程号kch,学号xh,课程名称

    2024年02月11日
    浏览(44)
  • 使用Sqoop将Hive数据导出到TiDB

    关系型数据库与大数据平台之间的数据传输之前写过一些 使用Sqoop将数据在HDFS与MySQL互导 使用Sqoop将SQL Server视图中数据导入Hive 使用DataX将Hive与MySQL中的表互导 使用Sqoop将Hive数据导出到TiDB虽然没写过,但网上一堆写的,那为什么我要专门写一下呢? 我发现一些大家可能会忽

    2024年01月23日
    浏览(38)
  • sqoop把hive中的数据导入mysql

    记录简单案例 首先开启集群: 在hive中建库建表,并插入一条数据来为自己做实验: 验证一下,是否插入成功: 在mysql中建表,并且要与hive中传过来的数据字段相对应: 建表后为空: 用sqoop将hive中的数据传到mysql中: export 导出数据, –connect 连接数据库的参数, –userna

    2024年02月07日
    浏览(70)
  • Sqoop将hive处理的数据导出到MySQL

    目录 部署前提 一、创建数据上传到hive中 创建学生表数据:vim stu.txt 创建课程表数据:vim course.txt 在hive中创建学生表和课程表: 上传数据到hdfs上的hive中: 二、处理hive中的数据 查询学生姓名和课程信息,创建结果表stu_result: 插入数据: 三、在mysql中创建结果表 四、将hive中处

    2024年02月03日
    浏览(31)
  • 将Sqoop与Hive集成无缝的数据分析

    将Sqoop与Hive集成是实现无缝数据分析的重要一步,它可以将关系型数据库中的数据导入到Hive中进行高级数据处理和查询。本文将深入探讨如何实现Sqoop与Hive的集成,并提供详细的示例代码和全面的内容,以帮助大家更好地了解和应用这一技术。 将Sqoop与Hive集成的主要目的是

    2024年01月18日
    浏览(26)
  • 使用sqoop将hive数据库导入至mysql

    前言:本文由实现此博客过程中遇到的问题及解决办法整理而成。博客:淘宝双11数据分析与预测课程案例-步骤三:将数据从Hive导入到MySQL_厦大数据库实验室 数据 数据放在 /usr/local/data/comment.csv 数据来源于:Amazon Reviews: Unlocked Mobile Phones | Kaggle 大数据开发环境 软件 版本 had

    2024年02月05日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包