美文网首页我爱编程
Sqoop导入数据到HDFS中(大数据存储系统)

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

作者: 三万_chenbing | 来源:发表于2018-01-16 11:36 被阅读0次

    环境准备: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中(大数据存储系统)

        本文链接:https://www.haomeiwen.com/subject/hhksoxtx.html