目录
一、Sqoop中的Job任务
二、使用Job任务实现增量导入
三、从mysql导入hdfs的时候可以指定在hdfs上存储格式
四、Lombok(龙目)
一、Sqoop中的Job任务
创建job任务好处:
1、可以将经常使用的导入导出脚本,编写为job任务,每次执行一下命令即可
2、可以帮助我们记录last-value,从而更好的利用last-value进行增量导入
job命令中有哪些参数:
usage: sqoop job [GENERIC-ARGS] [JOB-ARGS] [-- [<tool-name>] [TOOL-ARGS]]Job management arguments:--create <job-id> Create a new saved job--delete <job-id> Delete a saved job--exec <job-id> Run a saved job--help Print usage instructions--list List saved jobs--meta-connect <jdbc-uri> Specify JDBC connect string for themetastore--show <job-id> Show the parameters for a saved job--verbose Print more information while working
创建一个job任务:
历史上有一个公司,叫做lloogg
sqoop job --create jjoobb -- import --connect jdbc:mysql://bigdata01:3306/sqoop \
--username root \
--password 123456 \
--table user \
--delete-target-dir \
--target-dir '/sqoopdata/user' \
-m 1
如果出现上面的关于Json的错误,请进行如下修复:
1)在sqoop/lib 下,拷贝一个 java-json的jar包:
2) sqoop-env.sh 中 添加 export HCAT_HOME=/opt/installs/hive/hcatalog
3)删除 sqoop中的lib中 hive-exec-3.1.2.jar 这个jar包(可选,我们以前就没有拷贝)。
以上操作完成后,继续创建job任务,如果创建好了之后,就可以执行了
sqoop job --exec jjoobb
要输入mysql的密码。
总结:
sqoop job --create jod的名字
sqoop job --list
sqoop job --delete job的名字
sqoop job --exec job的名字
二、使用Job任务实现增量导入
通过昨天的last-value的增量导入代码,实现一个job任务:
sqoop job --create auto_import -- import --connect jdbc:mysql://bigdata01:3306/sqoop \
--username root \
--password 123456 \
--table sales_order \
--driver com.mysql.cj.jdbc.Driver \
--target-dir /home/sales_order/dt=20240903 \
--split-by orderId \
-m 1 \
--check-column orderId \
--incremental append \
--last-value 0 \
--fields-terminated-by '\t'
执行该脚本:
sqoop job --exec auto_import
在数据库中新增两条数据,再次执行这个任务,就能看到增量导入的效果。
三、从mysql导入hdfs的时候可以指定在hdfs上存储格式
sqoop import --connect jdbc:mysql://bigdata01:3306/sqoop \
--username root \
--password 123456 \
--table user \
--delete-target-dir \
--target-dir '/sqoopdata/user2' \
-m 1 \
--fields-terminated-by '\t' \
--null-string '\\N' \
--null-non-string '0' \
--as-parquetfile
--null-string '\\N' \
--null-non-string '0' \假如我们的mysql中的数据有null值如何处理?
就看有null值的字段是什么类型的,如果是string类型,就导出成 \N
如果是数值类型的,就导入变为 0-as-parquetfile 将mysql数据导出到hdfs的时候,是parquet类型的
假如在hdfs上有一个文件,创建一个hive表,指定这个表的数据的位置就是这个文件所在的位置。
请问:hive中有数据吗? 答案是有数据!!!!
现在创建一个表,字段跟数据的文件字段数量和类型都一样,最重要的是数据类型和存储位置一定要要分析的文件一样。
create external table users(
id int,
age int
)
row format delimited
fields terminated by '\t'
stored as parquet
location '/sqoopdata/user2'
补充一个UUID:
package com.bigdata;import java.util.UUID;public class UUIDDemo {/*** UUID 经常用于给图片或者文件起别名的时候* @param args*/public static void main(String[] args) {for (int i = 0; i < 100; i++) {// d8bfa531-80d9-441e-a9bc-6b18d962570b 36位的随机字符串,其中有4个- UUID,全球唯一UUID uuid = UUID.randomUUID();String str = uuid.toString();System.out.println(str.replaceAll("-",""));}}
}
四、Lombok(龙目)
1、需要安装插件 idea
2、在项目中导入包
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency>
3、使用
可以帮助我们快速实现一个实体的,set get 方法,toString 方法,无参构造方法,没有构造方法等
什么是实体:一个类,只有属性和set、get方法,这个类就称之为实体。
一般有这些名字:entry、javabean、pojo
4、实战
package com.bigdata;import lombok.*;@NoArgsConstructor
@AllArgsConstructor
@Data
public class Student {private String name;private int age;
}package com.bigdata;public class TestStudent {public static void main(String[] args) {Student student = new Student();student.setName("zhangsan");student.setAge(20);System.out.println(student.getName());Student student2 = new Student("lisi",20);System.out.println(student2.toString());}
}