使用Hadoop Keytab文件连接.NET代码到Hadoop

在本文中,将探讨如何将.NETC#应用程序连接到经过Kerberos认证的Hadoop服务器。请注意,本文仅涉及连接部分,因此不会解释Hadoop概念。为了成功连接,需要执行以下步骤:

Hadoop服务器配置信息的设置

生成基于Hadoop Keytab文件的Kerberos认证票据

创建到Hadoop服务器的ODBC连接

先决条件

.NET和Hadoop之间建立连接之前,应安装以下先决条件:

  • 从安装MIT Kerberos for Windows
  • 从安装Microsoft Hadoop ODBC驱动程序

需要以下信息:

  • Hadoop配置文件(krb5.ini)
  • Keytab文件(HDDev.keytab)
  • Hadoop服务器主机名
  • Hadoop服务器端口地址(默认为10000)
  • Hadoop主机FQDN
  • Hadoop服务名称
  • Hadoop主体账户(下面解释)

详细说明

安装MIT Kerberos后,将Hadoop配置文件(krb5.ini)复制到位置C:\ProgramData\MIT\Kerberos5(根据安装位置更改路径)。 将Keytab复制到方便的任何位置。在演示中,将其复制到了项目的Bin\Debug和Bin\Release文件夹中。 安装MIT Kerberos软件后,可以使用kinit命令生成Kerberos票据。使用kinit命令的语法是:

kinit -k -t HDDev.keytab hadoopDevPrincipal@HDP.DEV

在这个语法中,HDDev.keytab是keytab文件。也可以在命令语法中指定文件的完整路径。例如:

kinit -k -t "d:\test\HDDev.keytab" hadoopDevPrincipal@HDP.DEV

对于连接到Hadoop,需要Kerberos主体。它读取keytab文件中保存的认证信息,并具有适当的权限。在演示中,使用了hadoopDevPrincipal@HDP.DEV,这显然是为了演示目的而伪造的,但它将给关于Kerberos主体账户格式的概念。 可以在命令中添加更多开关以配置Kerberos票据到期等。有关kinit命令的更多文档,请参考。

现在,准备进入代码并建立连接。

步骤1:执行kinit命令,提供Keytab文件和主体账户,以生成Kerberos票据。

string.Format( "-k -t \"{0}\\{1}\" {2}", Environment.CurrentDirectory, ConfigurationManager.AppSettings["keyTabFileName"], ConfigurationManager.AppSettings["principal"] ); ProcessStartInfo psi = new ProcessStartInfo("kinit") { UseShellExecute = true, RedirectStandardOutput = false, RedirectStandardInput = false, RedirectStandardError = false, CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden, Arguments = path }; Process process = Process.Start(psi);

步骤2:使用Hadoop服务器信息创建ODBC连接到Hadoop:

OdbcConnection conn = new OdbcConnection( string.Format( "DRIVER={{Microsoft Hive ODBC Driver}};" + "Host={0};" + "Port={1};" + "Schema={2};" + "HiveServerType=2;" + "AuthMech=1;" + "KrbHostFQDN={3};" + "KrbServiceName={4};" ) ); conn.Open();

AuthMech=1指定了Kerberos认证模式。

在此之后,可以像对SQL Server或Oracle一样正常执行Hadoop查询:

OdbcCommand cmd = new OdbcCommand( "select * from Schema_Name.Table_Name;", conn );

使用代码

下载Hadoop Connector.zip。请用Hadoop设置替换Web.Config中的AppSettings:

<appSettings> <!-- Hadoop Settings --> <add key="host" value="hostname" /> <add key="port" value="10000" /> <add key="schema" value="Schema_Name" /> <add key="hostFQDN" value="hostname.domain.com" /> <add key="serviceName" value="Service_Name" /> <add key="principal" value="hadoopDevPrincipal@HDP.DEV" /> <add key="kerberosAquireTicketCommand" value="kinit -k -t HDDev.keytab hadoopDevPrincipal@HDP.DEV" /> <add key="keyTabFileName" value="HDDev.keytab" /> </appSettings>
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485