我们安装了一个集群 Hadoop
服务器,我们使用 Hue
作为我们的接口(interface),我们的目标是从 MS SQL Server
获取数据至Hadoop
.我们找到了一个教程here
但是我在 Hue
中得到以下错误
我在 http://capnjosh.com/ 的帮助下找到了解决方案
如果你在基于网络的界面中使用 Sqoop 的东西,你实际上是在使用 Sqoop2 您必须自己下载并安装 SQL Server 的 JDBC 驱动程序
– curl -L‘http://download.microsoft.com/download/0/2/A/02AAE597-3865-456C-AE7F-613F99F850A8/sqljdbc_4.0.2206.100_enu.tar.gz’| tar
– sudo cp sqljdbc_4.0/enu/sqljdbc4.jar/var/lib/sqoop2/
– 当你在它的时候,你也可以把它放在 sqoop 目录中:sudo cp sqljdbc_4.0/enu/sqljdbc4.jar/var/lib/sqoop/ Sqoop2主目录是/var/lib/sqoop2/ 复制JDBC驱动文件后重启Sqoop2服务5a。 “连接器”是一个 Sqoop 事物,用于与 Hadoop 中的各种进程进行通信。除非你有更多的经验,否则它应该只是“generic-jdbc-connector”
5b。类路径是“com.microsoft.sqlserver.jdbc.SQLServerDriver”
“管理连接”中的连接字符串是这样的:jdbc:sqlserver://192.168.1.102:1433(虽然端口号默认为1433)对于作业的操作:
架构名称:我只是将其留空,然后粘贴到我想要的 TSQL 查询中
– 如果你在下面指定一个 TSQL 语句,那么这需要为空 表名:我将其留空,而是在 TSQL 中完成。
– 如果你在下面指定一个 TSQL 语句,那么这需要为空 表 SQL 语句:粘贴到您的查询中(您可以在 SSMS 中制作并粘贴到此处)。然后,将其附加到它的末尾:+and+${CONDITIONS}。 ${CONDITIONS} 扩展为您可以在此字段下方指定的分区列名称的某个值范围。 表列名称:如果您想限制实际提取的列,请将它们放入。 分区列名:确保以某种方式索引此列 - Sqoop 首先查询最小值和最大值,然后发出一系列查询,这些查询根据此列值返回所有行的均匀分布部分。例如交易表;我在分区列名称中指定交易日期列; sqoop 获取最小和最大日期; Sqoop 然后发出一系列查询,将 ${CONDITIONS} 替换为“where transDate >= '2015-01-01' and transDate < '2015-04-01'”(为每个查询移动该窗口)。可以发送每个查询从集群中的任何节点(尽管我打赌你可以限制那些节点)12. 分区列中的空值:如果你确实有空值,这有助于 Sqoop.13. 你可以手动指定 Sqoop 用来获取 min/的查询分区列名的最大值(默认情况下,它看起来像这样“select min(), max() from ()”。 如果您弄乱了在 Hue/Sqoop2 中创建的连接,请注意您必须再次输入密码 如果你遇到错误,不要打它——你必须通过 SSH 登录并查看/var/log/sqoop2/sqoop2.log 如果您的作业失败,并且在您查询的 SQL Server 上的 SQL Server Profiler 中,您只会看到带有“where ... (1 = 0)...”的查询,请检查您的防火墙规则:集群中的所有节点都需要能够与 SQL Server 实例对话。是的,Sqoop 将在您的集群中分发各种分区查询 :)