環境準備:h15機器,mysql使用h15的,不用h17的mysql
配置hive的環境變量和hadoop的環境變量
注意:
(1)一定要配置HADOOP_HOME和HIVE_HOME
(2)和flume相似,要將sqoop放在active的namenode節點上
錯誤1:Error:?Could?not?find?or?load?main?class?org.apache.sqoop.Sqoop
解決:hadoop和sqoop的環境變量配置有問題
錯誤2:No?such?sqoop?tool:mport.?See?'sqoop?help'.
解決:import----->mport??單詞錯誤
錯誤3:
onnection.?Ensure?that?you?have?called?.close()?on?any?active?streaming?result?sets?before?attempting?more?queries. at?com.mysql.jdbc.SQLError.createSQLException(SQLError.java:914)
at?com.mysql.jdbc.MysqlIO.checkForOutstandingStreamingData(MysqlIO.java:2181)
at?com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1542)
at?com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at?com.mysql.jdbc.Connection.execSQL(Connection.java:3277)
at?com.mysql.jdbc.Connection.execSQL(Connection.java:3206)
at?com.mysql.jdbc.Statement.executeQuery(Statement.java:1232)
at?com.mysql.jdbc.Connection.getMaxBytesPerChar(Connection.java:3673)
at?com.mysql.jdbc.Field.getMaxBytesPerCharacter(Field.java:482)
at?com.mysql.jdbc.ResultSetMetaData.getPrecision(ResultSetMetaData.java:443)
at?org.apache.sqoop.manager.SqlManager.getColumnInfoForRawQuery(SqlManager.java:286)
at?org.apache.sqoop.manager.SqlManager.getColumnTypesForRawQuery(SqlManager.java:241)
at?org.apache.sqoop.manager.SqlManager.getColumnTypes(SqlManager.java:227)
at?org.apache.sqoop.manager.ConnManager.getColumnTypes(ConnManager.java:295)
at?org.apache.sqoop.orm.ClassWriter.getColumnTypes(ClassWriter.java:1833)
at?org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1645)
at?org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:107)
at?org.apache.sqoop.tool.ExportTool.exportTable(ExportTool.java:64)
at?org.apache.sqoop.tool.ExportTool.run(ExportTool.java:100)
at?org.apache.sqoop.Sqoop.run(Sqoop.java:143)
at?org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at?org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)
at?org.apache.sqoop.Sqoop.runTool(Sqoop.java:218)
at?org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)
at?org.apache.sqoop.Sqoop.main(Sqoop.java:236)
16/04/28?19:32:58?ERROR?tool.ExportTool:?Encountered?IOException?running?export?job:?java.io.IOException:?No?columns?to?generate?for?ClassWriter
解決:mysql驅動包有問題導致,建議使用高版本的mysql驅動mysql-connector-java-5.1.31-bin.jar
1\上傳sqoop文件,解壓,配置sqoop的環境變量:SQOOP_HOME=/home/sqoop-1.4.6
查看是否安裝成功:#?sqoop?help
2\將mysql的數據庫驅動包:mysql-connector-java-5.1.18-bin.jar復制到h15的sqoop的目錄(/home/sqoop-1.4.6/lib)下
3\將mysql中的數據導到大數據存儲平臺(hdfs)的配置文件:
#vi?sqoop1(導入方式一:column方式只支持單表導入)
import
--connect
jdbc:mysql://h15:3306/result_db
--username
root
--password
1714
--table
dimension_platform
--columns
id,platform_name
--where(接條件)
1=1
--as-textfile
--delete-target-dir
--fetch-size
2
-m?(最大map任務數)
1
--target-dir
/sqoop/data
--null-string
''
4\在sqoop機器上執行以下命令進行測試:
#sqoop?--options-file?/opt/testsqoop/sqoop1?
然后查看該文件是否正常
#hdfs?dfs?-cat?/sqoop/data/part-m-00000
5\導入mysql數據庫中的數據到hive庫中(如果要導入hbase,那么只需要整合hbase即可)
#vi?sqoop2(導入方式二:query方式支持多表導入)
import
--connect
jdbc:mysql://h15:3306/result_db
--username
root
--password
1714
--query
'?select?p.platform_name,u.new_install_users??from?stats_user?as?u?join??dimension_platform?p?
on?u.platform_dimension_id=p.id?where?p.id>0and?$CONDITIONS?'(必須要添加紅色字體,如果沒有where語句,則不用加)
--as-textfile
--delete-target-dir
--fetch-size
2
-m
1
--target-dir
/sqoop/data
--null-string
''
--hive-import
--hive-overwrite
--create-hive-table
--hive-table
t_test(hive會自動創建該表)
6\在h15上執行sqoop的命令,進行數據轉移
#sqoop?--options-file?/opt/testsqoop/option2?
在hive客戶端查看是否有數據
#select?*?from?t_test;
7\將hdfs上的數據導出到mysql數據庫中
(1)在h15的數據庫result_db中創建表t_sqoop
create?table?t_sqoop(
name?varchar(200),
num?int(11)
)
(2)編輯配置文件option3
#vi?option3(導出方式三:導出hdfs上的數據到mysql)
export
--connect
jdbc:mysql://h15/result_db
--username
root
--password
1714
--columns(導入到mysql表中的字段)
name,num
--export-dir
/test/test.txt
-m
1
--table(mysql中的表)
t_sqoop
--input-null-string
null
--fields-terminated-by(指定文件里內容的隔開符號)
','
(2)新建一個數據文件sqoop.txt
內容如下:
Tim,23
Tom,26
Marry,21
(3)在h15上執行上傳文件到hdfs上的命令
#hdfs?dfs?-mkdir?/test
#hdfs?dfs?-put?/opt/testsqoop/sqoop.txt??/test
(4)執行sqoop命令,將hdfs上的數據傳輸到mysql中
#sqoop?--options-file?/opt/testsqoop/option3
(5)進入mysql查看表t_sqoop中,是否已經有數據
#select?*?from?t_sqoop;
8\將hive上的數據導出到mysql數據庫中(測試不通過)
(1)列出mysql數據庫中的所有數據庫命令
??#??sqoop?list-databases?--connect?jdbc:mysql://h15:3306/?--username?root?--password?1714
(2)連接mysql并列出數據庫中的表命令
???#?sqoop?list-tables?--connect?jdbc:mysql://h15:3306/dg?--username?root?--password?1714
命令中的dg為mysql數據庫中的dg數據庫名稱??username?password分別為mysql數據庫的用戶密碼
(3)將關系型數據的表結構復制到hive中
#sqoop?create-hive-table?--connect?jdbc:mysql://h15:3306/dg?--table?t_test?--username?root?--password?1714 --hive-table?t_test
其中--table?username為mysql中的數據庫dg中的表???--hive-table?t_test為hive中新建的表名稱
create?table?t_test(
platform_name?varchar(50),
new_install_users?int(20)
)
(4)從關系數據庫導入文件到hive中#sqoop?import?--connect?jdbc:mysql://h15:3306/dg?--username?root?--password?1714 --table?t_test?--hive-import
(5)將hive中的表數據導入到mysql中
#sqoop?export?--connect?jdbc:mysql://h15:3306/dg?--username?root?--password?1714 ?--table?t_test?
--export-dir?/user/hive/warehouse/20160501?--input-fields-terminated-by?'\t'