Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 在不安全的纱线簇中运行Spark时,访问安全的蜂巢_Hadoop_Apache Spark_Yarn - Fatal编程技术网

Hadoop 在不安全的纱线簇中运行Spark时,访问安全的蜂巢

Hadoop 在不安全的纱线簇中运行Spark时,访问安全的蜂巢,hadoop,apache-spark,yarn,Hadoop,Apache Spark,Yarn,我们有两个cloudera 5.7.1集群,一个使用Kerberos进行安全保护,另一个使用Kerberos进行安全保护 在访问存储在安全群集中的配置单元表时,是否可以使用不安全的纱线群集运行Spark?(Spark版本为1.6) 如果是的话,你能解释一下如何配置它吗 更新: 我想解释一下我的问题背后的最终目的。我们的主要安全集群被大量利用,我们的工作无法获得足够的资源在合理的时间内完成。为了克服这个问题,我们希望使用另一个不安全集群的资源,而不需要在集群之间复制数据 我们知道这不是最好的解决方

我们有两个cloudera 5.7.1集群,一个使用Kerberos进行安全保护,另一个使用Kerberos进行安全保护

在访问存储在安全群集中的配置单元表时,是否可以使用不安全的纱线群集运行Spark?(Spark版本为1.6)

如果是的话,你能解释一下如何配置它吗

更新:

我想解释一下我的问题背后的最终目的。我们的主要安全集群被大量利用,我们的工作无法获得足够的资源在合理的时间内完成。为了克服这个问题,我们希望使用另一个不安全集群的资源,而不需要在集群之间复制数据

我们知道这不是最好的解决方案,因为数据局部性级别可能不是最优的,但是这是我们目前能够找到的最好的解决方案


如果您有任何其他解决方案,请告诉我,因为我们似乎无法实现上述目标。

如果您在本地模式下运行Spark,您可以使其使用任意一组Hadoop配置文件,即
核心站点.xml
hdfs站点.xml
映射站点.xml
纱线站点.xml
hive site.xml
是从Kerberized集群复制的。
因此,您可以访问该集群上的HDFS——当然,如果您拥有授予您访问该集群权限的Kerberos票证的话

  export HADOOP_CONF_DIR=/path/to/conf/of/remote/kerberized/cluster
  kinit sylvestre@WORLD.COMPANY
  spark-shell --master local[*]
但在纱线客户端或纱线群集模式下,您无法在本地群集中启动容器并在另一个群集中访问HDFS

  • 您可以使用本地
    core site.xml
    ,其中说明
    hadoop.security.authentication
    simple
    ,并且可以连接到本地纱线/HDFS
  • 或者您指向远程
    核心站点.xml
    的副本,该副本说明
    hadoop.security.authentication
    kerberos
    ,您可以连接到远程/HDFS
  • 但您不能使用本地的不安全线程,也不能访问远程的安全HDF
请注意,使用不安全的不安全或安全的组合,您可以通过修改自己的自定义
HDFS site.xml来定义多个名称空间,从而访问另一个集群中的HDFS。但是您只能使用单一的身份验证模型。
[edit]请参阅Mighty Steve Loughran的评论,其中介绍了一个额外的Spark属性,用于从本地安全群集访问远程安全HDF


还要注意的是,使用DistCp时,您也会遇到同样的问题——只是有一个“cheat”属性允许您从安全状态转到不安全状态

谢谢你的回答。这听起来很合理,因为这似乎是我们所得到的错误。你知道我们是否可以通过切换到Spark的独立集群来实现它吗?不知道——但我担心,如果你启动一个独立集群,那么Spark将不关心Hadoop集群的配置选项。基本上,Spark针对Thread进行身份验证,以(a)获取Hadoop委派令牌(针对Thread和HDFS有效7小时,无需返回Kerberos,长时间运行的作业除外,如流式处理)和(b)请求其执行者的容器(如果需要)。它从不直接针对HDFS进行身份验证。如果将
spark.Thread.access.namenodes
设置为HDFS群集列表,spark将为所有远程文件系统请求HDFS委派令牌。仅当kerberos已打开且用户已登录时,才会使用此选项。否则spark会查看群集配置,发现“无kerberos”并跳过它。该欺骗属性是“ipc.client.fallback to simple auth allowed”,它也应该后端口到spark。再想一想,您可以针对远程安全群集运行spark驱动程序。。。并将结果下载到本地计算机上。但是你还需要另一项工作来将这些结果上传到不安全的HDFS中。这对我们的用例来说不是很好。请参阅我的更新问题。是否每天使用不安全群集处理安全数据?这违背了保护数据的目的!很简单:要么你承认你负担不起安全性,要么你向你的安全集群添加资源。可以是仅计算节点,仅用于Thread,具有较小的磁盘容量。换句话说,您可以“分解”不安全群集中的一些节点,即解除它们的运行(将HDFS块排放到其余节点,停止Thread&HDFS服务,将RM&NN配置中的节点列入黑名单),然后将它们添加到安全群集,仅用于Thread,使用正确的Kerberos配置。现在您有了额外的计算能力,数据访问没有局部性,但如果您的网络带宽足够,就不会太糟糕。