sqoop查看mysql表_【Sqoop】介绍、安装、使用(列出MySQL中数据库/表 + mysql数据导入到Hive表 + Hive表数据导出到mysql表)...

本文介绍了Sqoop工具的安装与使用,包括如何列出MySQL中的数据库和表,以及如何将MySQL数据导入到Hive表,并提供了一个具体的导入示例。此外,还提到了将Hive表数据导出到MySQL的命令。
摘要由CSDN通过智能技术生成

目录

一、介绍

功能:Sqoop是一个采集工具。类似于Flume,但是Flume是从一些日志中采集信息,Sqoop是从RDBMS中采集信息。比如Sqoop采集信息到HDFS/Hive。

版本:

Sqoop: 1.4.7 (用)

Sqoop2:  1.99.7(不用)

Sqoop的底层是:MapReduce中的map。

二、安装

步骤如下:

1)地址http://archive.cloudera.com/cdh5/cdh/5/,下载sqoop-1.4.6-cdh5.7.0.tar.gz

2)解压到~/app

3)拷贝MySQL Driver:mysql-connector-java-5.1.27-bin.jar到Hive的安装包下的lib中

4)conf/sqoop-env.sh 配置

[hadoop@hadoop001 conf]$ cp sqoop-env-template.sh sqoop-env.sh

[hadoop@hadoop001 conf]$ vi sqoop-env.sh

export HADOOP_COMMON_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0

export HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0

export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0

5)vi ~/.bash_profile 配置Sqoop进环境变量

export SQOOP_HOME=/home/hadoop/app/sqoop-1.4.6-cdh5.7.0

export PATH=$SQOOP_HOME/bin:$HIVE_HOME/bin:$HADOOP_HOME

6)使环境变量生效:`source ~/.bash_profile`

7)查看是否配置成功:

[hadoop@hadoop001 bin]$ echo $SQOOP_HOME

/home/hadoop/app/sqoop-1.4.6-cdh5.7.0

三、使用

查看sqoop命令的使用帮助:[hadoop@hadoop001 bin]$ sqoop help

sqoop的导入、导出命令(出发点是Hadoop):

导入(import): MySQL ==> Hadoop

导出(export): Hadoop ==> MySQL

(但是:实际上SparkSpark就可以非常方便的实现读取MySQL中的表进Hadoop中/Hive中)

1、列出MySQL中所有的数据库

sqoop list-databases \

--username root --password 123456 \

--connect jdbc:mysql://localhost:3306/

2、列出MySQL指定数据库下的所有表

sqoop list-tables \

--username root --password 123456 \

--connect jdbc:mysql://localhost:3306/test

3、将MySQL表数据导入进Hive表

sqoop import --help :导入命令的帮助

导入的命令:

sqoop import \

--connect jdbc:mysql://localhost:3306/test06 \   ---mysql的连接

--username root --password root \   ---mysql的连接

--delete-target-dir \  -----建议每次导入的时候加上这个参数,每次以删除的模式导入,对应MR中的输出目录如果存在就报错的异常

--table city_info \    -----读取的mysql的表名

--hive-import \  ---功能是导入

--hive-table city_info \  ----导入hive表的表名

--hive-overwrite \        ----导入表 覆盖的方式

--fields-terminated-by '\t' \  ---表字段分隔符

--lines-terminated-by '\n' \   ---行分隔符

--split-by city_id \  ---指明主键 ,因为Sqoop默认把主键作为map的分片 ,这样可以把mysql中数据根据主键分片

-m 2  ---并行的map的数量(因为Sqoop的导入功能实际上就是MR,只有map过程)

1)MR角度:从导入的过程中就可以看得出来,这个MapReduce作业是只有map的。

2)并行度角度:Sqoop默认的并行度是4,也就是mapper数是4。可以通过-m设置这个MapReduce作业的并行度。Sqoop默认以主键作为map分片,通过--split-by​​​​​​​指明主键mysql中分片的主键。

执行完上述命令之后,mysql中的城市表数据就导入HDFS中了,但是默认导入HDFS的/user/hadoop(用户名)/表名下,而不是hive表对应的路径下,所以还需要将HDFS上的数据hdfs dfs -mv 移动到hive表对应的路径下,这样在hive表中就能查询到数据了。

如果想sqoop导入的数据直接进入hive的表目录下,使用--target-dir /user/hive/warehouse/hive.db/city_info参数就可以了。其中:输出目录不能存在。

现在来测试一下--target-dir参数,导入的命令:

参考:https://blog.csdn.net/finejade1027/article/details/90380038

创建MySQL表:

CREATE TABLE `city_info` (

`id` int(11) DEFAULT NULL,

`name` varchar(255) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

mysql> insert into city_info(id,name) values(1,"tom");

Query OK, 1 row affected (0.02 sec)

mysql> insert into city_info(id,name) values(2,"mike");

Query OK, 1 row affected (0.00 sec)

导入MySQL数据到HDFS的命令:

sqoop import \

--username root --password 123456 \

--connect jdbc:mysql://localhost:3306/test \

--query "select * from city_info where \$CONDITIONS" \

--target-dir /wordcount/data --fields-terminated-by ',' \

--split-by id -m 1

其中:输出目录不能存在。其中:where \$CONDITIONS是固定的

导入的时候可能提示下面的信息,不用管它,没有关系。把导入的命令写在一行就可以:

Warning: /home/hadoop/app/sqoop-1.4.6-cdh5.7.0/../hbase does not exist! HBase imports will fail.

Please set $HBASE_HOME to the root of your HBase installation.

Warning: /home/hadoop/app/sqoop-1.4.6-cdh5.7.0/../hcatalog does not exist! HCatalog jobs will fail.

Please set $HCAT_HOME to the root of your HCatalog installation.

Warning: /home/hadoop/app/sqoop-1.4.6-cdh5.7.0/../accumulo does not exist! Accumulo imports will fail.

Please set $ACCUMULO_HOME to the root of your Accumulo installation.

Warning: /home/hadoop/app/sqoop-1.4.6-cdh5.7.0/../zookeeper does not exist! Accumulo imports will fail.

Please set $ZOOKEEPER_HOME to the root of your Zookeeper installation.

--target-dir /wordcount \

-m 219/08/21 13:25:10 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6-cdh5.7.0

19/08/21 13:25:10 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.

19/08/21 13:25:10 ERROR tool.BaseSqoopTool: Error parsing arguments for import:

19/08/21 13:25:10 ERROR tool.BaseSqoopTool: Unrecognized argument:

实际走的是一个MR,存储到HDFS:

[hadoop@hadoop001 bin]$ hdfs dfs -cat /wordcount/data/p*

1,tom

2,mike

4、将Hive表数据导出进MySQL表

[fanl@centos7 sqoop-1.4.6-cdh5.14.2]$ bin/sqoop export \

--connect jdbc:mysql://127.0.0.1:3306/sqoop \

--username root \

--password 123456 \

--table logs_result \------>mysql的表

--export-dir '/user/hive/warehouse/weblogs.db/logs_result' \----->hive中表的路径

--num-mappers 2  \------->Sqoop的并行度

--input-fields-terminated-by '\001'

## hive默认的分隔符:\001

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值