【问题标题】:import mysql query to hbase using sqoop使用 sqoop 将 mysql 查询导入 hbase
【发布时间】: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


    【解决方案1】:

    您需要确保您使用的 Sqoop 版本与您选择的 hadoop 版本兼容,对于不同版本的 Hbase + Hadoop,您会获得不同的 Sqoop 可执行文件/jar

    【讨论】:

      猜你喜欢
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多