【发布时间】:2014-07-25 19:11:11
【问题描述】:
我已经在我的 osx 10.9 的 mac 上安装并运行了 hadoop / hbase / hive / (可以在 hdfs 上创建文件,运行 map reduce 作业,在 hbase 和 hive 中创建一个“表”)。我现在正在尝试将数据从 mysql 表导入 sqoop(使用查询,而不是表名等)。我收到此命令时出现此错误。
--COMMAND
sqoop import --connect jdbc:mysql:///joshLocal --username root --query "SELECT * FROM BITLOG WHERE \$CONDITIONS" --split-by oozie_job.id --hbase-table bitlogTest --hbase-create- table --column-family bitLogColumn
--ERROR
ERROR tool.ImportTool: Error during import: HBase jars are not present in classpath, cannot import to HBase!
我相信所有导出变量都已正确设置。我在 swoop-env.sh 中有以下内容
export HADOOP_HOME="/usr/local/Cellar/hadoop/2.4.0"
export HBASE_HOME="/usr/local/Cellar/hbase/0.98.1"
export HIVE_HOME="/usr/local/Cellar/hive/0.13.0"
export ZOOCFGDIR="/usr/local/etc/zookeeper"
export HCAT_HOME="/usr/local/Cellar/hive/0.13.0/libexec/hcatalog"
我做的一件事给出了不同的信息,就是将 hbase home 更改为指向 swoop-env.sh 中的 HBASE_HOME/libexec/lib。这给了我一个
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/util/Tool
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
错误。我看到了一些建议,说我需要将 hadoop 安全 jar 文件复制到 hbase 的安装中。我不完全知道需要检查哪些文件,以及这是否是一个问题。我认为这可能是因为 java.security.SecureClassLoader 在堆栈跟踪中。
如果这是一个非常基本的 java 问题,我很抱歉,但我完全是新手。
另一个更基本的 java 问题。当我们定义 HADOOP_HOME HBASE_HOME 等时,我们在“告诉”其他依赖该信息的 Java 程序什么。我们是说“这是可执行的 java 文件”还是说“这是 lib 文件夹中的 jar 文件”。我不太明白我实际上应该指向什么,因为我不知道该路径是如何使用的。
UPDATE-1:尝试将我在 sqoop 导入中的连接字符串更改为我在 mysql 中创建的新用户 (sqoop@192.168.1.5)。对 sqoop 的新调用是
sqoop import --connect jdbc:mysql://wolfs-MacBook-Pro.local:3306/joshLocal --username sqoop --password sqoop --query "SELECT * FROM BITLOG WHERE \$CONDITIONS" --split-by oozie_job.id --hbase-table bitlogTest --hbase-create-table --column-family bitLogColumn
和以前一样的错误。 HBase jar 不存在。此外,我创建了一些带有“列”的基本“表”,这些“表”与我的 sqoop 请求相匹配,认为这可能是问题的一部分。
UPDATE-2:将 swoop-env.sh 配置中的导出路径更新为
export HADOOP_HOME="/usr/local/Cellar/hadoop/2.4.0"
export HBASE_HOME="/usr/local/Cellar/hbase/0.98.1/libexec"
export HIVE_HOME="/usr/local/Cellar/hive/0.13.0/libexec"
export ZOOCFGDIR="/usr/local/etc/zookeeper"
export HCAT_HOME="/usr/local/Cellar/hive/0.13.0/libexec/hcatalog"
现在我遇到了这个错误
Exception in thread "main" java.util.ServiceConfigurationError: org.apache.hadoop.fs.FileSystem: Provider org.apache.hadoop.hdfs.DistributedFileSystem could not be instantiated: java.lang.NoSuchMethodError: org.apache.hadoop.conf.Configuration.addDeprecations([Lorg/apache/hadoop/conf/Configuration$De precationDelta;)V
at java.util.ServiceLoader.fail(ServiceLoader.java:207)
at java.util.ServiceLoader.access$100(ServiceLoader.java:164)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:360)
at java.util.ServiceLoader$1.n
UPDATE 3 将 sqoop env 文件中 hadoop 的导出路径更新为
export HADOOP_HOME="/usr/local/Cellar/hadoop/2.4.0/libexec"
越来越近了!导入作业创建了 hbase 表,但其中没有任何信息。我现在收到此错误。
jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
Exception in thread "main" java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected
at org.apache.sqoop.mapreduce.DelegatingOutputFormat.checkOutputSpecs(DelegatingOutputFormat.java:63)
at org.apache.hadoop.mapreduce.JobSubmitter.checkSpecs(JobSubmitter.java:458)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:343)
顺便说一句 - 我正在运行 sqoop 1.4.4
【问题讨论】:
标签: mysql hadoop import hbase sqoop