0

我正在使用带有最新版本的 Sqoop2 (1.99.7) 的 Hadoop 进行测试,并且在运行 sqoop2-server 时,出现以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration
at org.apache.sqoop.security.authentication.SimpleAuthenticationHandler.secureLogin(SimpleAuthenticationHandler.java:36)
at org.apache.sqoop.security.AuthenticationManager.initialize(AuthenticationManager.java:98)
at org.apache.sqoop.core.SqoopServer.initialize(SqoopServer.java:57)
at org.apache.sqoop.server.SqoopJettyServer.<init>(SqoopJettyServer.java:67)
at org.apache.sqoop.server.SqoopJettyServer.main(SqoopJettyServer.java:177)

Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.conf.Configuration
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        ... 5 more

我目前的设置:

我能想到的最好的结果是 Sqoop 没有加载 Hadoop 类路径,因为所需的 JAR 似乎位于 /usr/local/hadoop/shared/*。

我能在网上找到的大部分文档都是针对 1.99.7 之前的版本,但是这个版本的一个主要变化是 Sqoop 服务器从 Tomcat 迁移到了 Jetty,所以所有的 catalina 配置选项都没有实际意义。

有人可以帮我弄清楚如何让 Sqoop 服务器运行吗?

4

1 回答 1

2

啊,大部分都想通了。

看起来 sqoop.sh 脚本根据设置的环境变量从类路径加载所有 jar。docker 容器将它正在寻找的所有环境变量设置为 Hadoop 安装的根路径,而脚本期望它们指向包含 JAR 文件的目录。

HADOOP_PREFIX=/usr/local/hadoop
HADOOP_HDFS_HOME=/usr/local/hadoop
HADOOP_COMMON_HOME=/usr/local/hadoop
HADOOP_YARN_HOME=/usr/local/hadoop
HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
HADOOP_MAPRED_HOME=/usr/local/hadoop

所以脚本选择这个目录而不是 $HADOOP_HOME 目录和脚本中调用的后续子目录。

最后一步是编辑 sqoop.properties 文件并确保将 mapreduce 配置设置为正确的目录:

org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/usr/local/hadoop/etc/hadoop

然后服务器启动了!

我会把这个留在这里,以防其他人遇到这个......

于 2016-11-23T22:22:20.013 回答