安装配置sqoop
原料:
1.sqoop tar 包
2.mysql jar包[最好用高版本的,我用的是5.1.32版]
步骤1
解压tar包,指定安装路径。
2配置环境变量,在/etc/profile文件里指定家目录和path目录。
3.将mysql jar 驱动包放在sqoop安装目录的lib目录下。
4测试 sqoop list-databases jdbc:mysql://master:3306/sqoopDB --username sqoop -P
5输入密码。如果能显示所有数据库,则证明sqoop安装配置成功,并且与mysql建立链接,剩下要做的就是利用sqoop实现数据的导入导出。
创建数据源
接下来便是在Linux上的MySQL中创建一个数据库,我这里创建的是sqoopDB数据库,并创建一个sqoop用户并授予权限。
create user ‘uername’ indentified by'password'
grant all privileges on sqoopDB.* to userame@ % indentified by 'password'
再然后对权限的刷新
flush privileges;
接着在这个sqoopDB数据库创建表 并添加数据。添加完成后 使用sqoop将MySQL中数据上传到hdfs 或者是hive 中去。
sqoop导入数据命令
上传到hdfs命令: sqoop import --connect jdbc:mysql://mysql.server.ip:3306/sqoopDB --username 'username' -P --table 'tablename' --target-dir /user/sqoop
要注意的是hdfs中的user/sqoop中的sqoop不能存在,要是存在就无法自动创建 就会报错。
上传到hive 命令:sqoop import --connect jdbc:mysql://mysql.server.ip:3306/sqoopDB
--table 'tablename' --username 'username' -P --hive-import -m 1
--hive-import-m 1 是指定有一个map任务。
如果源数据发生改变了怎么办,比如发生insert update操作。这时候需要增量导入数据操作
目前sqoop支持两种增量导入,分别为append和lastmodified
append主要针对insert操作
lastmoified主要针对update操作
实现数据导入hive仓库分三步骤
1.将相应的表数据导入到hdfs中
2.把表数据类型映射为hive数据类型。然后根据表结构在hive上执行create table 操作创建hive表。
3.在hive中执行load data input 语句将hdfs上的表数据移动到hive数据仓库目录【该目录位置有定义在文件hive_home/conf/hive/hive_site.xml中的属性${hive.metastore.warehose.dir}设置】
sqoop-import-all -tables 操作
这个命令是把MySQL中的某一个数据库中的所有的表数据导入到hdfs中,每一个表数据分别位于hdfs上的一个单独目录下。
执行该命令操作必须满足三个条件。
1.要有主键,但主键不是组合键。
2,不能有任何子句。
3,所有表中的所有列都将被导入到hdfs上不能出现列数据丢失,否则不能导入。
此时需要把添加的两个表同时导入到hdfs 上
命令操作:sqoop import-all-tables --connect jdbc:mysql://192.168.145.100:3306/sqoopDB --username sqoop -P
数据的导出
sqoop -export 与sqoop-import 操作功能相反的。 即 吧HDFS HIVE HBase 上的数据导出数据库中,条件是数据库中的表必须存在,表结构也要相同。sqoop-export 支持三种模式,insert update call 执行导出操作时,sqoop将HDFS上输入文件中的数据根据用户指定的分隔符解析成一系列的记录和记录字段,sqoop export 操作默认将这些记录以insert方式插入到指定的数据库目标表中,用户可以指定update方式替换数据库系统中已经存在的记录,或指定call模式调用数据库系统存储过程。
sqoop 有很多命令,也有很多组合选项,一时半会记不来,也记不住,需要积累的,只要知道怎么操作,需要达成什么效果,到时候在上网搜命令。
最后有两个命令要注意
1 sqoop list-databases 这个在前面在我测试时候用到了,它是用于列举出指定数据库服务器中的数据库模式。
2.sqoop list-tables 用于列决出指定数据库服务器中的数据表。
eg: sqoop list -tables --connect jdbc:mysql://192.168.145.100/sqoopDB --username sqoop -P