大数据学习21:sqoop 语法和常用命令和小案例

1.1.0 sqoop 语法和常用命令
2.1.0 sqoop 典型用法
3.1.0 sqoop 的一个小案例
4.1.0 sqoop 的分区表导入导出

=======================================
1.1.0 sqoop 语法和常用命令
hive导入参数

  --hive-home   重写$HIVE_HOME  
  --hive-import          插入数据到hive当中,使用hive的默认分隔符  
  --hive-overwrite  重写插入  
  --create-hive-table  建表,如果表已经存在,该操作会报错!  
  --hive-table [table]  设置到hive当中的表名  
  --hive-drop-import-delims  导入到hive时删除 \n, \r, and \01   
  --hive-delims-replacement  导入到hive时用自定义的字符替换掉 \n, \r, and \01   
  --hive-partition-key          hive分区的key  
  --hive-partition-value   hive分区的值  
  --map-column-hive           类型匹配,sql类型对应到hive类型  

1.1.1 前期准备:
如果sqoop要连接mysql 或者 oracle 需要下载 相应的jdbc
放到 $SQOOP_HOME/lib/ 下 ,如果是CDH 那么放在

/opt/cloudera/parcels/CDH-5.4.10-1.cdh5.4.10.p0.16/lib/sqoop/lib 下
mysql-connector-java-5.1.27-bin.jar 
ojdbc6.jar

如果要采用压缩,那么需要在hdfs编译的时候加上native ,否则无法采用压缩。
例子:mvn clean package -Pdist,native -DskipTests -Dtar

1.1.2 list 功能
列出SQL中的所有库

sqoop list-databases --connect jdbc:mysql://192.168.100.100:3306/ -username root -password 123456

连接SQL 并列出库中的表

sqoop list-tables --connect jdbc:mysql://192.168.100.100:3306/oozie --username root --password 123456
sqoop list-tables --connect jdbc:mysql://192.168.100.100:3306/test --username root --password 123456
sqoop list-tables --connect jdbc:oracle:thin:@192.168.4.11:1521:dg1  --username wxk --password wxk

1.1.3 导入 mysql –> hdfs [表如果没有主键,这样会报错,需要特殊指定]
直接导入:

sqoop import \
--connect  jdbc:mysql://localhost:3306/sqoop \
--username root \
--password password \
--table emp

默认splits = 4 ,通过 -m 1 来指定maptask数量,也就是指定结果集分片的数量。

导入放在哪里了呢?默认放在 /user/用户名 下

[root@hadoop002 lib]# hadoop fs -ls /user/root
Found 1 items
drwxr-xr-x   - root supergroup          0 2017-09-23 10:05 /user/root/emp

一些参数解释:
–query 和 –table –where 不能同时使用,必须要加 $CONDITIONS,如果 query 后面是”” 那么要写 \$CONDITIONS 转义字符。
最好把要抽取的列直接写入sql中,这样能避免报错。
-m 指定分片,也是指定maptask数量
–delete-target-dir 覆盖,自动先删再导
–mapreduce-job-name 指定mr作业的名字
–columns “A,B” 导出指定的列
–target-dir EMP_COLUMN 导出到指定的路径 这里 EMP_COLUMN 其实也是表名的意思
–where “sal > 2000” 条件语句,按条件导出

例子1:
将 emp 的部分列 sal > 2000 的数据 从mysql的sqoop的库中 导入到 hdfs 上,存放在 /user/root/EMP_COLUMN 路径,
指定mapreduce的作业名为emp-all ,如果已经存在,那么先删除再导入。

sqoop import \
--connect  jdbc:mysql://localhost:3306/sqoop \
--username root \
--password password \
--table emp \
-m 1  \
--delete-target-dir \
--mapreduce-job-name emp-all \
--columns "empno,ename,job,mgr,sal,deptno" \
--target-dir EMP_COLUMN \
--where "sal > 2000"

例子2:
通过 sql 将数据从 mysql 的sqoop库中导入到hdfs上,存放在/user/root/EMP_COLUMN 路径,
指定mapreduce的作业名为emp-all ,如果已经存在,那么先删除再导入,
将输出文件设置为 parquet 或者 sequencefile 格式。

sqoop import \
--connect  jdbc:mysql://localhost:3306/sqoop \
--username root \
--password password \
-m 1  \
--delete-target-dir \
--mapreduce-job-name emp-all \
--columns "empno,ename,job,mgr,sal,deptno" \
--target-dir EMP_COLUMN \
--query 'select empno,ename,job,mgr,sal,deptno from emp where sal>2000 and $CONDITIONS'
--as-parquetfile 或者 --as-sequencefile


[root@hadoop002 ~]# hadoop fs -ls  /user/root/EMP_COLUMN/
Found 3 items
drwxr-xr-x   - root supergroup          0 2017-09-24 04:24 /user/root/EMP_COLUMN/.metadata
drwxr-xr-x   - root supergroup          0 2017-09-24 04:24 /user/root/EMP_COLUMN/.signals
-rw-r--r--   1 root supergroup       1714 2017-09-24 04:24 /user/root/EMP_COLUMN/d2ce0a72-51e2-4125-accc-deb449c2ac3a.parquet
[root@hadoop002 ~]# hadoop fs -ls    /user/root/EMP_COLUMN/
Found 2 items
-rw-r--r--   1 root supergroup          0 2017-09-24 04:26 /user/root/EMP_COLUMN/_SUCCESS
-rw-r--r--   1 root supergroup        587 2017-09-24 04:26 /user/root/EMP_COLUMN/part-m-00000

例子3:
将导入文件进行压缩 –compression-codec codec为hadoop的压缩模式,-z 为默认gzip

sqoop import \
--connect  jdbc:mysql://localhost:3306/sqoop \
--username root \
--password password \
-m 1  \
--delete-target-dir \
--mapreduce-job-name emp-all \
--columns "empno,ename,job,mgr,sal,deptno" \
--target-dir EMP_COLUMN \
--query 'select empno,ename,job,mgr,sal,deptno from emp where sal>2000 and $CONDITIONS' \
-z

如果用其他格式的压缩,需要配合hdfs上压缩格式使用。

--compression-codec snappy 163k
不用压缩 210k

如何查看能用的压缩格式?

[root@hadoop002 native]# hadoop checknative -a
17/09/26 04:04:31 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
17/09/
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值