2017-06-15 13 views
0

私はHadoop-1.2.1とSqoop-1.4.6を使用しています。それはこのエラーを示し、Sqoopを使用してmysqlからHDFSにデータをインポート

`sqoop import --connect jdbc:mysql://localhost/meshtree --username user --password password --table test` 

:しかし

17/06/17 18:15:21 WARN tool.BaseSqoopTool: Setting your password on the  command-line is insecure. Consider using -P instead. 
17/06/17 18:15:21 INFO manager.MySQLManager: Preparing to use a MySQL  streaming resultset. 
17/06/17 18:15:21 INFO tool.CodeGenTool: Beginning code generation 
17/06/17 18:15:22 INFO manager.SqlManager: Executing SQL statement: SELECT  t.* FROM `test` AS t LIMIT 1 
17/06/17 18:15:22 INFO orm.CompilationManager: HADOOP_HOME is /home/student /Installations/hadoop-1.2.1/libexec/.. 
Note: /tmp/sqoop-student/compile/6bab6efaa3dc60e67a50885b26c1d14b/test.java  uses or overrides a deprecated API. 
Note: Recompile with -Xlint:deprecation for details. 
17/06/17 18:15:24 ERROR orm.CompilationManager: Could not rename /tmp/sqoop- student/compile/6bab6efaa3dc60e67a50885b26c1d14b/test.java to /home/student /Installations/hadoop-1.2.1/./test.java 
org.apache.commons.io.FileExistsException: Destination '/home/student /Installations/hadoop-1.2.1/./test.java' already exists 
at org.apache.commons.io.FileUtils.moveFile(FileUtils.java:2378) 
at  org.apache.sqoop.orm.CompilationManager.compile(CompilationManager.java:227) 
at org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:83) 
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:367) 
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:453) 
at org.apache.sqoop.Sqoop.run(Sqoop.java:145) 
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65) 
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:181) 
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:220) 
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:229) 
at org.apache.sqoop.Sqoop.main(Sqoop.java:238) 
at com.cloudera.sqoop.Sqoop.main(Sqoop.java:57) 
17/06/17 18:15:24 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop- student/compile/6bab6efaa3dc60e67a50885b26c1d14b/test.jar 
17/06/17 18:15:24 WARN manager.MySQLManager: It looks like you are importing  from mysql. 
17/06/17 18:15:24 WARN manager.MySQLManager: This transfer can be faster! Use  the --direct 
17/06/17 18:15:24 WARN manager.MySQLManager: option to exercise a MySQL- specific fast path. 
17/06/17 18:15:24 INFO manager.MySQLManager: Setting zero DATETIME behavior  to convertToNull (mysql) 
17/06/17 18:15:24 INFO mapreduce.ImportJobBase: Beginning import of test 
17/06/17 18:15:27 INFO mapred.JobClient: Cleaning up the staging area  hdfs://localhost:9000/home/student/Installations/hadoop-1.2.1/data/mapred /staging/student/.staging/job_201706171814_0001 
17/06/17 18:15:27 ERROR security.UserGroupInformation:  PriviledgedActionException as:student  cause:org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory  test already exists 
17/06/17 18:15:27 ERROR tool.ImportTool: Encountered IOException running  import job: org.apache.hadoop.mapred.FileAlreadyExistsException: Output  directory test already exists 
at  org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.checkOutputSpecs(FileO utputFormat.java:137) 
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:973) 
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:936) 
at java.security.AccessController.doPrivileged(Native Method) 
at javax.security.auth.Subject.doAs(Subject.java:415) 
at  org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190) 
at  org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:936) 
at org.apache.hadoop.mapreduce.Job.submit(Job.java:550) 
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:580) 
at org.apache.sqoop.mapreduce.ImportJobBase.runJob(ImportJobBase.java:141) 
at  org.apache.sqoop.mapreduce.ImportJobBase.runImport(ImportJobBase.java:201) 
at org.apache.sqoop.manager.SqlManager.importTable(SqlManager.java:413) 
at org.apache.sqoop.manager.MySQLManager.importTable(MySQLManager.java:97) 
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:380) 
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:453) 
at org.apache.sqoop.Sqoop.run(Sqoop.java:145) 
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65) 
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:181) 
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:220) 
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:229) 
at org.apache.sqoop.Sqoop.main(Sqoop.java:238) 
at com.cloudera.sqoop.Sqoop.main(Sqoop.java:57) 

は、この問題を把握する方法はあります私は、このコマンドを使用してHDFSにデータベースmeshtreeからテーブルtestをインポートするsqoopを使用していますか?

答えて

0
  • hdfsのターゲットディレクトリを指定せずにインポートしています。 sqoopでターゲットディレクトリを指定していない場合は、一度だけインポートを実行し、は、mysqlテーブル名でhdfsにディレクトリを作成します。

So your query

sqoop import --connect jdbc:mysql://localhost/meshtree --username user --password password --table test

this create a directory with the name test1 in hdfs

  • ただ、次のスクリプトを追加

sqoop import --connect jdbc:mysql://localhost/meshtree --username user --password password --table test --target-dir test1

完全にその作業罰金を願っていますし、ちょうどを参照してください。

1

分散HadoopクラスタでSqoopを使用する場合は、URLローカルホストを使用しないことが重要です。あなたが提供する接続文字列は、MapReduceクラスタ全体のTaskTrackerノードで使用されます。リテラル名localhostを指定した場合、各ノードは異なるデータベースに接続します(データベースがない可能性もあります)。 代わりに、すべてのリモートノードが見ることのできるデータベースホストの完全なホスト名またはIPアドレスを使用する必要があります

詳細については、Sqoop文書Connecting to a Database Serverを参照してください。

+0

ありがとうございます。私はSqoopドキュメントを読んで、とても役に立ち、以前のエラーは解決されました。しかし、別のエラーが表示されます。それを解決するために私を助けてもらえますか?エラー: 'スレッド内の例外 "メイン" java.lang.IncompatibleClassChangeError:クラスorg.apache.hadoop.mapreduce.JobContextが見つかりましたが、インターフェースが期待されました \t at org.apache.sqoop.config.ConfigurationHelper.getJobNumMaps(ConfigurationHelper.java :65) ' – Christine

+0

あなたはHadoop 1.xを使っていますが、あなたのSqoopはHadoop 2.xでコンパイルされているようです。 Hadoop 1.xでSqoopをコンパイルしてください。Hadoop 1.xと互換性のあるSqoopの下位バージョンをダウンロードしてください。 –

+0

返信いただきありがとうございます。下位バージョンのsqoop(sqoop-1.4.1)をダウンロードしようとしました。しかし、それはまだ私と一緒には動作しません。'ERROR security.UserGroupInformation:PriviledgedActionException:接続が拒否されました エラーtool.ImportTool:インポート実行中のIOException:接続が拒否されました' – Christine

1

権限がありません。myql​​ dbaに連絡して、同じ権限を付与してください。 または、mysqlへの管理者アクセス権を持っている場合は、自分で行うことができます。すべてのテーブル %-for

grant all privileges on databasename.* to 'username'@'%' identified by 'password'; 

* - 上記の構文は、それはなりますあなたのケースをserver.Inのmysqlでユーザに権限を付与することで任意のホスト

から許可: -

grant all privileges on meshtree.test to 'root'@'localhost' identified by 'yourpassword'; 
+0

ありがとうございます。 sqoop importコマンドを使用してデータを再度インポートしようとすると、別のエラーが表示されます。 'スレッド内の例外 "main" java.lang.IncompatibleClassChangeError:クラスが見つかりましたが、org.apache.hadoop.mapreduce.JobContextが見つかりましたが、インタフェースが期待されました \t at org.apache.sqoop.config.ConfigurationHelper.getJobNumMaps(ConfigurationHelper.java:65) 'このエラーを解決するのに手伝ってもらえますか? – Christine

+0

アクセス権拒否エラーを解決した権限を付与しましたか? – TKHN

+0

@Christine Incompitableクラス変更エラーは、SqoopのバージョンがHadoopリリースと一致しないことを示します。使用しているhadoopリリースと一致するSQOOP VERSIONを使用してください。 – TKHN

関連する問題