Sqoop 导入数据:
在 Sqoop 中,“导入”概念指:从非大数据集群(RDBMS)向大数据集群(HDFS,HIVE,HBASE)中传输数据,叫做:导入,即使用 import 关键字。
RDBMS 到 HDFS:
RDBMS:关系数据库管理系统
全部导入:
#!/usr/bin/env bash
sqoop import \
--connect jdbc:mysql://bigdata111:3306/test \
--username root \
--password 000000 \
--table student \
--target-dir /user/test/student \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t"
--connect:连接数据库
--username:用户名
--password:密码
--table:导入的表
--target-dir:导入到 HDFS 上的路径
--delete-target-dir:如果已经存在就删除
--num-mappers 1:MR 个数
--fields-terminated-by:分隔符
查询导入:
#!/usr/bin/env bash
sqoop import \
--connect jdbc:mysql://bigdata111:3306/test \
--username root \
--password 000000 \
--target-dir /user/test/student1 \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--query 'select name,sex from student where id <=6 and $CONDITIONS;'
尖叫提示:must contain ‘$CONDITIONS’ in WHERE clause. 注:CONDITIONS 翻译‘条件’
尖叫提示:如果后使用的是双引号,则前必须加转移符,防止识别为自己的变量。
导入指定列:
#!/usr/bin/env bash
sqoop import \
--connect jdbc:mysql://bigdata111:3306/test \
--username root \
--password 000000 \
--target-dir /user/test/student2 \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--columns id,name \
--table student
尖叫提示:columns中如果涉及到多列,用逗号分隔,分隔时不要添加空格
使用sqoop关键字筛选查询导入数据:
#!/usr/bin/env bash
sqoop import \
--connect jdbc:mysql://bigdata111:3306/test \
--username root \
--password 000000 \
--target-dir /user/test/student3 \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--table student \
--where "id=2"
尖叫提示:在Sqoop中可以使用sqoop import -D property.name=property.value这样的方式加入执行任务的参数,多个参数用空格隔开。
RDBMS 到 Hive:
#!/usr/bin/env bash
sqoop import \
--connect jdbc:mysql://bigdata111:3306/test \
--username root \
--password 000000 \
--table student \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table jds.student_hive
尖叫提示:该过程分为两步,第一步将数据导入到HDFS,第二步将导入到HDFS的数据迁移到Hive仓库
尖叫提示:从MYSQL到Hive,本质时从MYSQL => HDFS => load To Hive
Sqoop 数据导出:
在 Sqoop 中,“导出” 概念指:从大数据集群(HDFS,HIVE,HBASE)向非大数据集群(RDBMS)中传输数据,叫做:导出,即使用 export 关键字。
HIVE/HDFS 到 RDBMS:
#!/usr/bin/env bash
sqoop export \
--connect jdbc:mysql://bigdata111:3306/test?characterEncoding=utf-8 \
--username root \
--password 000000 \
--export-dir /user/hive/warehouse111/student_hive \
--table student1 \
--num-mappers 1 \
--input-fields-terminated-by "\t"
尖叫提示:Mysql 中如果表不存在,不会自动创建,自行根据表结构创建
思考:数据是覆盖还是追加 答案:追加
尖叫提示:如果是追加,数据库不能设置主键
尖叫提示:如果出现卡顿,则在 yarn-site.xml 中加入以下配置
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>20480</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>