是否可以直接从hdfs导出csv文件数据到mysql或者有其他方法可以使用,请你给我清楚。如果有其他方法可以给我样例代码
答案 0 :(得分:2)
使用Apache Sqoop可以很容易地实现这一点。我建议您从用户指南中的export chapter开始。
答案 1 :(得分:1)
bin/sqoop export \
--connect jdbc:mysql://localhost/hadoop \
--username dbuser \
--export-dir hdfs/dir/path \
--table <db_table>
如果数据是制表符分隔的:
bin/sqoop export \
--connect jdbc:mysql://localhost/hadoop \
--username dbuser \
--export-dir hdfs/dir/path \
--table <db_table> \
--fields-terminated-by '\t'
答案 2 :(得分:0)
如果您需要从oozie执行此操作,请使用子工作流程调用工作流程:
<workflow-app name="export_to_db" xmlns="uri:oozie:workflow:0.3">
<start to="init-table"/>
<action name="init-table">
<sqoop xmlns="uri:oozie:sqoop-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<arg>eval</arg>
<arg>--driver</arg>
<arg>${jdbcDriver}</arg>
<arg>--connect</arg>
<arg>${jdbcUrl}</arg>
<arg>--username</arg>
<arg>${dbUser}</arg>
<arg>--password</arg>
<arg>${dbPassword}</arg>
<arg>--query</arg>
<arg>${createTableSql}</arg>
</sqoop>
<ok to="export2db"/>
<error to="kill"/>
</action>
<action name="export2db">
<sqoop xmlns="uri:oozie:sqoop-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<arg>export</arg>
<arg>-Dsqoop.export.statements.per.transaction=${export_statementsPerTransaction}</arg>
<arg>-Dsqoop.export.records.per.statement=${export_recordsPerBatch}</arg>
<arg>--driver</arg>
<arg>${jdbcDriver}</arg>
<arg>--batch</arg>
<arg>--num-mappers</arg>
<arg>${export_numMappers}</arg>
<arg>--connect</arg>
<arg>${jdbcUrl}</arg>
<arg>--username</arg>
<arg>${dbUser}</arg>
<arg>--password</arg>
<arg>${dbPassword}</arg>
<arg>--input-fields-terminated-by</arg>
<arg>${export_inputFieldsTerminatedBy}</arg>
<arg>--export-dir</arg>
<arg>${exportDir}</arg>
<arg>--table</arg>
<arg>${destinationTable}</arg>
</sqoop>
<ok to="end"/>
<error to="kill"/>
</action>
<kill name="kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>