热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sqoop基本配置与导入导出学习笔记(Draft)

注,文档由word粘贴过后格式有错乱,图片也无法显示,稍后会进行调整,并将代码用代码格式显示。一.Sqoop介绍及安装http:sqoop

 

 注,文档由word粘贴过后格式有错乱,图片也无法显示,稍后会进行调整,并将代码用代码格式显示。

 

 

一.Sqoop介绍及安装

 

 

http://sqoop.apache.org/

文档:http://sqoop.apache.org/docs/1.4.6/index.html

https://dev.mysql.com/downloads/mysql/

 

解压后的环境变量配置:

vi /etc/profile

 

#set sqoop home

SQOOP_HOME=/sqoop-1.4.6

PATH=$SQOOP_HOME/bin:$PATH

 

export SQOOP_HOME PATH

 

 

验证版本,暂时忽略其他因组件不存在而抛出的警告

#sqoop version

 

 

与往常一样,要使sqoop连接到不同的数据库,则需要先加载对应数据库的jar包才行。

放在$SQOOP_HOME/lib中

 

 

Mysql:

 

[root@hadoop1setup]# rpm -vih --nodeps mysql-community-libs-compat-5.7.17-1.el5.x86_64.rpm

[root@hadoop1setup]# rpm -vih --nodeps mysql-community-libs-5.7.17-1.el5.x86_64.rpm

[root@hadoop1setup]# rpm -vih mysql-community-client-5.7.17-1.el5.x86_64.rpm

[root@hadoop1setup]# rpm -vih mysql-5.7.17-1.el5.x86_64.rpm

[root@hadoop1setup]# rpm -vih mysql-community-common-5.7.17-1.el5.x86_64.rpm

[root@hadoop1setup]# rpm -vih mysql-community-server-5.7.17-1.el5.x86_64.rpm

 

/etc/rc.d/init.d/mysqldstart|status

servicemysqld start

 

 

 

[root@hadoop1setup]# service mysqld stop

[root@hadoop1setup]# mysqld_safe --skip-grant-tables

 

[root@hadoop1~]# mysql

mysql>use mysql;

mysql>update user set authentication_string=password('root') where user='root';

QueryOK, 0 rows affected, 1 warning (0.00 sec)

Rowsmatched: 1  Changed: 0  Warnings: 1

 

mysql>flush privileges;

QueryOK, 0 rows affected (0.00 sec)

mysql>quit

 

[root@hadoop1~]# mysql -u root -p

mysql>set password=password('Gopro5hero!');

QueryOK, 0 rows affected, 1 warning (0.00 sec)

 

mysql>show databases;

+--------------------+

|Database           |

+--------------------+

|information_schema |

|mysql              |

|performance_schema |

|sys                |

+--------------------+

4rows in set (0.00 sec)

 

 

mysql>select user,host from user;

+-----------+-----------+

|user      | host      |

+-----------+-----------+

|Bond      | localhost |

|mysql.sys | localhost |

|root      | localhost |

+-----------+-----------+

3rows in set (0.00 sec)

 

mysql>update user set host='%' where user='root';

QueryOK, 1 row affected (0.00 sec)

Rowsmatched: 1  Changed: 1  Warnings: 0

 

mysql>flush privileges;

QueryOK, 0 rows affected (0.00 sec)

 

mysql>select user,host from user;

+-----------+-----------+

|user      | host     |

+-----------+-----------+

|root      | %         |

|Bond      | localhost |

|mysql.sys | localhost |

+-----------+-----------+

3rows in set (0.00 sec)

 

 

 

 

mysql>CREATE USER 'Bond'@'localhost' IDENTIFIED BY 'test123';

ERROR1819 (HY000): Your password does not satisfy the current policy requirements

mysql>CREATE USER 'Bond'@'localhost' IDENTIFIED BY 'Gopro5hero!';

QueryOK, 0 rows affected (0.00 sec)

 

mysql>select host,user,authentication_string,password_expired,account_locked fromuser;

+-----------+-----------+-------------------------------------------+------------------+----------------+

|host      | user      | authentication_string                     | password_expired |account_locked |

+-----------+-----------+-------------------------------------------+------------------+----------------+

|localhost | root      |*4F63A43ACD2876BD906F01B56E65F3A06DC9A5A8 | N                | N              |

|localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | N                | Y              |

|localhost | Bond      |*4F63A43ACD2876BD906F01B56E65F3A06DC9A5A8 | N                | N              |

+-----------+-----------+-------------------------------------------+------------------+----------------+

3rows in set (0.00 sec)3 rows in set (0.00 sec)3 rows in set (0.00 sec)

 

 

mysql>delete from user where user = 'Bond';

QueryOK, 1 row affected (0.00 sec)

 

 

mysql>CREATE USER 'Bond'@'localhost' IDENTIFIED BY 'Gopro5hero!';

ERROR1396 (HY000): Operation CREATE USER failed for 'Bond'@'localhost'

mysql>flush privileges;

QueryOK, 0 rows affected (0.00 sec)

 

mysql>CREATE USER 'Bond'@'localhost' IDENTIFIED BY 'Gopro5hero!';

QueryOK, 0 rows affected (0.00 sec)

 

mysql>alter user Bond@localhost identified by 'Gopro5hero!!';

QueryOK, 0 rows affected (0.01 sec)

 

mysql>flush privileges;

QueryOK, 0 rows affected (0.01 sec)

 

 

mkdir–p /usr/local/mysql/data/

chown-R mysql:mysql mysql/

/usr/local/mysql/bin/mysqld-u mysql --datadir=/usr/local/mysql/data

cpsupport-files/mysql.server /etc/init.d/mysql

 

 

二.Sqoop基本使用

 

 

以行为读取单位,并行读取导入。每一行的列之间,有分隔符。

 

 

 

 

Sqoop就是个ETL工具

 

Sqoop help import

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



三.Sqoop导入实战(mysql)

 

Mysql导入到hadoop 的hdfs

 

 

详细操作命令手册:http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html

 

sqoopimport --connect jdbc:mysql://hadoop1:3306/pjh -username root -password root--table t1

sqoopimport --connect jdbc:mysql://hadoop1:3306/pjh -username root -P --table t1

 

[root@hadoop1~]# hadoop fs -ls /user/root/t1

[root@hadoop1~]# hadoop fs -rm -R /user/root/t1

 

 

 

 

 

 

 

HIVE数据库回头再看,目前只看hdfs

 

 

sqoopeval --connect jdbc:mysql://hadoop1:3306/pjh \

-username root -P \

--query "select *from t1 where id between 2 and 4"

 

 

#使用warehouse-dir将mysql表t1导入到hdfs指定的父目录中

[root@hadoop1 ~]#hadoop fs -mkdir -p /user/shared

sqoopimport \

--connectjdbc:mysql://hadoop1:3306/pjh -username root -P \

--tablet1 \

--warehouse-dir/user/shared \

--m1 \

--split-by id

#No primary key could be found for table t1. Please specify onewith --split-by or perform a sequential import with '--m 1'

#--m 1 时,表示取消并行,则仅会生成一个文件

#如果使用--split-by id,则select列表中至少要包含id

#如果使用--split-by id,而不指定--m,则系统自动决定生成文件的数量。

 

 

#使用table, columns, where,target-dir 将指定的记录导入到指定目录.

sqoop import \

--connectjdbc:mysql://hadoop1:3306/pjh -username root -P \

--table t1 \

--columns "id,name"\

--where "idbetween '2' and '4'" \

--target-dir /user/shared/t1_q1\

--m 2 \

--split-by id

 

 

#如果使用--m 5 (--num-mappers大于1)做parallel query,则必须同时指定--split-by

#如果结果集行数小于--m 5,则仅会生成一行一文件。

#--append默认追加全部记录,新增文件至hdfs,且不会更改原有文件

sqoopimport \

--connect jdbc:mysql://hadoop1:3306/pjh -username root -P \

--query "select id,name from t1 where id<9 and\$CONDITIONS" \

--target-dir /user/shared/t1_q2 \

--append \

--m 5 \

--split-by id

 

 

 

 

 

使用sqoop是可利用参数文件&#xff0c;则不必手动输入各项参数

 

 

参数文件中可以指定密码文件路径&#xff0c;而密码文件最好放在hdfs上

 

[root&#64;hadoop1~]# echo -n "root" > /root/.password_mysql

[root&#64;hadoop1~]# hadoop fs -mkdir -p /user/hadoop

[root&#64;hadoop1~]# hadoop fs -put /root/.password_mysql /user/hadoop/

[root&#64;hadoop1~]# hadoop fs -chmod 400 /user/hadoop/.password_mysql

 

[root&#64;hadoop1~]# vi sqoop_import.cfg

import

--connect

jdbc:mysql://hadoop1:3306/pjh

--username

root

--password-file

/user/hadoop/.password_mysql

 

 

[root&#64;hadoop1~]# vi sqoop_list_databases.cfg

 

list-databases

--connect

jdbc:mysql://hadoop1:3306/pjh

--username

root

--password-file

/user/hadoop/.password_mysql

 

 

 

[root&#64;hadoop1~]# vi sqoop_list_tables.cfg

list-tables

--connect

jdbc:mysql://hadoop1:3306/pjh

--username

root

--password-file

/user/hadoop/.password_mysql

 

 

 

[root&#64;hadoop1~]#

sqoop --options-file~/sqoop_import.cfg \

--tablet1 \

--target-dir/user/shared/t1_q3 \

--append\

--m1

 

 

 

[root&#64;hadoop1 ~]# sqoop --options-file ~/sqoop_list_databases.cfg

[root&#64;hadoop1 ~]#sqoop --options-file /root/sqoop_list_tables.cfg

 

[root&#64;hadoop1 ~]# hadoopfs -cat /user/shared/t1_q3/*

 

 

 

导入时的分隔符设置

分隔符默认为逗号&#xff0c;但是可以手动指定为其它字符&#xff0c;例如 |

 [root&#64;hadoop1 ~]#

sqoop--options-file /root/sqoop_import.cfg \

--query "selectid,name from t1 where id<6 and \$CONDITIONS" \

--target-dir/user/shared/t1_q4 \

--append \

--m 1 \

--split-by id \

--fields-terminated-by "|"

 

[root&#64;hadoop1~]# hadoopfs -ls /user/shared/t1_q4/

[root&#64;hadoop1~]# hadoop fs -cat /user/shared/t1_q4/*

 

 

 

 

可使用--options-file标定所有参数

[root&#64;hadoop1~]# vi sqoop_i_q5.cfg

import

--connect

jdbc:mysql://hadoop1:3306/pjh

 

--username

root

 

--password-file

/user/hadoop/.password_mysql

 

--query

selectid,name from t1 where id<7 and $CONDITIONS 

##使用--opions-file时&#xff0c;此处无需双引号&#xff0c;$CONDITIONS前也无需正斜杠\

 

--target-dir

/user/shared/t1_q5

 

--split-by

id

 

[root&#64;hadoop1~]# hadoop fs -rm -R /user/shared/t1_q5

[root&#64;hadoop1~]# sqoop --options-file /root/sqoop_i_q5.cfg

 

 

 

 

四.Sqoop增量导入&#xff08;mysql&#xff09;

 

The merge tool istypically run after an incremental import with the date-last-modified mode

(sqoop import --incremental lastmodified …)

Note&#xff1a;针对常规的增量update 实际上需要借助merge完成。

 

#初始化导入

[root&#64;hadoop1~]# vi sqoop_i_q6_init.cfg

import

--connect

jdbc:mysql://hadoop1:3306/pjh

 

--username

root

 

--password-file

/user/hadoop/.password_mysql

 

--query

selectid,name,ts from t1 where id<8 and $CONDITIONS 

##使用--opions-file时&#xff0c;此处无需双引号&#xff0c;$CONDITIONS前也无需正斜杠\

 

--target-dir

/user/shared/t1_q6

 

--split-by

id

 

[root&#64;hadoop1~]# hadoop fs -rm -R /user/shared/t1_q6

[root&#64;hadoop1~]# sqoop --options-file /root/sqoop_i_q6_init.cfg

[root&#64;hadoop1~]# hadoop fs -cat /user/shared/t1_q6/*

 

 

 

 

增量导入的3个核心参数&#xff1a;

Argument

Description

--check-column (cols)

Specifies the column to be examined when determining which rows to import. (the column should not be of type CHAR/NCHAR/VARCHAR/VARNCHAR/ LONGVARCHAR/LONGNVARCHAR)   

--incremental (mode)

Specifies how Sqoop determines which rows are new. Legal values for mode include appendand lastmodified.    

--last-value (value)

Specifies the maximum value of the check column from the previous import.   做增量的非必需参数

 

 

 

#测试--incrementalappend 做insert

[root&#64;hadoop1~]# vi sqoop_i_q6_inc_append.cfg

import

--connect

jdbc:mysql://hadoop1:3306/pjh

 

--username

root

 

--password-file

/user/hadoop/.password_mysql

 

--query

selectid,name,ts from t1 where id<99 and$CONDITIONS 

##使用--opions-file时&#xff0c;此处无需双引号&#xff0c;$CONDITIONS前也无需正斜杠\

 

--target-dir

/user/shared/t1_q6

 

--split-by

id

 

--check-column

ts

 

--incremental

append

#做insert需要使用append

 

 

--last-value

2017-04-0708:38:34.0

##此处指定的值&#xff0c;要与check column具有可比性&#xff0c;将抽取大于该记录的行&#xff0c;等于该值的行不会被抽取&#xff0c;它是决定源记录是否被导入的重要依据。如果不指定--last-value,则会默认追加导入全部的行&#xff0c;等效 --append

 

 

#在导入前&#xff0c;在源表插入一条带有新ts的行&#xff0c;注意query必须要能取到新加的行&#xff0c;导入完成后将仅增加一行。并且会自动打印出下一次导入所需的--last-value值&#xff0c;建议使用sqoop job来自动记录该值达到简化操作的目的&#xff08;章节6&#xff09;。

[root&#64;hadoop1 ~]# sqoop --options-file /root/sqoop_q6_inc1_append.cfg

[root&#64;hadoop1 ~]# hadoop fs -cat /user/shared/t1_q6/*

 

 

 

 

#测试--incrementallastmodified 做update

[root&#64;hadoop1 ~]# visqoop_i_q6_inc_lastmodified.cfg

 

import

--connect

jdbc:mysql://hadoop1:3306/pjh

 

--username

root

 

--password-file

/user/hadoop/.password_mysql

 

--query

select id,name,ts fromt1 where id<99 and $CONDITIONS

##此处无需双引号&#xff0c;$CONDITIONS前无需正斜杠\

 

--target-dir

/user/shared/t1_q6

 

--split-by

id

 

 

--check-column

ts

#在使用lastmodified时&#xff0c;--check-column必须是时间戳类型&#xff0c;且必须指定&#xff0c;但是我认为它并未起到任何作用。

 

 

--incremental

lastmodified

 

#--merge-key or--append is required when using --incremental lastmodified and the outputdirectory exists.

#做update需要使用lastmodified

 

--merge-key

id

#指定合并更新使用的key字段&#xff0c;通常是唯一字段。

 

--last-value

2015-04-0708:38:34.0

#非必需

 

 

 

#在导入前&#xff0c;在源表更新一行name&#xff0c;注意query必须要能取到该行&#xff0c;导入完成后将更新一行name.可以看到分成了两次job完成

[root&#64;hadoop1~]# sqoop --options-file /root/sqoop_q6_inc_lastmodified.cfg

[root&#64;hadoop1 ~]# hadoop fs -cat/user/shared/t1_q6/*

 

  测试结果为何未体现&#xff1f;&#xff1f;&#xff1f;

 

 

在导入前&#xff0c;在源表更新一行name&#xff0c;注意query必须要能取到该行&#xff0c;导入完成后将更新一行name.可以看到分成了两次job完成

[root&#64;hadoop1 ~]# sqoop--options-file /root/sqoop_i_q6_inc_append.cfg

[root&#64;hadoop1~]# hadoop fs -cat /user/shared/t1_q6/*

 

 

 

在hdfs制造一条重复记录 id&#61;2

sqoop import \

--connectjdbc:mysql://hadoop1:3306/pjh -username root -P \

--query "select id,name, &#39;1999-04-0708:38:34.0&#39; from t1 where id&#61;2 and\$CONDITIONS" \

--target-dir/user/shared/t1_q6 \

--append \

--split-by id

 

 

在hdfs制造一条重复记录 id&#61;1

sqoop import \

--connectjdbc:mysql://hadoop1:3306/pjh -username root -P \

--query "select id, &#39;gopro&#39;,&#39;1999-04-0708:38:34.0&#39; from t1 where id&#61;1 and\$CONDITIONS" \

--target-dir/user/shared/t1_q6 \

--append \

--split-by id

 

 

 

发现&#xff1a;

i)若源表出现了两行相同的id,而hdfs无重复&#xff0c;会仅取rdbms中较早的一条记录更新至hdfs&#xff0c;且与rdbms源表ts字段无关

ii)若hdfs先后插入重复id的行&#xff0c;而rdbms无重复&#xff0c;在导入之后&#xff0c;hdfs仅会保存较早的一条&#xff0c;与hdfs的ts字段无关。

iii)若hdfs先后插入重复id的行&#xff0c;且rdbms也有该id的重复行&#xff0c;在导入之后&#xff0c;rdbms与hdfs均仅会保留最早的一条&#xff0c;剩下的一行保持数据一致。

 

 

 

 

启动日志记录进程

[root&#64;hadoop1 ~]# /hadoop-2.7.2/sbin/mr-jobhistory-daemon.shstart historyserver

 

使用lastmodified就可以同时做insertupdate&#xff01;但是在sqoop job中要注意&#xff0c;如果仅仅在rdbms增加&更新记录&#xff0c;而不去更新ts&#xff0c;则除了新增行可以被抽取之外&#xff0c;更新的行并不能被捕捉。因此作为RDBMS规范&#xff0c;所有行的变更与新增都需要同时更新时间戳以便于ETL处理。

 

 

 

 

五.Sqoop导入实战&#xff08;mysql&#xff09;

 

[root&#64;hadoop1 ~]# sqoop help export

[root&#64;hadoop1 ~]# vi sqoop_export.cfg

export

--connect

jdbc:mysql://hadoop1:3306/pjh

--username

root

--password-file

/user/hadoop/.password_mysql

 

 

#查看hdfs源数据&#xff1a;

[root&#64;hadoop1 ~]# hadoop fs -cat /user/shared/t1_q6/*

 

#由hdfs向rdbms出表&#xff0c;前提是&#xff1a;目标表t2必须先创建&#xff0c;并且字段结构要与导出源一致。如果多次导出&#xff0c;是以追加方式写入。

[root&#64;hadoop1~]#

sqoop --options-file~/sqoop_export.cfg\

--export-dir/user/shared/t1_q6 \

--table t2 \

--input-null-string &#39;\\N&#39;   

 

 

 

–col1,col2,col3

注意&#xff1a;没有被包含在–columns字段必须有默认值&#xff0c;或者允许插入空值&#xff0c;否则rdbms会拒绝sqoop导出的数据&#xff0c;导致作业失败

–export-dir&#xff0c;导出目录&#xff0c;在执行导出的时候&#xff0c;必须指定这个参数&#xff0c;同时需要具备–table或–call参数两者之一&#xff0c;–table是指的导出数据库当中对应的表&#xff0c;–call是指的某个存储过程

–input-null-string、–input-null-non-string&#xff0c;这两参数是可选&#xff0c;如果没有指定第一个参数&#xff0c;对于字符串类型的列来说&#xff0c;“NULL”这个字符串就回被翻译成空值&#xff0c;如果没有使用第二个参数&#xff0c;无论是“NULL”字符串还是说空字符串也好&#xff0c;对于非字符串类型的字段来说&#xff0c;这两个类型的空串都会被翻译成空值

 

 

--update-key&#xff0c;更新标识&#xff0c;即根据某个字段进行更新&#xff0c;例如id&#xff0c;可以指定多个更新标识的&#xff0c;用逗号分隔

--update-mode&#xff0c;有两种模式&#xff0c;一种是updateonly&#xff08;默认模式&#xff09;&#xff0c;仅仅更新已存在的数据记录&#xff0c;不会插入新纪录&#xff0c;另一种模式是allowinsert&#xff0c;允许插入新纪录

 

Sqoop的Export工具&#xff0c;对应两种语句&#xff0c;一种是Insert语句&#xff0c;如果表当中存在PK约束&#xff0c;且表中已包含数据&#xff0c;此时&#xff0c;导出报错。此时需要用到—update-key和updatemod

 

    如果指定了update-key&#xff0c;那么Sqoop就会修改在数据表中已存在的数据&#xff0c;此时的每一个更行数据记录都会变成一个Update语句&#xff0c;用这个语句去更新目标表中已存在的数据&#xff0c;这是根据–update-key所指定的这个列进行更新的。Update set teacher&#61;”MarsJ” where class_id &#61; 1。

    1&#xff09;若update-key所指定的字段不是PK字段&#xff0c;若同时updatemod使用updateonly模式时&#xff0c;就仅进行更新&#xff0c;若updatemod使用allowinsert模式&#xff0c;那么实质上就是一个insert操作.

    2&#xff09;若update-key所指定的字段是PK字段&#xff0c;同时updatemod是allowinsert时&#xff0c;实质上是一个insert & update的操作&#xff0c;若updatemod是updateonly时&#xff0c;实质仅为update操作.

 

 

 

[root&#64;hadoop1 ~]#

sqoop --options-file ~/sqoop_export.cfg \

--export-dir /user/shared/t1_q6 \

--table t2 \

--update-key id \

--update-mode updateonly

#若rdbms存在重复的id&#xff08;没有pk&#xff0c;通常是不规范的情况&#xff09;&#xff0c;hdfs也存在相同的重复id&#xff0c;更新后rdbms会保留所有的行&#xff0c;并参照hdfs保留最近的一行进行update。

#若rdbms有pk&#xff0c;hdfs存在相同的重复id&#xff0c;更新后并参照hdfs最早的一行进行update。

 

 

 

[root&#64;hadoop1~]#

sqoop--options-file ~/sqoop_export.cfg \

--export-dir/user/shared/t1_q6 \

--tablet2 \

--update-keyid \

--update-modeallowinsert

#如果使用allowinsert&#xff0c;则在rdbms表必须创建pk&#xff0c;否则不会检查id存在性而直接insert。Hdfs存在重复id时&#xff0c;仅会取hdfs中最早的一条记录&#xff0c;更新进rdbms

 

 

 

 

 

六.Sqoop job

 

 

 

 

Sqoop job可以保存所有的配置信息&#xff0c;包括连接字符串与参数。

 

 

 

 

 

 

#为t1_q6的lastmdified增量更新创建sqoop job

#首先需要得到最大的last_value,可以从上一次sqoop输出得到&#xff08;可以重复跑一次最近一次的sqoop命令,得到当前系统时间戳&#xff09;

 

[root&#64;hadoop1 ~]# sqoop--options-file /root/sqoop_i_q6_inc_lastmodified.cfg

17/04/11 13:24:37 INFO tool.ImportTool:  --incremental lastmodified

17/04/11 13:24:37 INFO tool.ImportTool:   --check-column ts

17/04/11 13:24:37 INFO tool.ImportTool:   --last-value2017-04-11 13:23:55.0

17/04/11 13:24:37 INFO tool.ImportTool: (Consider saving thiswith &#39;sqoop job --create&#39;)

 

 

[root&#64;hadoop1~]# hadoop fs -cat /user/shared/t1_q6/*

 

[root&#64;hadoop1 ~]# sqoopjob --create job1 -- --options-file /root/sqoop_i_q6_inc_lastmodified.cfg

[root&#64;hadoop1 ~]# sqoop job –list

[root&#64;hadoop1 ~]# sqoop job --show job1

[root&#64;hadoop1 ~]# sqoop job --exec job1

17/04/11 13:36:08 INFO tool.ImportTool: Saving incrementalimport state to the metastore

17/04/11 13:36:08 INFO tool.ImportTool: Updateddata for job: job1

 

#执行完job1后&#xff0c;再去查看它的定义&#xff0c;会发现last_value已经被自动更新

[root&#64;hadoop1 ~]# sqoop job --show job1

Job: job1

Tool: import

Options:

----------------------------

verbose &#61; false

incremental.last.value &#61; 2017-04-11 13:35:22.0

db.connect.string &#61; jdbc:mysql://hadoop1:3306/pjh

 

 

 

 

#在rdbms新增行&#xff08;具有新的ts字段值&#xff09;&#xff0c;然后直接调用job1&#xff0c;再观察结果

[root&#64;hadoop1 ~]# sqoop job --exec job1

[root&#64;hadoop1 ~]# hadoop fs -cat /user/shared/t1_q6/*

 

 

#也可通过查看.sqoop下的metastore来查看job1的当前定义

[root&#64;hadoop1 ~]# cd .sqoop

[root&#64;hadoop1 .sqoop]# ls -lrt

total 12

-rw-r--r-- 1 root root 5653 Apr 11 13:49 metastore.db.script

-rw-r--r-- 1 root root 419 Apr 11 13:49 metastore.db.properties

 

[root&#64;hadoop1 .sqoop]# more metastore.db.properties

#HSQL Database Engine 1.8.0.10

#Tue Apr 11 13:49:21 CST 2017

hsqldb.script_format&#61;0

runtime.gc_interval&#61;0

sql.enforce_strict_size&#61;false

hsqldb.cache_size_scale&#61;8

readonly&#61;false

hsqldb.nio_data_file&#61;true

hsqldb.cache_scale&#61;14

version&#61;1.8.0

hsqldb.default_table_type&#61;memory

hsqldb.cache_file_scale&#61;1

hsqldb.log_size&#61;200

modified&#61;no

hsqldb.cache_version&#61;1.7.0

hsqldb.original_version&#61;1.8.0

hsqldb.compatible_version&#61;1.8.0

 

[root&#64;hadoop1 .sqoop]# more metastore.db.script

CREATE SCHEMA PUBLIC AUTHORIZATION DBA

CREATE MEMORY TABLE SQOOP_ROOT(VERSION INTEGER,PROPNAMEVARCHAR(128) NOT NULL,PROPVAL VARCHAR(256),CONSTRAINT SQOOP_ROOT_UNQ UNIQUE(VERSION,PROPNAME))

CREATE MEMORY TABLE SQOOP_SESSIONS(JOB_NAME VARCHAR(64) NOTNULL,PROPNAME VARCHAR(128) NOT NULL,PROPVAL VARCHAR(1024),PROPCLASS VARCHAR(32)NOT NULL,C

ONSTRAINT SQOOP_SESSIONS_UNQUNIQUE(JOB_NAME,PROPNAME,PROPCLASS))

CREATE USER SA PASSWORD ""

GRANT DBA TO SA

SET WRITE_DELAY 10

SET SCHEMA PUBLIC

INSERT INTO SQOOP_ROOTVALUES(NULL,&#39;sqoop.hsqldb.job.storage.version&#39;,&#39;0&#39;)

INSERT INTO SQOOP_ROOTVALUES(0,&#39;sqoop.hsqldb.job.info.table&#39;,&#39;SQOOP_SESSIONS&#39;)

INSERT INTO SQOOP_SESSIONS VALUES(&#39;job1&#39;,&#39;sqoop.tool&#39;,&#39;import&#39;,&#39;schema&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;sqoop.property.set.id&#39;,&#39;0&#39;,&#39;schema&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;verbose&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;incremental.last.value&#39;,&#39;2017-04-11 13:47:56.0&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;db.connect.string&#39;,&#39;jdbc:mysql://hadoop1:3306/pjh&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;codegen.output.delimiters.escape&#39;,&#39;0&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;codegen.output.delimiters.enclose.required&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;codegen.input.delimiters.field&#39;,&#39;0&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONS VALUES(&#39;job1&#39;,&#39;hbase.create.table&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;hdfs.append.dir&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;codegen.input.delimiters.escape&#39;,&#39;0&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;accumulo.create.table&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;import.fetch.size&#39;,&#39;null&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;codegen.input.delimiters.enclose.required&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;db.username&#39;,&#39;root&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;reset.onemapper&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;codegen.output.delimiters.record&#39;,&#39;10&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;import.max.inline.lob.size&#39;,&#39;16777216&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;hbase.bulk.load.enabled&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONS VALUES(&#39;job1&#39;,&#39;hcatalog.create.table&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;db.clear.staging.table&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;incremental.col&#39;,&#39;ts&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONS VALUES(&#39;job1&#39;,&#39;codegen.input.delimiters.record&#39;,&#39;0&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONS VALUES(&#39;job1&#39;,&#39;db.password_mysql.file&#39;,&#39;/user/hadoop/.password_mysql&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;enable.compression&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;hive.overwrite.table&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;hive.import&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;codegen.input.delimiters.enclose&#39;,&#39;0&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;accumulo.batch.size&#39;,&#39;10240000&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;hive.drop.delims&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;codegen.output.delimiters.enclose&#39;,&#39;0&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;hdfs.delete-target.dir&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;codegen.output.dir&#39;,&#39;.&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;codegen.auto.compile.dir&#39;,&#39;true&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONS VALUES(&#39;job1&#39;,&#39;db.query&#39;,&#39;selectid,name,ts from t1 where id<99 and $CONDITIONS&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;relaxed.isolation&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONS VALUES(&#39;job1&#39;,&#39;mapreduce.num.mappers&#39;,&#39;4&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;accumulo.max.latency&#39;,&#39;5000&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;import.direct.split.size&#39;,&#39;0&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;codegen.output.delimiters.field&#39;,&#39;44&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;export.new.update&#39;,&#39;UpdateOnly&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;incremental.mode&#39;,&#39;DateLastModified&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;hdfs.file.format&#39;,&#39;TextFile&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;codegen.compile.dir&#39;,&#39;/tmp/sqoop-root/compile/eb4331b0d50336a1ed2a6c3c679460f3&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONS VALUES(&#39;job1&#39;,&#39;direct.import&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;db.split.column&#39;,&#39;id&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;hdfs.target.dir&#39;,&#39;/user/shared/t1_q6&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONS VALUES(&#39;job1&#39;,&#39;hive.fail.table.exists&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;merge.key.col&#39;,&#39;id&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;db.batch&#39;,&#39;false&#39;,&#39;SqoopOptions&#39;)

INSERT INTO SQOOP_SESSIONS VALUES(&#39;job1&#39;,&#39;rpc.engine.org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolPB&#39;,&#39;org.apache.hadoop.ipc.ProtobufRpcEng

ine&#39;,&#39;config&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;sqoop.job.storage.implementations&#39;,&#39;com.cloudera.sqoop.metastore.hsqldb.HsqldbJobStorage,com.cloudera.sqoop.

metastore.hsqldb.AutoHsqldbStorage&#39;,&#39;config&#39;)

INSERT INTO SQOOP_SESSIONSVALUES(&#39;job1&#39;,&#39;mapreduce.client.genericoptionsparser.used&#39;,&#39;true&#39;,&#39;config&#39;)

[root&#64;hadoop1 .sqoop]#

 

 

 

 

 

 

 

 

 

 


推荐阅读
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • Docker 中创建 CentOS 容器并安装 MySQL 进行本地连接
    本文详细介绍了如何在 Docker 中创建 CentOS 容器,并在容器中安装 MySQL 以实现本地连接。文章内容包括镜像拉取、容器创建、MySQL 安装与配置等步骤。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 本文介绍了在 Spring Boot 中使用 JPA 进行数据删除操作时遇到的 SQL 错误及其解决方法。错误表现为:删除操作失败,原因是无法打开 JPA EntityManager 以进行事务处理。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
author-avatar
小新没蜡笔775
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有