立即注册 登录
About云-梭伦科技 返回首页

9528的个人空间 https://aboutyun.com/?4570 [收藏] [复制] [分享] [RSS]

日志

sqoop 常用命令

已有 1789 次阅读2014-5-11 12:49

最新研究了下hadoop生态系统圈的各种常用组件。今天来总结下sqoop的常用命令

Sqoop 常用命令

查看Sqoop命令信息
输入"sqoop help"会显示出当前版本下的所有命令信息。


输入"sqoop help <command name>"会显示出该命令的具体使用方法。

查看数据库/表信息
输入" sqoop list-databases --connect jdbc:mysql://192.168.0.120:3306 --username root --password 123 " 就能查看服务器"192.168.0.120"上mysql数据库的数据库信息。

输入" sqoop list-tables --connect jdbc:mysql://192.168.0.120:3306/cordys --username root --password 123 " 就能查看服务器"192.168.0.120"上mysql数据库上名叫"cordys"的数据库中的表信息

数据库---HDFS 数据互导(连接地址不能用'localhost')
hdfs------>mysql
输入" sqoop export --connect jdbc:mysql://192.168.0.120:3306/cordys?characterEncoding=UTF8 --username root --password 123 --table sqoop_user --export-dir hdfs://namenode:9000/hive/warehouse/user/user.txt "
该命令将hdfs上的文件("hdfs://namenode:9000/hive/warehouse/user/user.txt")导入数据表"sqoop_user"中。
值得注意的是该命令导入数据时字段之间是以","进行分隔的。我们可以通过指定参数" --input-fields-terminated-by '\t' "来设置导出时数据之间用的分隔符。

mysql------>hdfs
输入" sqoop import --connect jdbc:mysql://192.168.0.120:3306/cordys --table sqoop_user --username root --password 123 -m 1 --target-dir /user/sqoop/sqoop_user "
该命令将mysql表(sqoop_user)中的数据导入hdfs中("--target-dir /user/sqoop/sqoop_user"指出了导入的hdfs路径,默认是"/user/<当前登录用户名>/当前表名",我的环境下就是"/user/hadoop/sqoop_user")。"-m 1"表示用一个mapreduce job来执行该操作。

数据库---HIVE 数据互导
hive------>mysql
hive导入到mysql操作和hdfs导入到mysql是一样的,需要注意的是需要根据我们实际的情况指定字段之间的分隔符" --input-fields-terminated-by '\t' "。

mysql----->hive
如果hive中没有mysql中对应的表的结构,那么可以用命令复制mysql的表结构到hive中(当然也可以直接到hive中去创建)。sqoop连接hive需要thrift的jar包,我直接将hive的lib目录下的"libthrift-0.9.0.jar"放到sqoop的lib目录下就OK了。命令如下:
" sqoop create-hive-table --connect jdbc:mysql://192.168.0.120:3306/cordys?characterEncoding=UTF8 --table sqoop_user --username root --password  123 --hive-table hive_user --fields-terminated-by '\t'"

然后输入" sqoop import --connect jdbc:mysql://192.168.0.120:3306/cordys --table sqoop_user --username root --password 123  --hive-table hive_user -m 1 --target-dir /hive/warehouse/hive_user"将mysql的表数据导入hive的表中。如果使用的是默认配置,就不需要指定"--target-dir"。由于我修改了hive的"warehouse"所以需要指定路径(很鸡肋,感觉还不如直接导入hdfs)。


数据库---HBase 数据互导

mysql------>hbase
输入" sqoop import --connect jdbc:mysql://192.168.0.120:3306/cordys?characterEncoding=UTF8 --table T_MENU --username root --password 123 -m 2 --hbase-create-table --hbase-table menu --hbase-row-key PK_ID --column-family info"
该命令将mysql中的"T_MENU"表中的数据导入hbase的'menu'表中。
参数"--hbase-row-key PK_ID"表示使用"T_MENU"表中的"PK_ID"字段作为hbase表的行键
参数"--hbase-create-table"表示如果没有表则会自动建表。
参数"--column-family"用来指定hbase的column family。
貌似sqoop不支持将hbase的数据导出到mysql中,实际上我们的实际应用也应该很少有这样的应用场景。

 


其它各种操作可以参考官方介绍 http://archive.cloudera.com/cdh/3/sqoop-1.2.0-CDH3B4/SqoopUserGuide.html#_literal_sqoop_create_hive_table_literal

 

 

 

 

 

 

 

 

 

 

 

 


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

关闭

推荐上一条 /2 下一条