Sqoop:无法加载mysql驱动程序异常

时间:2014-03-30 06:53:47

标签: mysql hadoop hive sqoop

我在本地机器上安装了Sqoop。以下是配置信息。

Bash.bashrc:

export HADOOP_HOME=/home/hduser/hadoop
export HBASE_HOME=/home/hduser/hbase
export HIVE_HOME=/home/hduser/hive
export HCAT_HOME=/home/hduser/hive/hcatalog
export SQOOP_HOME=/home/hduser/sqoop

export PATH=$PATH:$HIVE_HOME/bin
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HBASE_HOME/bin
export PATH=$PATH:$SQOOP_HOME/bin
export PATH=$PATH:$HCAT_HOME/bin

Hadoop的:

Version: Hadoop 1.0.3

蜂巢:

Version: hive 0.11.0 

Mysql Connector驱动程序

version: mysql-connector-java-5.1.29

"The driver is copied to the lib folder of sqoop"

Sqoop:

version: sqoop 1.4.4

完成所有安装后,我在名为practice_1的mysql中创建了一个表,但是当我运行load命令将数据从mysql加载到hdfs时,该命令会引发异常:

ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.RuntimeException: Could not     load db driver class: com.mysql.jdbc.Driver

Coud有人请指导我可能出现的问题。

7 个答案:

答案 0 :(得分:13)

你需要在SQOOP'中使用数据库驱动程序。 classpath check this 它有关于SQOOP'

的精彩解释

SQOOP还有其他选项,例如

  

Ex: - driver com.microsoft.jdbc.sqlserver.SQLServerDriver -libjars ="。* jar"

来自here

  

您可以将Sqoop与任何其他符合JDBC的数据库一起使用。首先,为要导入的数据库类型下载相应的JDBC驱动程序,然后将.jar文件安装在客户端计算机上的$ SQOOP_HOME / lib目录中。 (如果您是从RPM或Debian软件包安装的,那么这将是/ usr / lib / sqoop / lib。)每个驱动程序.jar文件还有一个特定的驱动程序类,它定义了驱动程序的入口点。例如,MySQL的Connector / J库的驱动程序类为com.mysql.jdbc.Driver。请参阅数据库供应商特定的文档以确定主驱动程序类。必须使用--driver。

将此类作为Sqoop的参数提供

您可能有兴趣了解连接器和驱动程序之间的区别here是文章

答案 1 :(得分:6)

另一种避免使用共享库的解决方案是使用HADOOP_CLASSPATH将驱动程序jar添加到sqoop的类路径中。我没有--libjars选项可以工作。此解决方案也适用于使用kerberos的安全集群。

HADOOP_CLASSPATH=/use.case/lib/postgresql-9.2-1003-jdbc4.jar
sqoop export --connect jdbc:postgresql://db:5432/user \
  --driver org.postgresql.Driver \
  --connection-manager org.apache.sqoop.manager.GenericJdbcManager \
  --username user \
  -P \
  --export-dir /user/hive/warehouse/db1/table1 \
  --table table2

这个至少适用于sqoop 1.4.3-cdh4.4.0

答案 2 :(得分:2)

您需要将MySql连接器添加到/ usr / lib / sqoop / lib。 默认情况下,MySQL JDBC驱动程序不存在于Sqoop发行版中,以确保默认发行版完全符合Apache许可证。 希望这有助于...... !!!

答案 3 :(得分:0)

如果您已将mysql驱动程序复制到sqoop lib文件夹。它肯定会起作用。确保sqoop命令正确

/home/hduser/sqoop/bin/sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password root -–table practice_1 -m 1

答案 4 :(得分:0)

将'mysql-connector-java-5.1.41-bin.jar'复制到sqoop / lib文件夹并执行sqoop import语句

答案 5 :(得分:0)

这是Oozie ShareLib问题。以下脚本适用于我:

在壳牌公司

sudo -u hdfs hadoop fs -chown cloudera:cloudera /user/oozie/share/lib/lib_20170719053712/sqoop
hdfs dfs -put /var/lib/sqoop/mysql-connector-java.jar /user/oozie/share/lib/lib_20170719053712/sqoop
sudo -u hdfs hadoop fs -chown oozie:oozie /user/oozie/share/lib/lib_20170719053712/sqoop

oozie admin -oozie http://localhost:11000/oozie -sharelibupdate
oozie admin -oozie http://localhost:11000/oozie -shareliblist sqoop

在Hue Sqoop客户处

sqoop list-tables --connect jdbc:mysql://localhost/retail_db --username root --password cloudera

更多详细信息,位于:

https://blog.cloudera.com/blog/2014/05/how-to-use-the-sharelib-in-apache-oozie-cdh-5/

答案 6 :(得分:-3)

您需要将priveleges授予表格,如下所示:

  

授予标记表上的所有权限。*至'root'@'192.168.168.1'   由'root123'标识;

     

刷新权限;

这是我成功执行的示例命令:

  

sqoop import --verbose --fields-terminated-by',' - connect   jdbc:mysql://192.168.168.1/test --username root --password root123        - 表学生--hive-import --create-hive-table --hive-home / home / training / hive --warehouse-dir / user / hive / warehouse       --fields-terminated-by', - --hive-table studentmysql