Я пытаюсь использовать Sqoop 2 для импорта данных из базы данных MySQL в HDFS, в основном следуя инструкциям здесь. Однако сервер Sqoop не может подключиться к базе данных MySQL из-за того, что не найдены соответствующие драйверы.
Настраивать:
Вот некоторая предыстория моей установки:
Кластер Hadoop: у меня есть кластер Hadoop из трех машин, на котором работает CDH 4.4.0. Sqoop 2 был настроен через Cloudera Manager и работает на том же компьютере, что и Namenode. Я разрабатываю на компьютере с Windows, где также находится моя база данных MySQL. Кластер Hadoop представляет собой набор из трех машин Ubuntu Server.
База данных MySQL: у меня есть база данных MySQL, работающая на моей машине с Windows, и я проверил, что к базе данных MySQL можно получить доступ с каждой из машин в моем кластере Hadoop.
Клиентское приложение. Мое клиентское приложение представляет собой проект Eclipse на моем компьютере с Windows, который в основном открывает клиент Sqoop, соответствующий серверу Sqoop (я проверил, что сервер и клиент Sqoop работают на моем Namenode).
Вот основной класс моего клиентского приложения.
package com.fc.SqoopImport;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.sqoop.client.*;
import org.apache.sqoop.*;
import org.apache.sqoop.common.*;
import org.apache.sqoop.model.*;
import org.apache.sqoop.validation.Status;
import com.mysql.jdbc.*;
public class SqoopImport {
// utlity function to cycle through the connector and framework forms for errors
private static void printMessage(List<MForm> formList) {
for(MForm form : formList) {
List<MInput<?>> inputlist = form.getInputs();
if (form.getValidationMessage() != null) {
System.out.println("Form message: " + form.getValidationMessage());
}
for (MInput minput : inputlist) {
if (minput.getValidationStatus() == Status.ACCEPTABLE) {
System.out.println("Warning:" + minput.getValidationMessage());
} else if (minput.getValidationStatus() == Status.UNACCEPTABLE) {
System.out.println("Error:" + minput.getValidationMessage());
}
}
}
}
public static void main(String[] args) throws Exception {
String driver = "com.mysql.jdbc.Driver";
Class.forName(driver);
// location of the server running Sqoop 2 server
String urlSqoop2Server = "http://fc-01.fc.com:12000/sqoop/";
SqoopClient clientSqoop2 = new SqoopClient(urlSqoop2Server);
// dummy connection object
MConnection sqoopConnSAP = clientSqoop2.newConnection(1);
MConnectionForms sqoopConnSAPFrameworkForm = sqoopConnSAP.getFrameworkPart();
MConnectionForms sqoopConnSAPConnForm = sqoopConnSAP.getConnectorPart();
sqoopConnSAP.setName("SqoopConnSAP");
// Set the values for the connection form
sqoopConnSAPConnForm.getStringInput("connection.connectionString").setValue("jdbc:mysql://192.168.31.172:3306/dbsap");
sqoopConnSAPConnForm.getStringInput("connection.jdbcDriver").setValue("com.mysql.jdbc.Driver");
sqoopConnSAPConnForm.getStringInput("connection.username").setValue("root");
sqoopConnSAPConnForm.getStringInput("connection.password").setValue("1234");
sqoopConnSAPFrameworkForm.getIntegerInput("security.maxConnections").setValue(10);
Status statusConnSAP = clientSqoop2.createConnection(sqoopConnSAP);
if(statusConnSAP.canProceed()) {
System.out.println("Created. New connection ID: " + sqoopConnSAP.getPersistenceId());
} else {
System.out.println("Check for status and forms errors.");
printMessage(sqoopConnSAP.getConnectorPart().getForms());
printMessage(sqoopConnSAP.getFrameworkPart().getForms());
}
}
}
Ошибка:
Запуск этого проекта дает следующую ошибку:
Check for status and forms errors.
Form message: Can't connect to the database with given credentials: No suitable driver found for jdbc:mysql:192.168.31.172:3306/dbsap
Error:Can't load specified driver
Диагноз:
Соответствующие драйверы JDBC (mysql-connector-java-5.1.26-bin.jar
) являются частью моего проекта Eclipse, и на всякий случай я добавил их в папку библиотеки sqoop2.
/opt/cloudera/parcels/CDH-4.4.0-1.cdh4.4.0.p0.39/lib/sqoop2/client-lib
также. Однако это та часть, в которой я не уверен, поскольку в документации CDH4 говорится]1 что в случае, если Sqoop был установлен с помощью Cloudera Manager, местоположение соответствующего драйвера JDBC следует добавить в HADOOP_CLASSPATH
. Так я и сделал
export HADOOP_CLASSPATH=/usr/lib/jdbcJars:HADOOP_CLASSPATH;
на моем Hadoop Namenode, так что эхо $HADOOP_CLASSPATH
дает /usr/lib/jdbcJars
. Опять же, я не совсем уверен в полезности этого, поскольку мое клиентское приложение не разрабатывается в кластере Hadoop.
Последнее, что я еще не пробовал, — это создание нового каталога /usr/lib/sqoop/lib
и добавление туда драйвера JDBC.
Любая помощь в выяснении этого будет оценена по достоинству.
com/mysql/jdbc/Driver.class
. Убедитесь, что он содержит этот файл. - person Robin Green   schedule 27.10.2013src
для банки, и она содержит файлDriver.java
. Будет ли это делать? - person tchakravarty   schedule 27.10.2013