Sqoop1.4.6的安装及命令行使用

Sqoop1.4.6的安装及命令行使用

1.Sqoop简介

Sqoop,用来在关系型数据库与Hadoop之间进行数据的导入导出,将数据从数据库中导入到HDFS中进行数据处理,是一种转换工具。
Sqoop分为两大版本sqoop1和sqoop2,两者完全不兼容,1.4.x为sqoop1,1.99.x为sqoop2。

2.下载Sqoop

下载Sqoop,这里选择1.4.6当前稳定版本
当前稳定版
选择原生的Sqoop,sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

3.安装Sqoop

3.1解压

拷贝到Linux系统/root/Downloads/下并解压
tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

3.2将解压后的文件移动到/usr/local/目录下

mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/ /usr/local/

3.3配置sqoop-env.sh

在目录/usr/local/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/conf下,将sqoop-env-template.sh文件重命名为sqoop-env.sh,mv sqoop-env-template.sh sqoop-env.sh;编辑此文件vi sqoop-env.sh,指定Hadoop的安装路径信息(Hadoop2.6.4伪分布式

export HADOOP_COMMON_HOME=/usr/local/hadoop-2.6.4
export HADOOP_MAPRED_HOME=/usr/local/hadoop-2.6.4

3.4配置系统环境变量

vi /etc/profile

export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/local/hadoop-2.6.4
export SQOOP_HOME=/usr/local/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
export PATH=.:$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SQOOP_HOME/bin

source /etc/profile使配置立即生效

3.5验证安装是否成功

sqoop version
验证成功有警告

此时Sqoop安装成功了。

3.6去除警告

发现执行命令时出现了警告,因为还没有设置HBASE_HOME,HCAT_HOME等,在/usr/local/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/bin目录下修改configure-sqoop文件,找到echo输出的上述信息,注释掉
警告注释掉
再次执行时发现警告没有了,执行sqoop help可以查看所有命令
警告去掉后的显示

4.Sqoop的命令使用

4.1Windows本机下安装MySQL服务

下载MySQL,本机使用的是5.5.53版本的,64位和32位都能使用。数据库用户名密码本机设置的是root和root。安装好后启动MySQL服务。

4.2查看所有的数据库

sqoop list-databases --connect jdbc:mysql://192.168.1.97:3306/ --username root \
--password root

其中1.97是Windows系统的IP地址(MySQL服务是安装在Windows下的)。
出现找不到驱动包的错误提示
缺少mysql驱动包

解决:$SQOOP_HOME/lib目录下放置对应数据库的驱动包,本机连接的是MySQL,下载MySQL和Java的驱动包,本机使用的版本是mysql-connector-java-5.1.36-bin.jar,将其拷贝到$SQOOP_HOME/lib目录下。
再次执行sqoop命令,出现Host 'cyyun' is not allowed to connect to this MySQL server
不允许连接到mysql服务

解决:需要开启MySQL的远程帐号
Windows下打开MySQL命令行模式
windows下MySQL设置
输入密码进入mysql命令行后,执行命令

mysql>grant all privileges on *.* to root@'192.168.1.200' identified by 'root';
mysql>flush privileges;

设置允许远程连接
*.*代表全部数据库的全部表授权,也可以指定数据库授权,如test_db.*;
all privileges代表全部权限,也可以insert,update,delete,create,drop等;
允许root用户在192.168.1.200(Linux系统的IP)这个IP进行远程登陆,并设置root用户的密码为root。
flush privileges告诉服务器重新加载授权表。
执行命令后,看到运行结果,可以看到mysql、sakila、test和world数据库
看到运行结果

4.3列出数据库下所有表

sqoop list-tables --connect jdbc:mysql://192.168.1.97:3306/sakila --username root \
--password root

列出sakila数据库下的所有表,包括视图
列出数据库下所有表,包括视图

4.4数据库表中的数据导入到HDFS

注:要先启动Hadoop的集群
sqoop命令实际上都是转换为map任务,import命令是将DB数据导入HDFS。
本机建了一个数据库mydb,库下有一个user表,数据如下:
数据库里的内容

4.4.1import

执行命令

sqoop import --connect jdbc:mysql://192.168.1.97:3306/mydb -username root \
-password root --table user

上传操作
在HDFS的/user/root目录下生成了user目录
上传到hdfs上了4个文件
Sqoop默认会生成4个文件,一条记录一个文件,大于4条记录则最多生成4个文件。
查看结果:
查看上传的数据结果

4.4.2-m –target-dir

执行命令

sqoop import --connect jdbc:mysql://192.168.1.97:3306/mydb -username root \
-password root --table user -m 1 --target-dir sqoop_import_user

-m 1 表示map任务数
--target-dir sqoop_import_user 表示指定生成文件的名称,在HDFS中的路径为/user/root/sqoop_import_user/part-m-00000
导入只生成单个文件操作
结果查看:
一个文件生成后的结果查看

4.4.3-z ––append --where

执行命令

sqoop import --connect jdbc:mysql://192.168.1.97:3306/mydb -username root \
-password root --table user -m 1 --target-dir import_user -z --append --where "id=3"

-z 使用压缩格式导入,导入的文件使用-text查看
--append 追加数据,如果指定路径下存在文件part-m-00000则会生成新的文件,如part-m-00001
--where 根据字段过滤,先全部从数据库读出然后再根据条件过滤将符合要求的记录写入HDFS
执行-z-append-where
查看结果:
查看-z --append --where的文件

4.4.4--null-string --null-non-string

在user表添加一条记录测试null-string
添加一条记录测试null-string
执行命令

sqoop import --connect jdbc:mysql://192.168.1.97:3306/mydb -username root \
-password root --table user -m 1 --target-dir import_user \
--append --null-string "#" --null-non-string "-1"

--null-string "#" 表示当varchar字段为null时以#代替
--null-non-string "-1" 表示当非varchar字段为null以-1代替
nulltostring
结果查看,第5条null记录用#代替了:
第5条null记录用#代替了

4.5HDFS数据导出到数据库表

在mydb数据库下建空表user2(可复制user表的结构)
从HDFS导出数据到MySQL的表user2中:

sqoop export --connect jdbc:mysql://192.168.1.97:3306/mydb --table user2 \
--username root --password root --export-dir \
hdfs://cyyun:9000/user/root/sqoop_import_user/part-m-00000

--export-dir 表示HDFS要导出数据的目录
导出到表
/sqoop_import_user/part-m-00000此文件有四条记录,查看MySQL的user2表数据:
导入到表成功

本文参考:
http://blog.csdn.net/ty4315/article/details/53056124
http://blog.csdn.net/ty4315/article/details/53056151

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值