Sqoop导入数据到HDFS中(大数据存储系统)

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

你可能感兴趣的:(Sqoop导入数据到HDFS中(大数据存储系统))