一,选择数据库,这里使用标准mysql sakila数据库

mysql -u root -D sakila -p

二。首先尝试把表中的数据导入到hdfs文件中,这样后续就可以使用spark来dataframe或者rdd来处理数据

sqoop import --connect "jdbc:mysql://host03.xyy:3306/sakila" --username root --password root --table rental --target-dir "SqoopImport/rental" --num-mappers 1

\\SqoopImport 目录必须有,rental 目录可以不存在

三。如果要导入到hive里面,要使用 --warehouse参数。

sqoop import --connect "jdbc:mysql://host03.xyy:3306/sakila" --username root --password root --table rental --warehouse-dir "/user/hive/warehouse/sakila.db" --num-mappers 2

\\因为之前我们已经全表导入过一次了,会提示文件已经存在的错误

hadoop fs -mv /user/hive/warehouse/sakila.db/rental /user/hive/warehouse/sakila.db/rental2
\\把原来的目录移走
sqoop import --connect "jdbc:mysql://host03.xyy:3306/sakila" --username root --password root --table rental --warehouse-dir "/user/hive/warehouse/sakila.db" --num-mappers 2

四。也可以通过sqoop命令来查看hive的元数据库。

1.查看多少个数据库

sqoop list-databases --connect "jdbc:mysql://host03.xyy:3306" --username root --password root

2.查看多少给表

sqoop list-tables --connect "jdbc:mysql://host03.xyy:3306/sakila" --username root --password root

3.sqoop执行select语句。

sqoop eval --connect "jdbc:mysql://host03.xyy:3306/sakila" --username root --password root --query "select * from rental limit 10"

五。导入hive或者hdfs中使用追加模式

sqoop import --connect "jdbc:mysql://host03.xyy:3306/sakila" --username root --password root --table rental --where "date(return_date) < '2005-07-30'" --warehouse-dir "/user/hive/warehouse/sakila.db" --append --num-mappers 2

Total MapReduce CPU Time Spent: 9 seconds 250 msec
OK
23191
Time taken: 30.055 seconds, Fetched: 1 row(s)
hive>
\\原来数据hive里面的表格数据是16044条,重新append一批数据以后百年城23191条
\\apend 也可以应用 hdfs文件中,和target-dir配合使用

六。导入hdfs和hive中使用删除模式

sqoop import --connect "jdbc:mysql://host03.xyy:3306/sakila" --username root --password root --table rental --where "date(return_date) < '2005-07-30'" --warehouse-dir "/user/hive/warehouse/sakila.db" --delete-target-dir --num-mappers 2

OK
7147
Time taken: 32.115 seconds, Fetched: 1 row(s)
hive>
\\--delete-target-dir 是删除模式导入,清空原来的数据,这个命令也可以在导入hdfs下使用

注意以上例子中都是使用了where条件的导入。

七。关于导入数据的并行数量

前面几个例子都是使用了--num-mapper 2 也就是两个并行。

实际上默认是因为原来的mysql表中有主键,如果没有主键是不能直接指定并行为2 的。因为系统不知道怎么切割数据。

如果要并行需要使用另外一个参数

在mysql中执行复制一个表格
create table customer_copy like customer;
insert into customer_copy select * from customer

sqoop import --connect "jdbc:mysql://host03.xyy:3306/sakila" --username root --password root --table customer_copy --warehouse-dir "/user/hive/warehouse/sakila.db" --delete-target-dir -split-by address_id --num-mappers 2

八。sqoop全表导入

//导入数据库mysql到hive

sqoop import-all-tables --connect "jdbc:mysql://host03.xyy:3306/sakila" --username root --password root --hive-import --hive-database sakila  --m 2

如果其中部分表格没有主键 并行就有问题。需要使用一个参数 --autoreset-to-one-mapper

sqoop import-all-tables --connect "jdbc:mysql://host03.xyy:3306/sakila" --username root --password root --warehouse-dir  "SqoopImport/sakila"   --autoreset-to-one-mapper --m 2

这样对于没有主键的自动变成一个map去处理

九。文件格式

通过参数决定每个表存入hdfs中的格式

--as-textfile  (default)
--as-avrodatafile
--as-sequencefile
--as-parquetfile

10.sqoop import参数列表

Argument Description
--append Append data to an existing dataset in HDFS
--as-avrodatafile Imports data to Avro Data Files
--as-sequencefile Imports data to SequenceFiles
--as-textfile Imports data as plain text (default)
--as-parquetfile Imports data to Parquet Files
--boundary-query <statement> Boundary query to use for creating splits
--columns <col,col,col…> Columns to import from table
--delete-target-dir Delete the import target directory if it exists
--direct Use direct connector if exists for the database
--fetch-size <n> Number of entries to read from database at once.
--inline-lob-limit <n> Set the maximum size for an inline LOB
-m,--num-mappers <n> Use n map tasks to import in parallel
-e,--query <statement> Import the results of statement.
--split-by <column-name> Column of the table used to split work units. Cannot be used with --autoreset-to-one-mapper option.
--split-limit <n> Upper Limit for each split size. This only applies to Integer and Date columns. For date or timestamp fields it is calculated in seconds.
--autoreset-to-one-mapper Import should use one mapper if a table has no primary key and no split-by column is provided. Cannot be used with --split-by <col>option.
--table <table-name> Table to read
--target-dir <dir> HDFS destination dir
--temporary-rootdir <dir> HDFS directory for temporary files created during import (overrides default "_sqoop")
--warehouse-dir <dir> HDFS parent for table destination
--where <where clause> WHERE clause to use during import
-z,--compress Enable compression
--compression-codec <c> Use Hadoop codec (default gzip)
--null-string <null-string> The string to be written for a null value for string columns
--null-non-string <null-string> The string to be written for a null value for non-string columns

大数据入门到精通18--sqoop 导入关系库到hdfs中和hive表中的更多相关文章

  1. 大数据入门到精通1--大数据环境下的基础文件HDFS 操作

    1.使用hdfs用户或者hadoop用户登录 2.在linux shell下执行命令 hadoop fs -put '本地文件名' hadoop fs - put '/home/hdfs/sample ...

  2. 大数据入门到精通19--mysql 数据导入到hive数据中

    一.正常按照数据库和表导入 \\前面介绍了通过底层文件得形式导入到hive的表中,或者直接导入到hdfs中,\\现在介绍通过hive的database和table命令来从上层操作.sqoop impo ...

  3. 大数据入门到精通13--为后续和MySQL数据库准备

    We will be using the sakila database extensively inside the rest of the course and it would be great ...

  4. 大数据入门到精通2--spark rdd 获得数据的三种方法

    通过hdfs或者spark用户登录操作系统,执行spark-shell spark-shell 也可以带参数,这样就覆盖了默认得参数 spark-shell --master yarn --num-e ...

  5. 大数据学习之路之sqoop导入

    按照网上的代码导入 hadoop(十九)-Sqoop数据清洗 - 简书 (jianshu.com) ./sqoop import --connect "jdbc:mysql://192.16 ...

  6. 大数据入门到精通16--hive 的条件语句和聚合函数

    一.条件表达 case when ... then when .... then ... when ... then ...end select film_id,rpad(title,20," ...

  7. 大数据入门到精通12--spark dataframe 注册成hive 的临时表

    一.获得最初的数据并形成dataframe val ny= sc.textFile("data/new_york/")val header=ny.firstval filterNY ...

  8. 大数据入门到精通11-spark dataframe 基础操作

    // dataframe is the topic 一.获得基础数据.先通过rdd的方式获得数据 val ny= sc.textFile("data/new_york/")val ...

  9. 大数据入门到精通10--spark rdd groupbykey的使用

    //groupbykey 一.准备数据val flights=sc.textFile("data/Flights/flights.csv")val sampleFlights=sc ...

随机推荐

  1. mplayer用法收集【转】

    转自:https://blog.csdn.net/wylhistory/article/details/4816653 1,录音: mplayer mms://202.***.***.***/test ...

  2. Linux、Docker安装Nginx

    Docker安装Nginx #docker images nginx #docker search nginx #docker pull nginx #docker run -it -p 8084:8 ...

  3. 刘志梅2017710101152.《面向对象程序设计(java)》第十三周学习总结

    实验十三  图形界面事件处理技术 实验时间 2018-11-22 1.理论知识 (1)任何支持GUI的操作环境都要不断地监视按键或点击鼠标这样的事件. JAVA这样的面向对象语言,都将事件的相关的信息 ...

  4. To be taught if i am fortunate

    此博客算是我自娱自乐的海洋球池吧. 由于我十分的菜并且文笔拙劣,所以您可能并不能在这找到什么有用的信息或者好玩的东西(或者exciting的内容). 如果您能指出我的一些错误,我将十分感激.

  5. 4种好用的python编辑器

    1.Sublime Text: 这是一个轻量级的代码编辑器,跨平台,支持几十种编程语言,包括Python,Java,C/C++等,小巧灵活,运行轻快,支持代码高亮.自动补全.语法提示,插件扩展丰富,是 ...

  6. Android开发 集成极光推送中的问题

    AndroidManifest.xml清单文件报错: cn.jpush.android.service.DataProvider@exported value=(true)报错,解决如下: 根据报错行 ...

  7. 强大的oracle分析函数

    转载:https://www.cnblogs.com/benio/archive/2011/06/01/2066106.html 学习步骤:1. 拥有Oracle EBS demo 环境 或者 PRO ...

  8. Java 转JSON串

    一.JSON (JavaScript Object Notation) 1.轻量级数据交换格式能够替代XML的工作 2.数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小(简洁.简单.体积小 ...

  9. 7. mybatis:mapper-locations: 路径放在java路径下报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

    解决方案:在pom.xml文件中的<build>标签内加上以下的<resources>内容即可 <build> <resources> <reso ...

  10. Python第8天

    zip() 拉链方法 max(字典) 默认比较字典的key,不同类型的数据不能比较,只要可以被for迭代即可 利用zip与max(字典)共同使用 ord() — chr()    ascii码表数字与 ...