环境准备: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'