1. 程式人生 > >自定義物件的mysql輸出

自定義物件的mysql輸出

1、首先,自定義物件,該物件需要實現序列化功能才可以在網路上執行,實現序列化功能需要繼承 java.io.Serializable 這個介面,
這個介面定義了空方法,不需要實現任何功能,表示具有序列化功能的一個空介面
不過需要定義一個序列號,例如如下:
 private static final long serialVersionUID = 1L;

    然而,hadoop中關於序列化物件的方法有一個需要實現readFields(ResultSet resultSet)和write(PreparedStatement preparedStatement)的
介面DBWritable,實現了該介面的物件方可在reducer和mapper中進行物件的儲存。
例如:
    @Override
    public void write(PreparedStatement preparedStatement) throws SQLException {
        preparedStatement.setString(1, time);
        preparedStatement.setInt(2, sum);
        preparedStatement.setInt(3, workSum);
        preparedStatement.setDouble(4, rate);
    }

    @Override
    public void readFields(ResultSet resultSet) throws SQLException {
        resultSet.getString(1);
        resultSet.getInt(2);
        resultSet.getInt(3);
        resultSet.getDouble(4);
    }
2、定義輸出型別為實現了序列化的型別
3、配置Job的輸出型別
    先建立連線,配置資料庫的驅動位置
                配置資料庫的url位置
                配置資料庫的賬戶和密碼
        config.set(DBConfiguration.DRIVER_CLASS_PROPERTY,"com.mysql.jdbc.Driver");
        config.set(DBConfiguration.URL_PROPERTY,"jdbc:mysql://localhost:3306/test");
        config.set(DBConfiguration.USERNAME_PROPERTY, "root");
        config.set(DBConfiguration.PASSWORD_PROPERTY, "111111");
配置輸出的資料表以及其中的內容,如下格式:    
        DBOutputFormat.setOutput(job_name, table_name, attribute_name1, attribute_name2, attribute_name3....);
        如下例子:
        DBOutputFormat.setOutput(job, "t_car", "time",  "sum", "work_sum", "rate");