利用Sqoop从HDFS导出数据到DB

需求
hadoop分析完的结果数据最终要呈现给用户,其中一些结果可能需要导入DB。
这里大部分是insert操作,但是有些时候可能还需要update。最好是如果存在就update,不存在就insert。

目标
将一系列HDFS中的文件导出到RDBMS。这里要求RDBMS的表必须提前创建。
文件中的数据通过指定的分割符被解析为表中的记录。
支持insert、update和insertOrUpdate

语法
* 命令
sqoop-export或sqoop export
* 通用参数
  --connect <jdbc-uri>                             指定JDBC链接串
  --connection-manager   <class-name>   指定使用的connection manager class
  --driver <class-name>                          手动指定用户的JDBC driver class
  -P                                                        从console读入连接DB的password
  --password <password>                       设置连接DB的password
  --username <username>                      设置连接DB的username
  --connection-param-file <filename>      可选的连接DB的properties文件
  --verbose                                             运行时输出更多信息
  --hadoop-home <dir>                           覆盖$HADOOP_HOME
  --help输出用法介绍
* 导出参数
  --direct                                                Use direct export fast path
  --export-dir <dir>                                为了export的HDFS源路径
  -m,--num-mappers <n>                      使用n个map tasks去并行的执行export,默认为4
  --table <table-name>                         导入的Table
  --update-key <col-name>                   update时使用的条件列,多个列时用逗号分隔
  -update-mode <mode>                      update时,发现新记录的处理方式,默认updateonly,还可以设置allowinsert
  --input-null-string <null-string>          The string to be interpreted as null for string columns
  --input-null-non-string <null-str>        The string to be interpreted as null for non-string columns
  --staging-table <staging-table-name> The table in which data will be staged before being inserted into the destination table.
  --clear-staging-table                           Indicates that any data present in the staging table can be deleted.
  --batch                                              Use batch mode for underlying statement execution.
* Input解析参数
  --input-enclosed-by <char>                Sets a required field encloser
  --input-escaped-by <char>                 Sets the input escape character
  --input-fields-terminated-by <char>    Sets the input field separator
  --input-lines-terminated-by <char>     Sets the input end-of-line character
  --input-optionally-enclosed-by <char> Sets a field enclosing character
* 输出行格式参数
  --enclosed-by <char>                        Sets a required field enclosing character
  --escaped-by <char>                        Sets the escape character
  --fields-terminated-by <char>           Sets the field separator character
  --lines-terminated-by <char>           Sets the end-of-line character
  --mysql-delimiters                           Uses MySQL’s default delimiter set: fields: , lines: \n escaped-by: \ optionally-enclosed-by: '
  --optionally-enclosed-by <char>      Sets a field enclosing character
* 代码生成参数
  --bindir <dir>                                  Output directory for compiled objects 
  --class-name <name>                    Sets the generated class name. 
                                                       This overrides --package-name. When combined with --jar-file, sets the input class. 
  --jar-file <file>                               Disable code generation; use specified jar 
  --outdir <dir>                                 Output directory for generated code 
  --package-name <name>               Put auto-generated classes in this package 
  --map-column-java <m>                Override default mapping from SQL type to Java type for configured columns. 
最佳示例
         sqoop export --connect jdbc:oracle:thin:@xxx:1521:xxx --username xxx --password xxx\  
                             --export-dir  /user/hadoop/stat/*\
                             -m 1 \
                             --table NS_SLLOG_CLIENT_SUM_OS \
                             --update-key ACTIVITYTIME,CLIENT_VER,OS  \
                             --update-mode  allowinsert  \
                             --input-fields-terminated-by '\t'  \
                             --outdir jobs  \
                             --package-name com.xxxx.sqoop
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: sqoop是一个用于在Hadoop和关系型数据库之间传输数据的工具。可以使用sqoopHDFS中的数据导出到MySQL数据库中。 具体步骤如下: 1. 首先需要安装sqoop,并配置好相关环境变量。 2. 然后使用以下命令将HDFS中的数据导出到MySQL中: sqoop export --connect jdbc:mysql://localhost:3306/test --username root --password root --table test_table --export-dir /user/hadoop/input --input-fields-terminated-by ',' 其中,--connect参数指定了MySQL数据库的连接地址,--username和--password参数指定了MySQL数据库的用户名和密码,--table参数指定了要导出的表名,--export-dir参数指定了HDFS中要导出数据的路径,--input-fields-terminated-by参数指定了输入文件的分隔符。 3. 执行以上命令后,sqoop会将HDFS中的数据导出到MySQL数据库中的test_table表中。 希望对你有所帮助! ### 回答2: Sqoop是一个Apache基金会下属的开源项目,用于将结构化数据导入和导出到Hadoop集群中。Sqoop可以很方便的从关系型数据库(如MySQL、Oracle、PostgreSQL等)导入数据到Hadoop中,也可以将数据从Hadoop导出到关系型数据库中。 具体来说,我们可以通过Sqoop数据HDFS导出到MySQL中。首先要安装配置好Sqoop和MySQL,然后进行如下操作: 1. 在Hadoop中将需要导出数据存储到HDFS中; 2. 执行Sqoop命令从HDFS中将数据导出到MySQL中; 3. 指定导出数据的表名和目标MySQL数据库; 4. 在MySQL中确认数据已经成功导入。 下面是具体的操作步骤: 1. 在Hadoop中将需要导出数据存储到HDFS中。假设我们需要导出数据在Hadoop的/user/hadoop/input目录中,可以使用以下命令将数据存储到HDFS中: ``` hadoop fs -put [本地目录] [HDFS目录] ``` 2. 执行Sqoop命令从HDFS中将数据导出到MySQL中。下面是一个示例Sqoop命令: ``` sqoop export --connect jdbc:mysql://localhost/test --username root --password root --table [目标表名] --export-dir [HDFS目录] ``` 其中,--connect指定MySQL的连接地址、--username指定登录MySQL的用户名、--password指定登录MySQL的密码、--table指定导出的目标表名、--export-dir指定导出数据HDFS目录。 3. 在MySQL中确认数据已经成功导入。可以使用以下命令进行查询: ``` select * from [目标表名] ``` 综上所述,Sqoop可以将Hadoop中的数据快速方便地导出到关系型数据库中,为企业提供了数据分析和业务应用上的便利。需要注意的是,使用Sqoop导出数据时要配置好数据的格式和存储方式,以确保数据的完整性和一致性。 ### 回答3: Sqoop 是一个可用于将 Hadoop 与关系型数据库结合使用的工具。它可以将关系型数据库中存储的数据通过 MapReduce 将数据转移到 Hadoop 的分布式文件系统 HDFS 以及反向操作(从 HDFS数据转移到关系型数据库中)。Sqoop 具有以下特点: 1. 速度快:Sqoop 向关系型数据库发出的查询语句是高效的,并能够并行地将数据从关系型数据导出和导入到 Hadoop 中。 2. 数据完整性:Sqoop 按照关系型数据库中的表结构,直接将数据导出和导入 Hadoop,因此数据完整性较高。 3. 易于使用:Sqoop 操作简单易懂,可以通过使用命令行工具或 Sqoop 界面轻松地导入和导出大量数据。 将数据HDFS 导出到 MySQL 中,可以通过以下步骤完成: 1. 在 Sqoop 中创建连接:可以通过以下方式创建一个到 MySQL 数据库的连接: sqoop import \ --connect jdbc:mysql://localhost:3306/mydatabase \ --username root \ --password password \ --table mytable 2. 定义导出数据:可以使用以下命令来定义要导出数据sqoop import \ --connect jdbc:mysql://localhost:3306/mydatabase \ --username root \ --password password \ --table mytable \ --columns col1,col2,col3 \ --where "col1 > 100" 其中,“columns”参数允许您指定要导出的列,而“where”参数允许您指定从源表中选择要导出的行。 3. 导出数据HDFS:使用以下命令将数据导出HDFSsqoop import \ --connect jdbc:mysql://localhost:3306/mydatabase \ --username root \ --password password \ --table mytable \ --columns col1,col2,col3 \ --where "col1 > 100" \ --target-dir /user/hadoop/mydata 其中,“target-dir”参数将数据导出HDFS 中的目录中。 4. 将数据HDFS 导入 MySQL:使用以下命令将数据HDFS 导入到 MySQL 中: sqoop export \ --connect jdbc:mysql://localhost:3306/mydatabase \ --username root \ --password password \ --table mytable \ --export-dir /user/hadoop/mydata 其中,“export-dir”参数指定导入的数据所在的 HDFS 目录。 以上是将数据HDFS 导出到 MySQL 中的基本步骤。Sqoop 可以使用其他参数和选项进行更复杂的操作,可以根据需要自由配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值