我正在使用最新版本的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服务器运行吗?
答案 0 :(得分: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
然后服务器启动了!
我会把这个留在这里以防万一其他人遇到这个......