如何使用 Sqoop 将数据从关系数据库导入到沙盒中的 Hive。我已经在我的电脑上安装了 Horton Works 沙盒。Nw 我想知道这个迁移。我参考了这个链接http://hortonworks.com/kb/using-apache-sqoop-for-data-import-from-relational-dbs/ 但我对一些疑问感到困惑 1,是否需要任何 Sqoop 软件才能运行?2,在上面提到的链接中,有一些代码我将把这些代码放在哪里?在 Hive 查询窗口中?3,是否可以完全迁移数据库(或仅在时间表上)?4,存储过程和 Viwes 我将把这些都保存在哪里呢?
2 回答
Sqoop 预装了最新的 Horton Sandbox。你必须做以下事情。如果某些情况您可能需要权限(不允许 Host 'xxx.xx.xxx.xxx' 连接到此 MySQL 服务器)。否则执行以下操作 - 将数据从 RDBMS(MYSQL、ORACLE 等)导入和导出到 HDFS/HIVE/HBASE
先决条件
- 阿帕奇Hadoop
- Apache Sqoop(兼容 Hadoop 版本)
- Apache Hive(可选)
- Apache HBase(可选)
- Apache HCatalog(可选)
- JDBC/ODBC 连接器
对于所有 RDBMS,连接 URL 会更改,并且所有命令行参数保持不变。您需要下载特定的 JDBC/ODBC 连接器 JAR 并将其复制到 $SQOOP_HOME/lib
MySQL
下载 mysql-connector-java.jar 并放入 $SQOOP_HOME/lib 文件夹
cp mysql-connector-java-5.1.18-bin.jar /usr/local/hadoop/sqoop-1.4.3-cdh4.4.0/lib/
期望您在 MySQL 表中有数据。
从 SQOOP 检索 MySQL 中可用的数据库列表
sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root -P
MySQL 到 HDFS 导入
有主键:
sqoop import -connect jdbc:mysql://localhost:3306/db1 -username root -password password --table tableName --target-dir /path/to/directoryName
没有主键:
sqoop import -connect jdbc:mysql://localhost:3306/db1 -username root -password password --table tableName --target-dir /path/to/directoryName -m 1
MySQL 到 Hive 导入
有主键:
sqoop-import --connect jdbc:mysql://localhost:3306/db1 -username root -password password --table tableName --hive-table tableName --create-hive-table --hive-import --hive-home path/to/hive_home
没有主键:
sqoop-import --connect jdbc:mysql://localhost:3306/db1 -username root -password password --table tableName --hive-table tableName --create-hive-table --hive-import --hive-home path/to/hive_home -m 1
MySQL 到 HBase 导入
导入所有列:
sqoop import --connect jdbc:mysql://localhost:3306/db1 --username root --password root --table tableName --hbase-table hbase_tableName --column-family hbase_table_col1 --hbase-create-table
HBase 导入几列
sqoop import --connect jdbc:mysql://localhost:3306/db1 --username root --password root --table tableName --hbase-table hbase_tableName --columns column1,column2 --column-family hbase_table_col1 --hbase-create-table
使用主键到 HBase:
sqoop import --connect jdbc:mysql://localhost:3306/db1 --username root --password root --table tableName --hbase-table hbase_tableName --column-family hbase_table_col1 --hbase-row-key column1 –hbase-create-table
到没有主键的 Hbase:
sqoop import --connect jdbc:mysql://localhost:3306/db1 --username root --password root --table tableName --hbase-table hbase_tableName --columns column1,column2 --column-family hbase_table_col --hbase-row-key column1 --hbase-create-table
从 HDFS 导出到 MySQL:
所有 Hive/HBase/HDFS 都一样:因为 Hive 表只是 HDFS 中的目录。所以你只是将一个目录导出到 MySQL
sqoop export --connect jdbc:mysql://localhost:3306/test_db --table tableName --export-dir /user/hive/warehouse/tableName --username root --password password -m 1 --input-fields-terminated-by '\001'
SQL 服务器
连接网址:
sqoop import --connect 'jdbc:sqlserver://;username=dbuser;password=dbpasswd;database=' --table --target-dir /path/to/hdfs/dir --split-by -m 1
从 Microsoft 网站下载连接器
http://www.microsoft.com/en-us/download/confirmation.aspx?id=11774
将它放在 $SQOOP_HOME/lib 中
甲骨文
连接网址:
sqoop import --connect "jdbc:oracle:thin:@(description=(address=(protocol=tcp)(host=myhost)(port=1521))(connect_data=(service_name=myservice)))" \
--username USER --table SCHEMA.TABLE_NAME --hive-import --hive-table SCHEMA.TABLE_NAME \
--num-mappers 1 --verbose -P \
IBM DB2
下载 DB2Driver 并将其放在 $SQOOP_HOME/lib 中
sqoop import --driver com.ibm.db2.jcc.DB2Driver --connect jdbc:db2://db2.my.com:50000/testdb --username db2user --db2pwd --table db2tbl --split-by tbl_primarykey --target-dir sqoopimports
sqoop export --driver com.ibm.db2.jcc.DB2Driver --connect jdbc:db2://db2.my.com:50000/myDB --username db2user --password db2pwd --table db2tbl --export-dir /sqoop/dataFile.csv
不同 RDBMS 的不同连接字符串
数据库版本--直接支持?连接字符串匹配
HSQLDB 1.8.0+ 没有 jdbc:hsqldb:*//
MySQL 5.0+ 是 jdbc:mysql://
Oracle 10.2.0+ 没有 jdbc:oracle:*//
PostgreSQL 8.3+ 是(仅导入) jdbc:postgresql://
1-您将需要 Microsoft SQL Server Connector for Apache Hadoop 来执行可从此处下载的操作。
2- 您必须从 Sqoop shell 发出导入命令。我建议您浏览一次Sqoop 文档,特别是第7.2.10节,它告诉我们有关将数据导入 Hive 的信息。
3- 你可以:
使用import-all-tables从数据库中导入所有表
使用sqoop-import导入一张表
使用sqoop-export将数据从 HDFS 导出到关系数据库。
4-一旦你的数据进入 Hadoop 集群,你就不能再使用你的 SQL 过程了。存储过程语言通常对结果集执行更多逻辑。因为 hive 结果集通常很大,所以聚合和转换是使用函数或流式完成的。您需要考虑一些替代方案。但是您可以在 Hive 中查看视图。要了解有关 Hive 视图的更多信息,请访问此处。
高温高压