我已经成功地安装了SQOOP,现在的问题是如何用RDBMS实现它,以及如何使用SQOOP将数据从RDBMS加载到HDFS。
发布于 2015-10-08 22:30:55
通过使用Sqoop,您可以将数据直接加载到Hive表或将数据存储在HDFS中的某个目标目录中
如果需要将数据从关系型数据库系统复制到某个目录,请使用
sqoop import --连接ConnectionString --用户名用户名--密码Your_Database_Password {如果没有密码,请不要指定它}--表tableName --列查询{如果需要调用特定列}--column_name-dir '/tmp/myfolder‘---query’从表名中选择最小,最大值‘--m 5{将映射器的数量设置为5} --字段--终止于',’‘{您希望您的数据在目标文件中的外观如何}
边界查询:这是您可以指定的内容。如果您不指定它,那么在默认情况下,这将作为一个内部查询运行,它加起来就是一个复杂查询。如果您显式地指定了这一点,那么它就像一个普通查询一样运行,从而提高了性能。
此外,您可能希望限制观察的数量,例如基于列ID,并假设您需要从ID 1到1000的数据。然后使用边界条件和拆分,您将能够限制您的导入数据。
--boundary-query "select 0,1000 from employee'
--split-by IDSplit-By :您可以在Sqoop导入上使用Split by来指定需要拆分的列。缺省情况下,如果不指定此项,sqoop会将表的主键设置为Split_by列。
Split By从表中提取数据,并根据映射器的数量将其存储在不同的文件夹中。默认情况下,映射器的数量为4。
这似乎不是我们想要的,但是如果您有一个复合主键或者根本没有主键,那么sqoop将无法获取数据,并且可能会出错。
注:如果将映射器的数量设置为1,则可能不会遇到任何问题。在这种情况下,由于只有一个映射器,因此不使用拆分条件。所以查询运行得很好。这可以使用--m 1来完成
如果需要将数据从关系型数据库复制到配置单元表,请使用
sqoop import --连接ConnectionString --用户名用户名--密码Your_Database_Password {如果没有密码,请不要指定它}--表tableName --tableName--Your_Database_Password 'Select min,max from table name‘--m 5{将映射器的数量设置为5} --hive-import --hive-table serviceorderdb.productinfo --m 1运行查询而不是调用整个表本身的
sqoop import --连接ConnectionString --用户名用户名--密码查询-- Your_Database_Password 'select name from employees name like '%s‘and $CONDITIONS’--m 5{将映射器的数量设置为5} -- target -dir '/tmp/myfolder‘--ConnectionString-terminated-by ',’{您希望您的数据在目标文件中的外观如何}
您可能会将$CONDITIONS视为额外的参数$conditions。这是因为这次您没有指定表,而是指定了查询显式。当Sqoop运行时,它会搜索边界条件,但找不到。然后,它搜索一个表和一个主键,用于应用边界查询,但同样找不到。因此,我们使用$CONDITIONS来显式指定我们不使用查询,而使用查询结果中的默认边界条件。
$ sqoop列表-数据库--连接jdbc:mysql://本地主机/--用户名根目录--密码
不同数据库的连接字符串:
MYSQL: jdbc:mysql://<hostname>:<port>/<dbname>
jdbc:mysql://127.0.0.1:3306/test_database
Oracle :@//host_name:port_number/service_name
jdbc:oracle:thin:scott/tiger@//myhost:1521/myservicename您可以从以下网址了解更多关于sqoop导入的信息:https://sqoop.apache.org/docs/1.4.1-incubating/SqoopUserGuide.html
发布于 2014-01-29 15:11:23
通过使用sqoop import命令,您可以将数据从关系型数据库导入到HDFS、Hive和HBase
sqoop import --connect jdbc:mysql://localhost:portnumber/DBName --username root --table emp --password root -m1通过使用此命令,数据将存储在HDFS中。
发布于 2015-04-13 21:37:03
运行sqoop import (将数据从RDBMS加载到HDFS)的示例命令:
Postgres
sqoop import --connect jdbc:postgresql://postgresHost/databaseName
--username username --password 123 --table tableNameMySQL
sqoop import --connect jdbc:mysql://mysqlHost/databaseName --username username --password 123 --table tableNameOracle*
sqoop import --connect jdbc:oracle:thin:@oracleHost:1521/databaseName --username USERNAME --password 123 --table TABLENAMESQL Server
sqoop import --connect 'jdbc:sqlserver://sqlserverhost:1433;database=dbname;username=<username>;password=<password>' --table tableName*如果用户名和表的大小写不正确,Sqoop将找不到表中的任何列。通常,将两者都指定为大写可以解决问题。
阅读Sqoop用户指南:https://sqoop.apache.org/docs/1.4.5/SqoopUserGuide.html
我还推荐Apache Sqoop Cookbook。您将学习如何使用导入和导出工具、执行增量导入作业、保存作业、使用jdbc驱动程序解决问题等等。http://shop.oreilly.com/product/0636920029519.do
https://stackoverflow.com/questions/18014919
复制相似问题