
我正在努力学习"如何在Hadoop中实现Kerberos?" 我曾经使用过此文档不见了 https://issues.apache.org/jira/browse/HADOOP-4487 我还通过基本Kerberos的东西不见了(https://www.youtube.com/watch?v=KD2Q-2ToloE)
在从这些资源中学习之后,我得出了一个结论,我通过图表来表示.场景: - 用户登录到他的计算机通过Kerberos身份验证进行身份验证并提交地图缩减工作(请阅读图表的说明,它几乎不需要5分钟的时间)我想解释图表并提出与几个相关的问题步骤(粗体) 黄色背景中的数字表示整个流程(数字1到19)DT(带红色背景)表示委托令牌BAT(带绿色背景)表示块访问令牌JT(带有棕色背景)表示作业令牌
步骤1,2,3和4表示: - 请求TGT(票证授予票证)请求名称节点的服务票证. 问题1)KDC应该在哪里?它可以在我的名称节点或作业跟踪器所在的机器上吗?
步骤5,6,7,8和9表示: - 显示名称节点的服务票证,获得确认.名称节点将发出委托令牌(红色)用户将告知令牌更新程序(在这种情况下,它是作业跟踪器)
问题2)用户将此授权令牌与作业一起提交给Job Tracker.授权令牌是否会与任务跟踪器共享?
步骤10,11,12,13和14表示: - 询问服务票据以获取作业跟踪器,从KDC获取服务票证将此票证显示给Job Tracker并从JobTracker获取ACK将作业+委派令牌提交给JobTracker.
步骤15,16和17表示: - 生成块访问令牌并分布在所有数据节点上.将blockID和Block Access Token发送到Job Tracker,Job Tracker会将其传递给TaskTracker
问题3)谁将从名称节点请求BlockAccessToken和Block ID?JobTracker或TaskTracker
对不起,我错误地错过了18号.Step19表示: - 作业跟踪器生成作业令牌(棕色)并将其传递给TaskTrackers.
问题4)我可以得出结论,每个用户将有一个代表队令牌,它将分布在整个集群中,每个作业会有一个作业令牌吗?因此,用户将只有一个委托令牌和许多作业令牌(等于他提交的作业数量).
请告诉我,如果我错过了某些内容,或者在我的解释中某些方面我错了.
hadoop kerberos hadoop-plugins kerberos-delegation mit-kerberos
我正在使用Hadoop2.4.0/Hbase 0.98.0/Hive 0.14.0
Hadoop和HBase运行良好,直到我重新启动我的HMaster.hbase-hduser-master-master.log文件中出现以下错误:
2015-02-17 05:46:15,157 INFO [master:master:60000] master.TableNamespaceManager: Namespace table not found. Creating...
2015-02-17 05:46:15,193 DEBUG [master:master:60000] lock.ZKInterProcessLockBase: Acquired a lock for /hbase/table-lock/hbase:namespace/write-master:600000000000004
2015-02-17 05:46:15,212 DEBUG [master:master:60000] lock.ZKInterProcessLockBase: Released /hbase/table-lock/hbase:namespace/write-master:600000000000004
2015-02-17 05:46:15,212 FATAL [master:master:60000] master.HMaster: Master server abort: loaded coprocessors are: []
2015-02-17 05:46:15,213 FATAL [master:master:60000] master.HMaster: Unhandled exception. Starting shutdown.
org.apache.hadoop.hbase.TableExistsException: hbase:namespace
at org.apache.hadoop.hbase.master.handler.CreateTableHandler.prepare(CreateTableHandler.java:120)
at org.apache.hadoop.hbase.master.TableNamespaceManager.createNamespaceTable(TableNamespaceManager.java:232)
at org.apache.hadoop.hbase.master.TableNamespaceManager.start(TableNamespaceManager.java:86)
at org.apache.hadoop.hbase.master.HMaster.initNamespace(HMaster.java:1049)
at org.apache.hadoop.hbase.master.HMaster.finishInitialization(HMaster.java:913)
at org.apache.hadoop.hbase.master.HMaster.run(HMaster.java:606)
at java.lang.Thread.run(Unknown Source)
2015-02-17 05:46:15,214 INFO [master:master:60000] master.HMaster: Aborting
2015-02-17 05:46:15,214 INFO …Run Code Online (Sandbox Code Playgroud) 我尝试从我的机器验证属于远程ActiveDirectory的用户,该机器与当前机器或用户域不是同一个域.我的机器和远程ActiveDirectory机器之间不会有任何信任.
初步尝试
我试图验证用户(输入:sAMAccountName,机器的ipaddress,机器的域用户名("管理员")和机器的密码(***).能够获得具有'sAMAccountName'的用户确实存在于ActiveDirectory中的结果.
我的要求:
想象一下,已经在ActiveDirectory中创建了一个用户("qwerty")
从我的本地机器,我将有以下信息,
一个.远程ActiveDirectory ipaddress
湾 远程ActiveDirectory机器的用户名和密码.
C.用户"qwerty"的用户名和密码
我需要检查用户"qwerty"是否存在于远程ActiveDirectory的用户列表中,并验证在ActiveDirectory的用户列表中输入的密码是否相同
我试过的代码:
DirectoryEntry entry = new DirectoryEntry("LDAP://ipaddress/DC=dinesh,DC=com", name, password);
DirectorySearcher searcher = new DirectorySearcher(entry);
searcher.Filter = "(sAMAccountName=" + name + ")";
try
{
SearchResult adsSearchResult = adsSearcher.FindOne();
isValid = true;
adsEntry.Close();
}
catch (Exception ex)
{
adsEntry.Close();
}
Run Code Online (Sandbox Code Playgroud)
在验证远程ActiveDirectory中的用户之前,是否需要在本地计算机和远程ActiveDirectory计算机之间创建信任?如果是,请说明如何完成;
创建信任后,如何验证用户?
================================================== =========================
我可以使用Rainer建议的解决方案,但遇到了一个新问题.当我通过来自不同计算机的C#代码创建新用户时,某些属性未正确设置.
这是否需要在创建用户时强制设置?
我在2个Web应用程序中使用嵌入式数据库H2说WebApp1和WebApp2.我运行WebApp1并执行一些查询来访问H2数据库.这意味着当我运行WebApp2时,但它抛出了H2当前被另一个进程使用的异常
我的需求是,我应该能够同时使用WebApp1和WebApp2的H2数据库.我分析了下面的链接,但它告诉了多个连接,但没有关于多个应用程序.
http://www.h2database.com/html/features.html#multiple_connections
Run Code Online (Sandbox Code Playgroud)