mirror of
https://github.com/apache/sqoop.git
synced 2025-05-03 19:51:41 +08:00
SQOOP-386. Namespace migration cleanup.
(Bilung Lee via Arvind Prabhakar) git-svn-id: https://svn.apache.org/repos/asf/incubator/sqoop/trunk@1196486 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
fd844db769
commit
1598c5a481
11
NOTICE.txt
11
NOTICE.txt
@ -1,3 +1,10 @@
|
|||||||
This product includes software developed by Cloudera, Inc.
|
Apache SQOOP
|
||||||
(http://www.cloudera.com/).
|
Copyright 2011 The Apache Software Foundation
|
||||||
|
|
||||||
|
This product includes software developed at
|
||||||
|
The Apache Software Foundation (http://www.apache.org/).
|
||||||
|
|
||||||
|
Portions of this software were developed at
|
||||||
|
Cloudera, Inc. (http://www.cloudera.com/).
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
@ -24,6 +22,24 @@ Sqoop Developer's Guide v{revnumber}
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
----
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
----
|
||||||
|
|
||||||
include::intro.txt[]
|
include::intro.txt[]
|
||||||
|
|
||||||
include::preface.txt[]
|
include::preface.txt[]
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
|
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
|
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
== <!--
|
== <!--
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
== <!--
|
== <!--
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
== <!--
|
== <!--
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
== <!--
|
== <!--
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
== <!--
|
== <!--
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
@ -24,6 +22,24 @@ Sqoop User Guide (v{revnumber})
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
----
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
----
|
||||||
|
|
||||||
include::intro.txt[]
|
include::intro.txt[]
|
||||||
|
|
||||||
include::preface.txt[]
|
include::preface.txt[]
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -4,8 +4,6 @@
|
|||||||
exclude-result-prefixes="exsl">
|
exclude-result-prefixes="exsl">
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright 2011 The Apache Software Foundation
|
|
||||||
*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
* or more contributor license agreements. See the NOTICE file
|
* or more contributor license agreements. See the NOTICE file
|
||||||
* distributed with this work for additional information
|
* distributed with this work for additional information
|
||||||
|
@ -4,8 +4,6 @@
|
|||||||
exclude-result-prefixes="exsl">
|
exclude-result-prefixes="exsl">
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -4,8 +4,6 @@
|
|||||||
exclude-result-prefixes="exsl">
|
exclude-result-prefixes="exsl">
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
////
|
////
|
||||||
Copyright 2011 The Apache Software Foundation
|
|
||||||
|
|
||||||
Licensed to the Apache Software Foundation (ASF) under one
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
or more contributor license agreements. See the NOTICE file
|
or more contributor license agreements. See the NOTICE file
|
||||||
distributed with this work for additional information
|
distributed with this work for additional information
|
||||||
@ -24,6 +22,24 @@ Sqoop Documentation (v{revnumber})
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
----
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
----
|
||||||
|
|
||||||
The following pages are the documentation for Sqoop v{revnumber}:
|
The following pages are the documentation for Sqoop v{revnumber}:
|
||||||
|
|
||||||
- link:SqoopUserGuide.html[Sqoop User Guide]
|
- link:SqoopUserGuide.html[Sqoop User Guide]
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright 2011 The Apache Software Foundation
|
|
||||||
*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
* or more contributor license agreements. See the NOTICE file
|
* or more contributor license agreements. See the NOTICE file
|
||||||
* distributed with this work for additional information
|
* distributed with this work for additional information
|
||||||
@ -20,215 +18,23 @@
|
|||||||
|
|
||||||
package com.cloudera.sqoop;
|
package com.cloudera.sqoop;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.io.Reader;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Properties;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
import org.apache.hadoop.util.ReflectionUtils;
|
|
||||||
import org.apache.hadoop.util.StringUtils;
|
|
||||||
|
|
||||||
import com.cloudera.sqoop.manager.ConnManager;
|
|
||||||
import com.cloudera.sqoop.manager.DefaultManagerFactory;
|
|
||||||
import com.cloudera.sqoop.manager.ManagerFactory;
|
|
||||||
import com.cloudera.sqoop.metastore.JobData;
|
|
||||||
|
|
||||||
import com.cloudera.sqoop.util.ClassLoaderStack;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Factory class to create the ConnManager type required
|
* @deprecated Moving to use org.apache.sqoop namespace.
|
||||||
* for the current import job.
|
|
||||||
*
|
|
||||||
* This class delegates the actual responsibility for instantiating
|
|
||||||
* ConnManagers to one or more instances of ManagerFactory. ManagerFactories
|
|
||||||
* are consulted in the order specified in sqoop-site.xml
|
|
||||||
* (sqoop.connection.factories).
|
|
||||||
*/
|
*/
|
||||||
public class ConnFactory {
|
public class ConnFactory
|
||||||
|
extends org.apache.sqoop.ConnFactory {
|
||||||
|
|
||||||
public static final Log LOG = LogFactory.getLog(ConnFactory.class.getName());
|
public static final String FACTORY_CLASS_NAMES_KEY =
|
||||||
|
org.apache.sqoop.ConnFactory.FACTORY_CLASS_NAMES_KEY;
|
||||||
|
|
||||||
|
public static final String DEFAULT_FACTORY_CLASS_NAMES =
|
||||||
|
org.apache.sqoop.ConnFactory.DEFAULT_FACTORY_CLASS_NAMES;
|
||||||
|
|
||||||
public ConnFactory(Configuration conf) {
|
public ConnFactory(Configuration conf) {
|
||||||
factories = new LinkedList<ManagerFactory>();
|
super(conf);
|
||||||
instantiateFactories(conf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The sqoop-site.xml configuration property used to set the list of
|
|
||||||
* available ManagerFactories.
|
|
||||||
*/
|
|
||||||
public static final String FACTORY_CLASS_NAMES_KEY =
|
|
||||||
"sqoop.connection.factories";
|
|
||||||
|
|
||||||
// The default value for sqoop.connection.factories is the
|
|
||||||
// name of the DefaultManagerFactory.
|
|
||||||
static final String DEFAULT_FACTORY_CLASS_NAMES =
|
|
||||||
DefaultManagerFactory.class.getName();
|
|
||||||
|
|
||||||
/** The list of ManagerFactory instances consulted by getManager().
|
|
||||||
*/
|
|
||||||
private List<ManagerFactory> factories;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create the ManagerFactory instances that should populate
|
|
||||||
* the factories list.
|
|
||||||
*/
|
|
||||||
private void instantiateFactories(Configuration conf) {
|
|
||||||
loadManagersFromConfDir(conf);
|
|
||||||
String [] classNameArray =
|
|
||||||
conf.getStrings(FACTORY_CLASS_NAMES_KEY, DEFAULT_FACTORY_CLASS_NAMES);
|
|
||||||
|
|
||||||
for (String className : classNameArray) {
|
|
||||||
try {
|
|
||||||
className = className.trim(); // Ignore leading/trailing whitespace.
|
|
||||||
ManagerFactory factory = ReflectionUtils.newInstance(
|
|
||||||
(Class<? extends ManagerFactory>)
|
|
||||||
conf.getClassByName(className), conf);
|
|
||||||
LOG.debug("Loaded manager factory: " + className);
|
|
||||||
factories.add(factory);
|
|
||||||
} catch (ClassNotFoundException cnfe) {
|
|
||||||
LOG.error("Could not load ManagerFactory " + className
|
|
||||||
+ " (not found)");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Factory method to get a ConnManager for the given JDBC connect string.
|
|
||||||
* @param data the connection and other configuration arguments.
|
|
||||||
* @return a ConnManager instance for the appropriate database.
|
|
||||||
* @throws IOException if it cannot find a ConnManager for this schema.
|
|
||||||
*/
|
|
||||||
public ConnManager getManager(JobData data) throws IOException {
|
|
||||||
// Try all the available manager factories.
|
|
||||||
for (ManagerFactory factory : factories) {
|
|
||||||
LOG.debug("Trying ManagerFactory: " + factory.getClass().getName());
|
|
||||||
ConnManager mgr = factory.accept(data);
|
|
||||||
if (null != mgr) {
|
|
||||||
LOG.debug("Instantiated ConnManager " + mgr.toString());
|
|
||||||
return mgr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new IOException("No manager for connect string: "
|
|
||||||
+ data.getSqoopOptions().getConnectString());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a ManagerFactory class to the list that we instantiate.
|
|
||||||
* @param conf the Configuration to set.
|
|
||||||
* @param factory the ManagerFactory class name to add.
|
|
||||||
*/
|
|
||||||
private void addManager(Configuration conf, String factory) {
|
|
||||||
String curVal = conf.get(FACTORY_CLASS_NAMES_KEY);
|
|
||||||
if (null == curVal) {
|
|
||||||
conf.set(FACTORY_CLASS_NAMES_KEY, factory);
|
|
||||||
} else {
|
|
||||||
conf.set(FACTORY_CLASS_NAMES_KEY, curVal + "," + factory);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read the specified file and extract any ManagerFactory implementation
|
|
||||||
* names from there.
|
|
||||||
* @param conf the configuration to populate.
|
|
||||||
* @param f the file containing the configuration data to add.
|
|
||||||
*/
|
|
||||||
private void addManagersFromFile(Configuration conf, File f) {
|
|
||||||
Reader r = null;
|
|
||||||
try {
|
|
||||||
// The file format is actually Java properties-file syntax.
|
|
||||||
r = new InputStreamReader(new FileInputStream(f));
|
|
||||||
Properties props = new Properties();
|
|
||||||
props.load(r);
|
|
||||||
|
|
||||||
for (Map.Entry<Object, Object> entry : props.entrySet()) {
|
|
||||||
// Each key is a ManagerFactory class name.
|
|
||||||
// Each value, if set, is the jar that contains it.
|
|
||||||
String factory = entry.getKey().toString();
|
|
||||||
addManager(conf, factory);
|
|
||||||
|
|
||||||
String jarName = entry.getValue().toString();
|
|
||||||
if (jarName.length() > 0) {
|
|
||||||
ClassLoaderStack.addJarFile(jarName, factory);
|
|
||||||
LOG.debug("Added factory " + factory + " in jar " + jarName
|
|
||||||
+ " specified by " + f);
|
|
||||||
} else if (LOG.isDebugEnabled()) {
|
|
||||||
LOG.debug("Added factory " + factory + " specified by " + f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (IOException ioe) {
|
|
||||||
LOG.error("Error loading ManagerFactory information from file "
|
|
||||||
+ f + ": " + StringUtils.stringifyException(ioe));
|
|
||||||
} finally {
|
|
||||||
if (null != r) {
|
|
||||||
try {
|
|
||||||
r.close();
|
|
||||||
} catch (IOException ioe) {
|
|
||||||
LOG.warn("Error closing file " + f + ": " + ioe);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If $SQOOP_CONF_DIR/managers.d/ exists and sqoop.connection.factories is
|
|
||||||
* not set, then we look through the files in that directory; they should
|
|
||||||
* contain lines of the form mgr.class.name[=/path/to/containing.jar].
|
|
||||||
*
|
|
||||||
* <p>
|
|
||||||
* Put all mgr.class.names into the Configuration, and load any specified
|
|
||||||
* jars into the ClassLoader.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param conf the current configuration to populate with class names.
|
|
||||||
* @return conf again, after possibly populating sqoop.connection.factories.
|
|
||||||
*/
|
|
||||||
private Configuration loadManagersFromConfDir(Configuration conf) {
|
|
||||||
if (conf.get(FACTORY_CLASS_NAMES_KEY) != null) {
|
|
||||||
LOG.debug(FACTORY_CLASS_NAMES_KEY + " is set; ignoring managers.d");
|
|
||||||
return conf;
|
|
||||||
}
|
|
||||||
|
|
||||||
String confDirName = System.getenv("SQOOP_CONF_DIR");
|
|
||||||
if (null == confDirName) {
|
|
||||||
LOG.warn("$SQOOP_CONF_DIR has not been set in the environment. "
|
|
||||||
+ "Cannot check for additional configuration.");
|
|
||||||
return conf;
|
|
||||||
}
|
|
||||||
|
|
||||||
File confDir = new File(confDirName);
|
|
||||||
File mgrDir = new File(confDir, "managers.d");
|
|
||||||
|
|
||||||
if (mgrDir.exists() && mgrDir.isDirectory()) {
|
|
||||||
// We have a managers.d subdirectory. Get the file list, sort it,
|
|
||||||
// and process them in order.
|
|
||||||
String [] fileNames = mgrDir.list();
|
|
||||||
Arrays.sort(fileNames);
|
|
||||||
|
|
||||||
for (String fileName : fileNames) {
|
|
||||||
File f = new File(mgrDir, fileName);
|
|
||||||
if (f.isFile()) {
|
|
||||||
addManagersFromFile(conf, f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the default MF.
|
|
||||||
addManager(conf, DEFAULT_FACTORY_CLASS_NAMES);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the classloader in this configuration so that it will use
|
|
||||||
// the jars we just loaded in.
|
|
||||||
conf.setClassLoader(Thread.currentThread().getContextClassLoader());
|
|
||||||
return conf;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright 2011 The Apache Software Foundation
|
|
||||||
*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
* or more contributor license agreements. See the NOTICE file
|
* or more contributor license agreements. See the NOTICE file
|
||||||
* distributed with this work for additional information
|
* distributed with this work for additional information
|
||||||
@ -20,224 +18,56 @@
|
|||||||
|
|
||||||
package com.cloudera.sqoop;
|
package com.cloudera.sqoop;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
import org.apache.hadoop.conf.Configured;
|
|
||||||
import org.apache.hadoop.util.Tool;
|
|
||||||
import org.apache.hadoop.util.ToolRunner;
|
|
||||||
|
|
||||||
import com.cloudera.sqoop.cli.ToolOptions;
|
|
||||||
import com.cloudera.sqoop.tool.SqoopTool;
|
import com.cloudera.sqoop.tool.SqoopTool;
|
||||||
import com.cloudera.sqoop.util.OptionsFileUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Main entry-point for Sqoop
|
* @deprecated Moving to use org.apache.sqoop namespace.
|
||||||
* Usage: hadoop jar (this_jar_name) com.cloudera.sqoop.Sqoop (options)
|
|
||||||
* See the SqoopOptions class for options.
|
|
||||||
*/
|
*/
|
||||||
public class Sqoop extends Configured implements Tool {
|
public class Sqoop
|
||||||
|
extends org.apache.sqoop.Sqoop {
|
||||||
|
|
||||||
public static final Log SQOOP_LOG = LogFactory.getLog("com.cloudera.sqoop");
|
public static final Log SQOOP_LOG =
|
||||||
public static final Log LOG = LogFactory.getLog(Sqoop.class.getName());
|
org.apache.sqoop.Sqoop.SQOOP_LOG;
|
||||||
|
|
||||||
/**
|
public static final String SQOOP_RETHROW_PROPERTY =
|
||||||
* If this System property is set, always throw an exception, do not just
|
org.apache.sqoop.Sqoop.SQOOP_RETHROW_PROPERTY;
|
||||||
* exit with status 1.
|
|
||||||
*/
|
|
||||||
public static final String SQOOP_RETHROW_PROPERTY = "sqoop.throwOnError";
|
|
||||||
|
|
||||||
/**
|
public static final String SQOOP_OPTIONS_FILE_SPECIFIER =
|
||||||
* The option to specify an options file from which other options to the
|
org.apache.sqoop.Sqoop.SQOOP_OPTIONS_FILE_SPECIFIER;
|
||||||
* tool are read.
|
|
||||||
*/
|
|
||||||
public static final String SQOOP_OPTIONS_FILE_SPECIFIER = "--options-file";
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
Configuration.addDefaultResource("sqoop-site.xml");
|
Configuration.addDefaultResource("sqoop-site.xml");
|
||||||
}
|
}
|
||||||
|
|
||||||
private SqoopTool tool;
|
|
||||||
private SqoopOptions options;
|
|
||||||
private String [] childPrgmArgs;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new instance of Sqoop set to run the supplied SqoopTool
|
|
||||||
* with the default configuration.
|
|
||||||
* @param tool the SqoopTool to run in the main body of Sqoop.
|
|
||||||
*/
|
|
||||||
public Sqoop(SqoopTool tool) {
|
|
||||||
this(tool, (Configuration) null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new instance of Sqoop set to run the supplied SqoopTool
|
|
||||||
* with the provided configuration.
|
|
||||||
* @param tool the SqoopTool to run in the main body of Sqoop.
|
|
||||||
* @param conf the Configuration to use (e.g., from ToolRunner).
|
|
||||||
*/
|
|
||||||
public Sqoop(SqoopTool tool, Configuration conf) {
|
|
||||||
this(tool, conf, new SqoopOptions());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new instance of Sqoop set to run the supplied SqoopTool
|
|
||||||
* with the provided configuration and SqoopOptions.
|
|
||||||
* @param tool the SqoopTool to run in the main body of Sqoop.
|
|
||||||
* @param conf the Configuration to use (e.g., from ToolRunner).
|
|
||||||
* @param opts the SqoopOptions which control the tool's parameters.
|
|
||||||
*/
|
|
||||||
public Sqoop(SqoopTool tool, Configuration conf, SqoopOptions opts) {
|
|
||||||
if (null != conf) {
|
|
||||||
setConf(conf);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.options = opts;
|
|
||||||
this.options.setConf(getConf());
|
|
||||||
|
|
||||||
this.tool = tool;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the SqoopOptions used in this Sqoop instance.
|
|
||||||
*/
|
|
||||||
public SqoopOptions getOptions() {
|
|
||||||
return this.options;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the SqoopTool used in this Sqoop instance.
|
|
||||||
*/
|
|
||||||
public SqoopTool getTool() {
|
|
||||||
return this.tool;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
/**
|
|
||||||
* Actual main entry-point for the program
|
|
||||||
*/
|
|
||||||
public int run(String [] args) {
|
|
||||||
if (options.getConf() == null) {
|
|
||||||
// Configuration wasn't initialized until after the ToolRunner
|
|
||||||
// got us to this point. ToolRunner gave Sqoop itself a Conf
|
|
||||||
// though.
|
|
||||||
options.setConf(getConf());
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
options = tool.parseArguments(args, null, options, false);
|
|
||||||
tool.appendArgs(this.childPrgmArgs);
|
|
||||||
tool.validateOptions(options);
|
|
||||||
} catch (Exception e) {
|
|
||||||
// Couldn't parse arguments.
|
|
||||||
// Log the stack trace for this exception
|
|
||||||
LOG.debug(e.getMessage(), e);
|
|
||||||
// Print exception message.
|
|
||||||
System.err.println(e.getMessage());
|
|
||||||
// Print the tool usage message and exit.
|
|
||||||
ToolOptions toolOpts = new ToolOptions();
|
|
||||||
tool.configureOptions(toolOpts);
|
|
||||||
tool.printHelp(toolOpts);
|
|
||||||
return 1; // Exit on exception here.
|
|
||||||
}
|
|
||||||
|
|
||||||
return tool.run(options);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SqoopTools sometimes pass arguments to a child program (e.g., mysqldump).
|
|
||||||
* Users can specify additional args to these programs by preceeding the
|
|
||||||
* additional arguments with a standalone '--'; but
|
|
||||||
* ToolRunner/GenericOptionsParser will cull out this argument. We remove
|
|
||||||
* the child-program arguments in advance, and store them to be readded
|
|
||||||
* later.
|
|
||||||
* @param argv the argv in to the SqoopTool
|
|
||||||
* @return the argv with a "--" and any subsequent arguments removed.
|
|
||||||
*/
|
|
||||||
private String [] stashChildPrgmArgs(String [] argv) {
|
|
||||||
for (int i = 0; i < argv.length; i++) {
|
|
||||||
if ("--".equals(argv[i])) {
|
|
||||||
this.childPrgmArgs = Arrays.copyOfRange(argv, i, argv.length);
|
|
||||||
return Arrays.copyOfRange(argv, 0, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Didn't find child-program arguments.
|
|
||||||
return argv;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Given a Sqoop object and a set of arguments to deliver to
|
|
||||||
* its embedded SqoopTool, run the tool, wrapping the call to
|
|
||||||
* ToolRunner.
|
|
||||||
* This entry-point is preferred to ToolRunner.run() because
|
|
||||||
* it has a chance to stash child program arguments before
|
|
||||||
* GenericOptionsParser would remove them.
|
|
||||||
*/
|
|
||||||
public static int runSqoop(Sqoop sqoop, String [] args) {
|
public static int runSqoop(Sqoop sqoop, String [] args) {
|
||||||
try {
|
return org.apache.sqoop.Sqoop.runSqoop(sqoop, args);
|
||||||
String [] toolArgs = sqoop.stashChildPrgmArgs(args);
|
|
||||||
return ToolRunner.run(sqoop.getConf(), sqoop, toolArgs);
|
|
||||||
} catch (Exception e) {
|
|
||||||
LOG.error("Got exception running Sqoop: " + e.toString());
|
|
||||||
e.printStackTrace();
|
|
||||||
if (System.getProperty(SQOOP_RETHROW_PROPERTY) != null) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Entry-point that parses the correct SqoopTool to use from the args,
|
|
||||||
* but does not call System.exit() as main() will.
|
|
||||||
*/
|
|
||||||
public static int runTool(String [] args, Configuration conf) {
|
public static int runTool(String [] args, Configuration conf) {
|
||||||
// Expand the options
|
return org.apache.sqoop.Sqoop.runTool(args, conf);
|
||||||
String[] expandedArgs = null;
|
|
||||||
try {
|
|
||||||
expandedArgs = OptionsFileUtil.expandArguments(args);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
LOG.error("Error while expanding arguments", ex);
|
|
||||||
System.err.println(ex.getMessage());
|
|
||||||
System.err.println("Try 'sqoop help' for usage.");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
String toolName = expandedArgs[0];
|
|
||||||
Configuration pluginConf = SqoopTool.loadPlugins(conf);
|
|
||||||
SqoopTool tool = SqoopTool.getTool(toolName);
|
|
||||||
if (null == tool) {
|
|
||||||
System.err.println("No such sqoop tool: " + toolName
|
|
||||||
+ ". See 'sqoop help'.");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Sqoop sqoop = new Sqoop(tool, pluginConf);
|
|
||||||
return runSqoop(sqoop,
|
|
||||||
Arrays.copyOfRange(expandedArgs, 1, expandedArgs.length));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Entry-point that parses the correct SqoopTool to use from the args,
|
|
||||||
* but does not call System.exit() as main() will.
|
|
||||||
*/
|
|
||||||
public static int runTool(String [] args) {
|
public static int runTool(String [] args) {
|
||||||
return runTool(args, new Configuration());
|
return org.apache.sqoop.Sqoop.runTool(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String [] args) {
|
public static void main(String [] args) {
|
||||||
if (args.length == 0) {
|
org.apache.sqoop.Sqoop.main(args);
|
||||||
System.err.println("Try 'sqoop help' for usage.");
|
|
||||||
System.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
int ret = runTool(args);
|
|
||||||
System.exit(ret);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Sqoop(SqoopTool tool) {
|
||||||
|
super(tool);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Sqoop(SqoopTool tool, Configuration conf) {
|
||||||
|
super(tool, conf);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Sqoop(SqoopTool tool, Configuration conf, SqoopOptions opts) {
|
||||||
|
super(tool, conf, opts);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright 2011 The Apache Software Foundation
|
|
||||||
*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
* or more contributor license agreements. See the NOTICE file
|
* or more contributor license agreements. See the NOTICE file
|
||||||
* distributed with this work for additional information
|
* distributed with this work for additional information
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
/**
|
/**
|
||||||
* @deprecated Moving to use org.apache.sqoop namespace.
|
* @deprecated Moving to use org.apache.sqoop namespace.
|
||||||
*/
|
*/
|
||||||
public class RelatedOptions
|
public class RelatedOptions
|
||||||
extends org.apache.sqoop.cli.RelatedOptions {
|
extends org.apache.sqoop.cli.RelatedOptions {
|
||||||
|
|
||||||
public RelatedOptions() {
|
public RelatedOptions() {
|
||||||
|
@ -18,18 +18,6 @@
|
|||||||
|
|
||||||
package com.cloudera.sqoop.hbase;
|
package com.cloudera.sqoop.hbase;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.TreeMap;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
|
|
||||||
import org.apache.hadoop.hbase.client.Put;
|
|
||||||
import org.apache.hadoop.hbase.util.Bytes;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated Moving to use org.apache.sqoop namespace.
|
* @deprecated Moving to use org.apache.sqoop namespace.
|
||||||
*/
|
*/
|
||||||
|
@ -44,7 +44,7 @@ private LobFile() {
|
|||||||
org.apache.sqoop.io.LobFile.LATEST_LOB_VERSION;
|
org.apache.sqoop.io.LobFile.LATEST_LOB_VERSION;
|
||||||
|
|
||||||
// Must be in sync with org.apache.sqoop.io.LobFile.HEADER_ID_STR
|
// Must be in sync with org.apache.sqoop.io.LobFile.HEADER_ID_STR
|
||||||
static final char [] HEADER_ID_STR =
|
static final char [] HEADER_ID_STR =
|
||||||
org.apache.sqoop.io.LobFile.HEADER_ID_STR;
|
org.apache.sqoop.io.LobFile.HEADER_ID_STR;
|
||||||
|
|
||||||
// Value for entryId to write to the beginning of an IndexSegment.
|
// Value for entryId to write to the beginning of an IndexSegment.
|
||||||
|
@ -18,140 +18,20 @@
|
|||||||
|
|
||||||
package com.cloudera.sqoop.manager;
|
package com.cloudera.sqoop.manager;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
|
|
||||||
import com.cloudera.sqoop.SqoopOptions;
|
import com.cloudera.sqoop.SqoopOptions;
|
||||||
import com.cloudera.sqoop.util.ImportException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages connections to Postgresql databases.
|
* Manages connections to Postgresql databases.
|
||||||
*/
|
*/
|
||||||
public class PostgresqlManager extends CatalogQueryManager {
|
public class PostgresqlManager
|
||||||
|
extends org.apache.sqoop.manager.PostgresqlManager {
|
||||||
public static final Log LOG = LogFactory.getLog(
|
|
||||||
PostgresqlManager.class.getName());
|
|
||||||
|
|
||||||
// driver class to ensure is loaded when making db connection.
|
|
||||||
private static final String DRIVER_CLASS = "org.postgresql.Driver";
|
|
||||||
|
|
||||||
// set to true after we warn the user that we can use direct fastpath.
|
|
||||||
private static boolean warningPrinted = false;
|
|
||||||
|
|
||||||
public PostgresqlManager(final SqoopOptions opts) {
|
public PostgresqlManager(final SqoopOptions opts) {
|
||||||
super(DRIVER_CLASS, opts);
|
super(opts);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected PostgresqlManager(final SqoopOptions opts, boolean ignored) {
|
protected PostgresqlManager(final SqoopOptions opts, boolean ignored) {
|
||||||
// constructor used by subclasses to avoid the --direct warning.
|
super(opts, ignored);
|
||||||
super(DRIVER_CLASS, opts);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String escapeColName(String colName) {
|
|
||||||
return escapeIdentifier(colName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String escapeTableName(String tableName) {
|
|
||||||
return escapeIdentifier(tableName);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected String escapeIdentifier(String identifier) {
|
|
||||||
if (identifier == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return "\"" + identifier.replace("\"", "\"\"") + "\"";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void close() throws SQLException {
|
|
||||||
if (this.hasOpenConnection()) {
|
|
||||||
this.getConnection().commit(); // Commit any changes made thus far.
|
|
||||||
}
|
|
||||||
|
|
||||||
super.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getColNamesQuery(String tableName) {
|
|
||||||
// Use LIMIT to return fast
|
|
||||||
return "SELECT t.* FROM " + escapeTableName(tableName) + " AS t LIMIT 1";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void importTable(ImportJobContext context)
|
|
||||||
throws IOException, ImportException {
|
|
||||||
|
|
||||||
// The user probably should have requested --direct to invoke pg_dump.
|
|
||||||
// Display a warning informing them of this fact.
|
|
||||||
if (!PostgresqlManager.warningPrinted) {
|
|
||||||
LOG.warn("It looks like you are importing from postgresql.");
|
|
||||||
LOG.warn("This transfer can be faster! Use the --direct");
|
|
||||||
LOG.warn("option to exercise a postgresql-specific fast path.");
|
|
||||||
|
|
||||||
PostgresqlManager.warningPrinted = true; // don't display this twice.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Then run the normal importTable() method.
|
|
||||||
super.importTable(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean supportsStagingForExport() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getListDatabasesQuery() {
|
|
||||||
return
|
|
||||||
"SELECT DATNAME FROM PG_CATALOG.PG_DATABASE";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getListTablesQuery() {
|
|
||||||
return
|
|
||||||
"SELECT TABLENAME FROM PG_CATALOG.PG_TABLES "
|
|
||||||
+ "WHERE SCHEMANAME = (SELECT CURRENT_SCHEMA())";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getListColumnsQuery(String tableName) {
|
|
||||||
return
|
|
||||||
"SELECT col.ATTNAME FROM PG_CATALOG.PG_NAMESPACE sch,"
|
|
||||||
+ " PG_CATALOG.PG_CLASS tab, PG_CATALOG.PG_ATTRIBUTE col "
|
|
||||||
+ "WHERE sch.OID = tab.RELNAMESPACE "
|
|
||||||
+ " AND tab.OID = col.ATTRELID "
|
|
||||||
+ " AND sch.NSPNAME = (SELECT CURRENT_SCHEMA()) "
|
|
||||||
+ " AND tab.RELNAME = '" + escapeLiteral(tableName) + "' "
|
|
||||||
+ " AND col.ATTNUM >= 1";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getPrimaryKeyQuery(String tableName) {
|
|
||||||
return
|
|
||||||
"SELECT col.ATTNAME FROM PG_CATALOG.PG_NAMESPACE sch, "
|
|
||||||
+ " PG_CATALOG.PG_CLASS tab, PG_CATALOG.PG_ATTRIBUTE col, "
|
|
||||||
+ " PG_CATALOG.PG_INDEX ind "
|
|
||||||
+ "WHERE sch.OID = tab.RELNAMESPACE "
|
|
||||||
+ " AND tab.OID = col.ATTRELID "
|
|
||||||
+ " AND tab.OID = ind.INDRELID "
|
|
||||||
+ " AND sch.NSPNAME = (SELECT CURRENT_SCHEMA()) "
|
|
||||||
+ " AND tab.RELNAME = '" + escapeLiteral(tableName) + "' "
|
|
||||||
+ " AND col.ATTNUM = ANY(ind.INDKEY) "
|
|
||||||
+ " AND ind.INDISPRIMARY";
|
|
||||||
}
|
|
||||||
|
|
||||||
private String escapeLiteral(String literal) {
|
|
||||||
return literal.replace("'", "''");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getCurTimestampQuery() {
|
|
||||||
return "SELECT CURRENT_TIMESTAMP";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright 2011 The Apache Software Foundation
|
|
||||||
*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
* or more contributor license agreements. See the NOTICE file
|
* or more contributor license agreements. See the NOTICE file
|
||||||
* distributed with this work for additional information
|
* distributed with this work for additional information
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
* @deprecated Moving to use org.apache.sqoop namespace.
|
* @deprecated Moving to use org.apache.sqoop namespace.
|
||||||
*/
|
*/
|
||||||
public class DelegatingOutputFormat<K extends FieldMappable, V>
|
public class DelegatingOutputFormat<K extends FieldMappable, V>
|
||||||
extends org.apache.sqoop.mapreduce.DelegatingOutputFormat <K, V> {
|
extends org.apache.sqoop.mapreduce.DelegatingOutputFormat<K, V> {
|
||||||
|
|
||||||
public static final String DELEGATE_CLASS_KEY =
|
public static final String DELEGATE_CLASS_KEY =
|
||||||
org.apache.sqoop.mapreduce.DelegatingOutputFormat.DELEGATE_CLASS_KEY;
|
org.apache.sqoop.mapreduce.DelegatingOutputFormat.DELEGATE_CLASS_KEY;
|
||||||
|
@ -25,5 +25,5 @@
|
|||||||
*/
|
*/
|
||||||
public class ExportBatchOutputFormat<K extends SqoopRecord, V>
|
public class ExportBatchOutputFormat<K extends SqoopRecord, V>
|
||||||
extends org.apache.sqoop.mapreduce.ExportBatchOutputFormat
|
extends org.apache.sqoop.mapreduce.ExportBatchOutputFormat
|
||||||
<SqoopRecord,V> {
|
<SqoopRecord, V> {
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,6 @@
|
|||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
|
||||||
import org.apache.hadoop.mapreduce.RecordWriter;
|
|
||||||
import org.apache.hadoop.mapreduce.lib.db.DBWritable;
|
import org.apache.hadoop.mapreduce.lib.db.DBWritable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -47,7 +47,7 @@ public class DataDrivenDBInputFormat<T extends DBWritable>
|
|||||||
* @deprecated use org.apache.sqoop.mapreduce.db.DataDrivenDBInputFormat.
|
* @deprecated use org.apache.sqoop.mapreduce.db.DataDrivenDBInputFormat.
|
||||||
* DataDrivenDBInputSplit instead.
|
* DataDrivenDBInputSplit instead.
|
||||||
* @see org.apache.sqoop.mapreduce.db.DataDrivenDBInputFormat.
|
* @see org.apache.sqoop.mapreduce.db.DataDrivenDBInputFormat.
|
||||||
* DataDrivenDBInputSplit
|
* DataDrivenDBInputSplit
|
||||||
*/
|
*/
|
||||||
public static class DataDrivenDBInputSplit extends
|
public static class DataDrivenDBInputSplit extends
|
||||||
org.apache.sqoop.mapreduce.db.DataDrivenDBInputFormat.DataDrivenDBInputSplit {
|
org.apache.sqoop.mapreduce.db.DataDrivenDBInputFormat.DataDrivenDBInputSplit {
|
||||||
|
@ -20,6 +20,6 @@
|
|||||||
/**
|
/**
|
||||||
* @deprecated Moving to use org.apache.sqoop namespace.
|
* @deprecated Moving to use org.apache.sqoop namespace.
|
||||||
*/
|
*/
|
||||||
public class CodeGenTool
|
public class CodeGenTool
|
||||||
extends org.apache.sqoop.tool.CodeGenTool {
|
extends org.apache.sqoop.tool.CodeGenTool {
|
||||||
}
|
}
|
||||||
|
@ -19,8 +19,6 @@
|
|||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.apache.hadoop.util.StringUtils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated Moving to use org.apache.sqoop namespace.
|
* @deprecated Moving to use org.apache.sqoop namespace.
|
||||||
*/
|
*/
|
||||||
|
@ -23,8 +23,6 @@
|
|||||||
|
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
|
|
||||||
import com.cloudera.sqoop.config.ConfigurationConstants;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated Moving to use org.apache.sqoop namespace.
|
* @deprecated Moving to use org.apache.sqoop namespace.
|
||||||
*/
|
*/
|
||||||
|
232
src/java/org/apache/sqoop/ConnFactory.java
Normal file
232
src/java/org/apache/sqoop/ConnFactory.java
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.sqoop;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.Reader;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.apache.hadoop.conf.Configuration;
|
||||||
|
import org.apache.hadoop.util.ReflectionUtils;
|
||||||
|
import org.apache.hadoop.util.StringUtils;
|
||||||
|
|
||||||
|
import com.cloudera.sqoop.manager.ConnManager;
|
||||||
|
import com.cloudera.sqoop.manager.DefaultManagerFactory;
|
||||||
|
import com.cloudera.sqoop.manager.ManagerFactory;
|
||||||
|
import com.cloudera.sqoop.metastore.JobData;
|
||||||
|
|
||||||
|
import com.cloudera.sqoop.util.ClassLoaderStack;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factory class to create the ConnManager type required
|
||||||
|
* for the current import job.
|
||||||
|
*
|
||||||
|
* This class delegates the actual responsibility for instantiating
|
||||||
|
* ConnManagers to one or more instances of ManagerFactory. ManagerFactories
|
||||||
|
* are consulted in the order specified in sqoop-site.xml
|
||||||
|
* (sqoop.connection.factories).
|
||||||
|
*/
|
||||||
|
public class ConnFactory {
|
||||||
|
|
||||||
|
public static final Log LOG = LogFactory.getLog(ConnFactory.class.getName());
|
||||||
|
|
||||||
|
public ConnFactory(Configuration conf) {
|
||||||
|
factories = new LinkedList<ManagerFactory>();
|
||||||
|
instantiateFactories(conf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** The sqoop-site.xml configuration property used to set the list of
|
||||||
|
* available ManagerFactories.
|
||||||
|
*/
|
||||||
|
public static final String FACTORY_CLASS_NAMES_KEY =
|
||||||
|
"sqoop.connection.factories";
|
||||||
|
|
||||||
|
// The default value for sqoop.connection.factories is the
|
||||||
|
// name of the DefaultManagerFactory.
|
||||||
|
public static final String DEFAULT_FACTORY_CLASS_NAMES =
|
||||||
|
DefaultManagerFactory.class.getName();
|
||||||
|
|
||||||
|
/** The list of ManagerFactory instances consulted by getManager().
|
||||||
|
*/
|
||||||
|
private List<ManagerFactory> factories;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the ManagerFactory instances that should populate
|
||||||
|
* the factories list.
|
||||||
|
*/
|
||||||
|
private void instantiateFactories(Configuration conf) {
|
||||||
|
loadManagersFromConfDir(conf);
|
||||||
|
String [] classNameArray =
|
||||||
|
conf.getStrings(FACTORY_CLASS_NAMES_KEY, DEFAULT_FACTORY_CLASS_NAMES);
|
||||||
|
|
||||||
|
for (String className : classNameArray) {
|
||||||
|
try {
|
||||||
|
className = className.trim(); // Ignore leading/trailing whitespace.
|
||||||
|
ManagerFactory factory = ReflectionUtils.newInstance(
|
||||||
|
(Class<? extends ManagerFactory>)
|
||||||
|
conf.getClassByName(className), conf);
|
||||||
|
LOG.debug("Loaded manager factory: " + className);
|
||||||
|
factories.add(factory);
|
||||||
|
} catch (ClassNotFoundException cnfe) {
|
||||||
|
LOG.error("Could not load ManagerFactory " + className
|
||||||
|
+ " (not found)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factory method to get a ConnManager for the given JDBC connect string.
|
||||||
|
* @param data the connection and other configuration arguments.
|
||||||
|
* @return a ConnManager instance for the appropriate database.
|
||||||
|
* @throws IOException if it cannot find a ConnManager for this schema.
|
||||||
|
*/
|
||||||
|
public ConnManager getManager(JobData data) throws IOException {
|
||||||
|
// Try all the available manager factories.
|
||||||
|
for (ManagerFactory factory : factories) {
|
||||||
|
LOG.debug("Trying ManagerFactory: " + factory.getClass().getName());
|
||||||
|
ConnManager mgr = factory.accept(data);
|
||||||
|
if (null != mgr) {
|
||||||
|
LOG.debug("Instantiated ConnManager " + mgr.toString());
|
||||||
|
return mgr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new IOException("No manager for connect string: "
|
||||||
|
+ data.getSqoopOptions().getConnectString());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a ManagerFactory class to the list that we instantiate.
|
||||||
|
* @param conf the Configuration to set.
|
||||||
|
* @param factory the ManagerFactory class name to add.
|
||||||
|
*/
|
||||||
|
private void addManager(Configuration conf, String factory) {
|
||||||
|
String curVal = conf.get(FACTORY_CLASS_NAMES_KEY);
|
||||||
|
if (null == curVal) {
|
||||||
|
conf.set(FACTORY_CLASS_NAMES_KEY, factory);
|
||||||
|
} else {
|
||||||
|
conf.set(FACTORY_CLASS_NAMES_KEY, curVal + "," + factory);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read the specified file and extract any ManagerFactory implementation
|
||||||
|
* names from there.
|
||||||
|
* @param conf the configuration to populate.
|
||||||
|
* @param f the file containing the configuration data to add.
|
||||||
|
*/
|
||||||
|
private void addManagersFromFile(Configuration conf, File f) {
|
||||||
|
Reader r = null;
|
||||||
|
try {
|
||||||
|
// The file format is actually Java properties-file syntax.
|
||||||
|
r = new InputStreamReader(new FileInputStream(f));
|
||||||
|
Properties props = new Properties();
|
||||||
|
props.load(r);
|
||||||
|
|
||||||
|
for (Map.Entry<Object, Object> entry : props.entrySet()) {
|
||||||
|
// Each key is a ManagerFactory class name.
|
||||||
|
// Each value, if set, is the jar that contains it.
|
||||||
|
String factory = entry.getKey().toString();
|
||||||
|
addManager(conf, factory);
|
||||||
|
|
||||||
|
String jarName = entry.getValue().toString();
|
||||||
|
if (jarName.length() > 0) {
|
||||||
|
ClassLoaderStack.addJarFile(jarName, factory);
|
||||||
|
LOG.debug("Added factory " + factory + " in jar " + jarName
|
||||||
|
+ " specified by " + f);
|
||||||
|
} else if (LOG.isDebugEnabled()) {
|
||||||
|
LOG.debug("Added factory " + factory + " specified by " + f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
LOG.error("Error loading ManagerFactory information from file "
|
||||||
|
+ f + ": " + StringUtils.stringifyException(ioe));
|
||||||
|
} finally {
|
||||||
|
if (null != r) {
|
||||||
|
try {
|
||||||
|
r.close();
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
LOG.warn("Error closing file " + f + ": " + ioe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If $SQOOP_CONF_DIR/managers.d/ exists and sqoop.connection.factories is
|
||||||
|
* not set, then we look through the files in that directory; they should
|
||||||
|
* contain lines of the form mgr.class.name[=/path/to/containing.jar].
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* Put all mgr.class.names into the Configuration, and load any specified
|
||||||
|
* jars into the ClassLoader.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param conf the current configuration to populate with class names.
|
||||||
|
* @return conf again, after possibly populating sqoop.connection.factories.
|
||||||
|
*/
|
||||||
|
private Configuration loadManagersFromConfDir(Configuration conf) {
|
||||||
|
if (conf.get(FACTORY_CLASS_NAMES_KEY) != null) {
|
||||||
|
LOG.debug(FACTORY_CLASS_NAMES_KEY + " is set; ignoring managers.d");
|
||||||
|
return conf;
|
||||||
|
}
|
||||||
|
|
||||||
|
String confDirName = System.getenv("SQOOP_CONF_DIR");
|
||||||
|
if (null == confDirName) {
|
||||||
|
LOG.warn("$SQOOP_CONF_DIR has not been set in the environment. "
|
||||||
|
+ "Cannot check for additional configuration.");
|
||||||
|
return conf;
|
||||||
|
}
|
||||||
|
|
||||||
|
File confDir = new File(confDirName);
|
||||||
|
File mgrDir = new File(confDir, "managers.d");
|
||||||
|
|
||||||
|
if (mgrDir.exists() && mgrDir.isDirectory()) {
|
||||||
|
// We have a managers.d subdirectory. Get the file list, sort it,
|
||||||
|
// and process them in order.
|
||||||
|
String [] fileNames = mgrDir.list();
|
||||||
|
Arrays.sort(fileNames);
|
||||||
|
|
||||||
|
for (String fileName : fileNames) {
|
||||||
|
File f = new File(mgrDir, fileName);
|
||||||
|
if (f.isFile()) {
|
||||||
|
addManagersFromFile(conf, f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the default MF.
|
||||||
|
addManager(conf, DEFAULT_FACTORY_CLASS_NAMES);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the classloader in this configuration so that it will use
|
||||||
|
// the jars we just loaded in.
|
||||||
|
conf.setClassLoader(Thread.currentThread().getContextClassLoader());
|
||||||
|
return conf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
242
src/java/org/apache/sqoop/Sqoop.java
Normal file
242
src/java/org/apache/sqoop/Sqoop.java
Normal file
@ -0,0 +1,242 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.sqoop;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.apache.hadoop.conf.Configuration;
|
||||||
|
import org.apache.hadoop.conf.Configured;
|
||||||
|
import org.apache.hadoop.util.Tool;
|
||||||
|
import org.apache.hadoop.util.ToolRunner;
|
||||||
|
|
||||||
|
import com.cloudera.sqoop.SqoopOptions;
|
||||||
|
import com.cloudera.sqoop.cli.ToolOptions;
|
||||||
|
import com.cloudera.sqoop.tool.SqoopTool;
|
||||||
|
import com.cloudera.sqoop.util.OptionsFileUtil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main entry-point for Sqoop
|
||||||
|
* Usage: hadoop jar (this_jar_name) com.cloudera.sqoop.Sqoop (options)
|
||||||
|
* See the SqoopOptions class for options.
|
||||||
|
*/
|
||||||
|
public class Sqoop extends Configured implements Tool {
|
||||||
|
|
||||||
|
public static final Log SQOOP_LOG = LogFactory.getLog("com.cloudera.sqoop");
|
||||||
|
public static final Log LOG = LogFactory.getLog(Sqoop.class.getName());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If this System property is set, always throw an exception, do not just
|
||||||
|
* exit with status 1.
|
||||||
|
*/
|
||||||
|
public static final String SQOOP_RETHROW_PROPERTY = "sqoop.throwOnError";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The option to specify an options file from which other options to the
|
||||||
|
* tool are read.
|
||||||
|
*/
|
||||||
|
public static final String SQOOP_OPTIONS_FILE_SPECIFIER = "--options-file";
|
||||||
|
|
||||||
|
static {
|
||||||
|
Configuration.addDefaultResource("sqoop-site.xml");
|
||||||
|
}
|
||||||
|
|
||||||
|
private SqoopTool tool;
|
||||||
|
private SqoopOptions options;
|
||||||
|
private String [] childPrgmArgs;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance of Sqoop set to run the supplied SqoopTool
|
||||||
|
* with the default configuration.
|
||||||
|
* @param tool the SqoopTool to run in the main body of Sqoop.
|
||||||
|
*/
|
||||||
|
public Sqoop(SqoopTool tool) {
|
||||||
|
this(tool, (Configuration) null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance of Sqoop set to run the supplied SqoopTool
|
||||||
|
* with the provided configuration.
|
||||||
|
* @param tool the SqoopTool to run in the main body of Sqoop.
|
||||||
|
* @param conf the Configuration to use (e.g., from ToolRunner).
|
||||||
|
*/
|
||||||
|
public Sqoop(SqoopTool tool, Configuration conf) {
|
||||||
|
this(tool, conf, new SqoopOptions());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance of Sqoop set to run the supplied SqoopTool
|
||||||
|
* with the provided configuration and SqoopOptions.
|
||||||
|
* @param tool the SqoopTool to run in the main body of Sqoop.
|
||||||
|
* @param conf the Configuration to use (e.g., from ToolRunner).
|
||||||
|
* @param opts the SqoopOptions which control the tool's parameters.
|
||||||
|
*/
|
||||||
|
public Sqoop(SqoopTool tool, Configuration conf, SqoopOptions opts) {
|
||||||
|
if (null != conf) {
|
||||||
|
setConf(conf);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.options = opts;
|
||||||
|
this.options.setConf(getConf());
|
||||||
|
|
||||||
|
this.tool = tool;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the SqoopOptions used in this Sqoop instance.
|
||||||
|
*/
|
||||||
|
public SqoopOptions getOptions() {
|
||||||
|
return this.options;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the SqoopTool used in this Sqoop instance.
|
||||||
|
*/
|
||||||
|
public SqoopTool getTool() {
|
||||||
|
return this.tool;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
/**
|
||||||
|
* Actual main entry-point for the program
|
||||||
|
*/
|
||||||
|
public int run(String [] args) {
|
||||||
|
if (options.getConf() == null) {
|
||||||
|
// Configuration wasn't initialized until after the ToolRunner
|
||||||
|
// got us to this point. ToolRunner gave Sqoop itself a Conf
|
||||||
|
// though.
|
||||||
|
options.setConf(getConf());
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
options = tool.parseArguments(args, null, options, false);
|
||||||
|
tool.appendArgs(this.childPrgmArgs);
|
||||||
|
tool.validateOptions(options);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// Couldn't parse arguments.
|
||||||
|
// Log the stack trace for this exception
|
||||||
|
LOG.debug(e.getMessage(), e);
|
||||||
|
// Print exception message.
|
||||||
|
System.err.println(e.getMessage());
|
||||||
|
// Print the tool usage message and exit.
|
||||||
|
ToolOptions toolOpts = new ToolOptions();
|
||||||
|
tool.configureOptions(toolOpts);
|
||||||
|
tool.printHelp(toolOpts);
|
||||||
|
return 1; // Exit on exception here.
|
||||||
|
}
|
||||||
|
|
||||||
|
return tool.run(options);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SqoopTools sometimes pass arguments to a child program (e.g., mysqldump).
|
||||||
|
* Users can specify additional args to these programs by preceeding the
|
||||||
|
* additional arguments with a standalone '--'; but
|
||||||
|
* ToolRunner/GenericOptionsParser will cull out this argument. We remove
|
||||||
|
* the child-program arguments in advance, and store them to be readded
|
||||||
|
* later.
|
||||||
|
* @param argv the argv in to the SqoopTool
|
||||||
|
* @return the argv with a "--" and any subsequent arguments removed.
|
||||||
|
*/
|
||||||
|
private String [] stashChildPrgmArgs(String [] argv) {
|
||||||
|
for (int i = 0; i < argv.length; i++) {
|
||||||
|
if ("--".equals(argv[i])) {
|
||||||
|
this.childPrgmArgs = Arrays.copyOfRange(argv, i, argv.length);
|
||||||
|
return Arrays.copyOfRange(argv, 0, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Didn't find child-program arguments.
|
||||||
|
return argv;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given a Sqoop object and a set of arguments to deliver to
|
||||||
|
* its embedded SqoopTool, run the tool, wrapping the call to
|
||||||
|
* ToolRunner.
|
||||||
|
* This entry-point is preferred to ToolRunner.run() because
|
||||||
|
* it has a chance to stash child program arguments before
|
||||||
|
* GenericOptionsParser would remove them.
|
||||||
|
*/
|
||||||
|
public static int runSqoop(Sqoop sqoop, String [] args) {
|
||||||
|
try {
|
||||||
|
String [] toolArgs = sqoop.stashChildPrgmArgs(args);
|
||||||
|
return ToolRunner.run(sqoop.getConf(), sqoop, toolArgs);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.error("Got exception running Sqoop: " + e.toString());
|
||||||
|
e.printStackTrace();
|
||||||
|
if (System.getProperty(SQOOP_RETHROW_PROPERTY) != null) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entry-point that parses the correct SqoopTool to use from the args,
|
||||||
|
* but does not call System.exit() as main() will.
|
||||||
|
*/
|
||||||
|
public static int runTool(String [] args, Configuration conf) {
|
||||||
|
// Expand the options
|
||||||
|
String[] expandedArgs = null;
|
||||||
|
try {
|
||||||
|
expandedArgs = OptionsFileUtil.expandArguments(args);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
LOG.error("Error while expanding arguments", ex);
|
||||||
|
System.err.println(ex.getMessage());
|
||||||
|
System.err.println("Try 'sqoop help' for usage.");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
String toolName = expandedArgs[0];
|
||||||
|
Configuration pluginConf = SqoopTool.loadPlugins(conf);
|
||||||
|
SqoopTool tool = SqoopTool.getTool(toolName);
|
||||||
|
if (null == tool) {
|
||||||
|
System.err.println("No such sqoop tool: " + toolName
|
||||||
|
+ ". See 'sqoop help'.");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Sqoop sqoop = new Sqoop(tool, pluginConf);
|
||||||
|
return runSqoop(sqoop,
|
||||||
|
Arrays.copyOfRange(expandedArgs, 1, expandedArgs.length));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entry-point that parses the correct SqoopTool to use from the args,
|
||||||
|
* but does not call System.exit() as main() will.
|
||||||
|
*/
|
||||||
|
public static int runTool(String [] args) {
|
||||||
|
return runTool(args, new Configuration());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String [] args) {
|
||||||
|
if (args.length == 0) {
|
||||||
|
System.err.println("Try 'sqoop help' for usage.");
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ret = runTool(args);
|
||||||
|
System.exit(ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
1961
src/java/org/apache/sqoop/SqoopOptions.java
Normal file
1961
src/java/org/apache/sqoop/SqoopOptions.java
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,4 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright 2011 The Apache Software Foundation
|
|
||||||
*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
* or more contributor license agreements. See the NOTICE file
|
* or more contributor license agreements. See the NOTICE file
|
||||||
* distributed with this work for additional information
|
* distributed with this work for additional information
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.sqoop.lib;
|
package org.apache.sqoop.lib;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Encapsulates a set of delimiters used to encode a record.
|
* Encapsulates a set of delimiters used to encode a record.
|
||||||
*/
|
*/
|
||||||
@ -62,6 +61,19 @@ public DelimiterSet(char field, char record, char enclose, char escape,
|
|||||||
this.encloseRequired = isEncloseRequired;
|
this.encloseRequired = isEncloseRequired;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Identical to clone() but does not throw spurious exceptions.
|
||||||
|
* @return a new copy of this same set of delimiters.
|
||||||
|
*/
|
||||||
|
public DelimiterSet copy() {
|
||||||
|
try {
|
||||||
|
return (DelimiterSet) clone();
|
||||||
|
} catch (CloneNotSupportedException cnse) {
|
||||||
|
// Should never happen for DelimiterSet.
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the fields-terminated-by character.
|
* Sets the fields-terminated-by character.
|
||||||
*/
|
*/
|
||||||
|
@ -150,5 +150,11 @@ protected String getPrimaryKeyQuery(String tableName) {
|
|||||||
private String escapeLiteral(String literal) {
|
private String escapeLiteral(String literal) {
|
||||||
return literal.replace("'", "''");
|
return literal.replace("'", "''");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getCurTimestampQuery() {
|
||||||
|
return "SELECT CURRENT_TIMESTAMP";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +58,8 @@ public class AvroExportMapper
|
|||||||
|
|
||||||
private static final String BIG_DECIMAL_TYPE = "java.math.BigDecimal";
|
private static final String BIG_DECIMAL_TYPE = "java.math.BigDecimal";
|
||||||
|
|
||||||
public static final String AVRO_COLUMN_TYPES_MAP = "sqoop.avro.column.types.map";
|
public static final String AVRO_COLUMN_TYPES_MAP =
|
||||||
|
"sqoop.avro.column.types.map";
|
||||||
|
|
||||||
private MapWritable columnTypes;
|
private MapWritable columnTypes;
|
||||||
private SqoopRecord recordImpl;
|
private SqoopRecord recordImpl;
|
||||||
|
@ -24,7 +24,6 @@
|
|||||||
import org.apache.hadoop.mapreduce.InputSplit;
|
import org.apache.hadoop.mapreduce.InputSplit;
|
||||||
import org.apache.hadoop.mapreduce.RecordReader;
|
import org.apache.hadoop.mapreduce.RecordReader;
|
||||||
import org.apache.hadoop.mapreduce.TaskAttemptContext;
|
import org.apache.hadoop.mapreduce.TaskAttemptContext;
|
||||||
import com.cloudera.sqoop.mapreduce.DataDrivenImportJob;
|
|
||||||
import com.cloudera.sqoop.mapreduce.db.DataDrivenDBInputFormat;
|
import com.cloudera.sqoop.mapreduce.db.DataDrivenDBInputFormat;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -32,11 +32,15 @@
|
|||||||
import org.apache.hadoop.mapreduce.TaskAttemptContext;
|
import org.apache.hadoop.mapreduce.TaskAttemptContext;
|
||||||
import org.apache.hadoop.util.*;
|
import org.apache.hadoop.util.*;
|
||||||
|
|
||||||
/** An {@link OutputFormat} that writes plain text files.
|
/**
|
||||||
|
* An {@link OutputFormat} that writes plain text files.
|
||||||
* Only writes the key. Does not write any delimiter/newline after the key.
|
* Only writes the key. Does not write any delimiter/newline after the key.
|
||||||
*/
|
*/
|
||||||
public class RawKeyTextOutputFormat<K, V> extends FileOutputFormat<K, V> {
|
public class RawKeyTextOutputFormat<K, V> extends FileOutputFormat<K, V> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RecordWriter to write to plain text files.
|
||||||
|
*/
|
||||||
public static class RawKeyRecordWriter<K, V> extends RecordWriter<K, V> {
|
public static class RawKeyRecordWriter<K, V> extends RecordWriter<K, V> {
|
||||||
|
|
||||||
private static final String UTF8 = "UTF-8";
|
private static final String UTF8 = "UTF-8";
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
import org.apache.hadoop.mapreduce.lib.db.DBWritable;
|
import org.apache.hadoop.mapreduce.lib.db.DBWritable;
|
||||||
|
|
||||||
import com.cloudera.sqoop.mapreduce.db.DBInputFormat.NullDBWritable;
|
import com.cloudera.sqoop.mapreduce.db.DBInputFormat.NullDBWritable;
|
||||||
import com.cloudera.sqoop.mapreduce.db.DBOutputFormat;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A container for configuration property names for jobs with DB input/output.
|
* A container for configuration property names for jobs with DB input/output.
|
||||||
|
@ -31,6 +31,9 @@
|
|||||||
import com.cloudera.sqoop.mapreduce.db.DBSplitter;
|
import com.cloudera.sqoop.mapreduce.db.DBSplitter;
|
||||||
import com.cloudera.sqoop.mapreduce.db.DataDrivenDBInputFormat;
|
import com.cloudera.sqoop.mapreduce.db.DataDrivenDBInputFormat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implement DBSplitter over floating-point values.
|
||||||
|
*/
|
||||||
public class FloatSplitter implements DBSplitter {
|
public class FloatSplitter implements DBSplitter {
|
||||||
|
|
||||||
private static final Log LOG = LogFactory.getLog(FloatSplitter.class);
|
private static final Log LOG = LogFactory.getLog(FloatSplitter.class);
|
||||||
|
@ -113,7 +113,7 @@ public List<InputSplit> split(Configuration conf, ResultSet results,
|
|||||||
* [8, 12)
|
* [8, 12)
|
||||||
* [12, 18] note the closed interval for the last split.
|
* [12, 18] note the closed interval for the last split.
|
||||||
*/
|
*/
|
||||||
protected List<Long> split(long numSplits, long minVal, long maxVal)
|
public List<Long> split(long numSplits, long minVal, long maxVal)
|
||||||
throws SQLException {
|
throws SQLException {
|
||||||
|
|
||||||
List<Long> splits = new ArrayList<Long>();
|
List<Long> splits = new ArrayList<Long>();
|
||||||
|
@ -142,7 +142,7 @@ public List<InputSplit> split(Configuration conf, ResultSet results,
|
|||||||
return splits;
|
return splits;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected List<String> split(int numSplits, String minString,
|
public List<String> split(int numSplits, String minString,
|
||||||
String maxString, String commonPrefix) throws SQLException {
|
String maxString, String commonPrefix) throws SQLException {
|
||||||
|
|
||||||
BigDecimal minVal = stringToBigDecimal(minString);
|
BigDecimal minVal = stringToBigDecimal(minString);
|
||||||
@ -183,7 +183,7 @@ protected List<String> split(int numSplits, String minString,
|
|||||||
* Return a BigDecimal representation of string 'str' suitable for use in a
|
* Return a BigDecimal representation of string 'str' suitable for use in a
|
||||||
* numerically-sorting order.
|
* numerically-sorting order.
|
||||||
*/
|
*/
|
||||||
protected BigDecimal stringToBigDecimal(String str) {
|
public BigDecimal stringToBigDecimal(String str) {
|
||||||
// Start with 1/65536 to compute the first digit.
|
// Start with 1/65536 to compute the first digit.
|
||||||
BigDecimal curPlace = ONE_PLACE;
|
BigDecimal curPlace = ONE_PLACE;
|
||||||
BigDecimal result = BigDecimal.ZERO;
|
BigDecimal result = BigDecimal.ZERO;
|
||||||
@ -208,7 +208,7 @@ protected BigDecimal stringToBigDecimal(String str) {
|
|||||||
* Convert that back into a char and create a string out of these until we
|
* Convert that back into a char and create a string out of these until we
|
||||||
* have no data left.
|
* have no data left.
|
||||||
*/
|
*/
|
||||||
protected String bigDecimalToString(BigDecimal bd) {
|
public String bigDecimalToString(BigDecimal bd) {
|
||||||
BigDecimal cur = bd.stripTrailingZeros();
|
BigDecimal cur = bd.stripTrailingZeros();
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
* JobStorage implementation that auto-configures an HSQLDB
|
* JobStorage implementation that auto-configures an HSQLDB
|
||||||
* local-file-based instance to hold jobs.
|
* local-file-based instance to hold jobs.
|
||||||
*/
|
*/
|
||||||
public class AutoHsqldbStorage
|
public class AutoHsqldbStorage
|
||||||
extends com.cloudera.sqoop.metastore.hsqldb.HsqldbJobStorage {
|
extends com.cloudera.sqoop.metastore.hsqldb.HsqldbJobStorage {
|
||||||
|
|
||||||
public static final Log LOG = LogFactory.getLog(
|
public static final Log LOG = LogFactory.getLog(
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright 2011 The Apache Software Foundation
|
|
||||||
*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
* or more contributor license agreements. See the NOTICE file
|
* or more contributor license agreements. See the NOTICE file
|
||||||
* distributed with this work for additional information
|
* distributed with this work for additional information
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user