Apache Sqoop基础及数据迁移

Apache Sqoop基础及数据迁移

一、什么是Sqoop?

      Sqoop是一个用于在Hadoop和关系数据库之间传输数据的工具。

  • 将数据从RDBMS导入到HDFS:HDFS、Hive、HBase。
  • 从HDFS导出数据到RDBMS。
  • 使用MapReduce导入和导出数据,提供并行操作和容错。

二、从RDBMS导入数据到HDFS:

1.导入表到HDFS

# connet 后面为你的mysql数据库链接/数据库名
# driver 后面为JDBC连接数据库的驱动包名
# table 后面为表名
# username 后面为你要连接的mysql数据库用户,通常为root
# password 后面为该用户连接数据库的密码
# delete 先删除之前导入的表
# target-dir为导出到的hdfs文件系统路径
# split-by 后面为按什么进行分组
# m 即map,表示分配的map个数,有几个map就会将导出结果分成几个文件
sqoop import --connect jdbc:mysql://localhost:3306/databasename --driver com.mysql.cj.jdbc.Driver \
--table tablename --username root --password password --delete-target-dir \
--target-dir hdfspath --split-by store_id  --m 3

2.通过Where语句过滤导入表

sqoop import --connect jdbc:mysql://localhost:3306/databasename --driver com.mysql.cj.jdbc.Driver \
--table tablename --where "employee_number>20" 
--username root --password password --delete-target-dir \
--target-dir hdfspath --split-by store_id  --m 3

3.使用query方式导入数据

# 换行时必须加入\表示,上一行和下一行连接在一起
sqoop import --connect jdbc:mysql://172.20.0.5:3306/test --driver com.mysql.cj.jdbc.Driver \
--table store_details --username root --password password --delete-target-dir \
--target-dir /user/root/mysql/dbs --split-by store_id \
--query “select * from store_details where \$CONDITIONS--m 3

4.通过COLUMNS过滤导入表

sqoop import --connect jdbc:mysql://localhost:3306/databasename --driver com.mysql.cj.jdbc.Driver \
--table tablename --columns"store_id,store_name,employee_number"
--username root --password password --delete-target-dir \
--target-dir hdfspath --split-by store_id  --m 3

5.使用Sqoop增量导入数据

#Incremental指定增量导入的模式
#增量导入方式为append追加数据至已经存在的HDFS数据集
#check-column:指定递增的列
#last-value:指定上一次导入的最大值
sqoop import --connect jdbc:mysql://localhost:3306/hr --driver com.mysql.cj.jdbc.Driver \
--table orders--username root --password password --incremental append\
--check-column order_date--last-value ‘2015-10-10’ --target-dir /data/orders--m 3

三、导入文件格式

#--as-textfile 		导入数据为text文件(默认)
#--as-avrodatafile	导入数据为avro文件
#--as-sequencefile	导入数据为sequence文件
#--as-parquetfile 	导入数据为parquet文件
sqoop import --connect jdbc:mysql://localhost:3306/databasename --driver com.mysql.cj.jdbc.Driver \
--table tablename --columns"store_id,store_name,employee_number"
--username root --password password --delete-target-dir \
--target-dir hdfspath --split-by store_id  --m 3 --as-sequencefile

四、从RDBMS导入数据到Hive

1.直接导入数据到Hive:

#--create-hive-table:自动创建表,生产中一般不使用
#--hive-overwrite:覆盖原有表数据
sqoop import --connect jdbc:mysql://localhost:3306/databasename --driver com.mysql.cj.jdbc.Driver \
--table tablename --columns"store_id,store_name,employee_number" --username root --password password \
--hive-import --create-hive-table --hive-database databaseName --hive-table tableName --m 1 --as-parquetfile

2.导入数据到Hive分区:

sqoop import --connect jdbc:mysql://localhost:3306/hr --driver com.mysql.cj.jdbc.Driver \
--query “select order_id, order_status from orders where order_date >= ‘2014-07-24’ and order_date < ‘2014-07-25’ and \$CONDITIONS” \
--username root   --password hadoop--target-dir /user/data/orders--split-by order_status \
--hive-import--hive-table eShop.orders--hive-partition-key “order_date”  \
--hive-partition-value “20140724”--m 3

五、从RDBMS导入数据到HBase

sqoop import \
    --connect jdbc:mysql://localhost:3306/databasename \
    --username root \
    --password password \
    --table tablename \
    --hbase-table hb_tablename \
    --column-family hb_column_family \
    --hbase-row-key hb_rowkey \
    -m 1 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值