从 cascalog 写入 MySQL 不起作用。如何调试这个?
Writing from cascalog to MySQL does not work. How to debug this?
我正在尝试将级联查询的结果写入 MySQL- 数据库。为此,我使用 cascading-jdbc and following an example i found here。我在 3.0.0
.
版本中使用 cascading-jdbc-core
和 cascading-jdbc-mysql
我正在从我的 REPL 中执行这段代码:
(let [data [["foo1" "bar1"]
["foo2" "bar2"]]
query-params (into-array String ["?col1" "?col2"])
column-names (into-array String ["col1" "col2"])
update-params (into-array String ["?col1"])
update-column-names (into-array String ["col1"])
jdbc-tap (fn []
(let [scheme (JDBCScheme.
(Fields. query-params)
column-names
nil
(Fields. update-params)
update-column-names)
table-desc (TableDesc.
"test_table"
query-params
column-names
(into-array String []))
tap (JDBCTap.
"jdbc:mysql://192.168.99.101:3306/test_db?user=root&password=my-secret-pw"
"com.mysql.jdbc.Driver"
table-desc
scheme)]
tap))]
(?<- (jdbc-tap)
[?col1 ?col2]
(data ?col1 ?col2)))
当我 运行 代码时,我在 REPL 中看到这些日志:
15/12/11 11:08:44 INFO hadoop.FlowMapper: sinking to: JDBCTap{connectionUrl='jdbc:mysql://192.168.99.101:3306/test_db?user=root&password=my-secret-pw', driverClassName='com.mysql.jdbc.Driver', tableDesc=TableDesc{tableName='test_table', columnNames=[?col1, ?col2], columnDefs=[col1, col2], primaryKeys=[]}}
15/12/11 11:08:44 INFO mapred.Task: Task:attempt_local1324562503_0006_m_000000_0 is done. And is in the process of commiting
15/12/11 11:08:44 INFO mapred.LocalJobRunner:
15/12/11 11:08:44 INFO mapred.Task: Task 'attempt_local1324562503_0006_m_000000_0' done.
15/12/11 11:08:44 INFO mapred.LocalJobRunner: Finishing task: attempt_local1324562503_0006_m_000000_0
15/12/11 11:08:44 INFO mapred.LocalJobRunner: Map task executor complete.
一切看起来都很好。然而,没有数据被写入。我检查 tcpdump
甚至没有与我的本地 MySQL 数据库建立连接。此外,当我将 JDBC-connection-string 更改为明显错误的值(不存在的用户名、不存在的数据库名称甚至不存在的数据库服务器 IP)时,我得到了相同的结果不抱怨任何事情的日志。
此外,将 jdbc-tap
更改为 stdout
会产生预期值。
我完全不知道如何调试它。是否有可能产生错误输出?现在,我不知道出了什么问题。
事实证明,我使用了错误版本的 cascading-jdbc
。 Cascalog 2.1.1
正在使用级联 2.5.3
。切换到 2.5
版本解决了这个问题。
虽然我无法从错误消息中看到这一点(因为有 none)。 cascading-jdbc
的一位开发者非常友好 point this out 对我。
我正在尝试将级联查询的结果写入 MySQL- 数据库。为此,我使用 cascading-jdbc and following an example i found here。我在 3.0.0
.
cascading-jdbc-core
和 cascading-jdbc-mysql
我正在从我的 REPL 中执行这段代码:
(let [data [["foo1" "bar1"]
["foo2" "bar2"]]
query-params (into-array String ["?col1" "?col2"])
column-names (into-array String ["col1" "col2"])
update-params (into-array String ["?col1"])
update-column-names (into-array String ["col1"])
jdbc-tap (fn []
(let [scheme (JDBCScheme.
(Fields. query-params)
column-names
nil
(Fields. update-params)
update-column-names)
table-desc (TableDesc.
"test_table"
query-params
column-names
(into-array String []))
tap (JDBCTap.
"jdbc:mysql://192.168.99.101:3306/test_db?user=root&password=my-secret-pw"
"com.mysql.jdbc.Driver"
table-desc
scheme)]
tap))]
(?<- (jdbc-tap)
[?col1 ?col2]
(data ?col1 ?col2)))
当我 运行 代码时,我在 REPL 中看到这些日志:
15/12/11 11:08:44 INFO hadoop.FlowMapper: sinking to: JDBCTap{connectionUrl='jdbc:mysql://192.168.99.101:3306/test_db?user=root&password=my-secret-pw', driverClassName='com.mysql.jdbc.Driver', tableDesc=TableDesc{tableName='test_table', columnNames=[?col1, ?col2], columnDefs=[col1, col2], primaryKeys=[]}}
15/12/11 11:08:44 INFO mapred.Task: Task:attempt_local1324562503_0006_m_000000_0 is done. And is in the process of commiting
15/12/11 11:08:44 INFO mapred.LocalJobRunner:
15/12/11 11:08:44 INFO mapred.Task: Task 'attempt_local1324562503_0006_m_000000_0' done.
15/12/11 11:08:44 INFO mapred.LocalJobRunner: Finishing task: attempt_local1324562503_0006_m_000000_0
15/12/11 11:08:44 INFO mapred.LocalJobRunner: Map task executor complete.
一切看起来都很好。然而,没有数据被写入。我检查 tcpdump
甚至没有与我的本地 MySQL 数据库建立连接。此外,当我将 JDBC-connection-string 更改为明显错误的值(不存在的用户名、不存在的数据库名称甚至不存在的数据库服务器 IP)时,我得到了相同的结果不抱怨任何事情的日志。
此外,将 jdbc-tap
更改为 stdout
会产生预期值。
我完全不知道如何调试它。是否有可能产生错误输出?现在,我不知道出了什么问题。
事实证明,我使用了错误版本的 cascading-jdbc
。 Cascalog 2.1.1
正在使用级联 2.5.3
。切换到 2.5
版本解决了这个问题。
虽然我无法从错误消息中看到这一点(因为有 none)。 cascading-jdbc
的一位开发者非常友好 point this out 对我。