- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我使用 Hortonworks Data Platform 2.5 设置了一个 Hadoop 集群,其中还包括 Ambari 2.4、Kerberos、Spark 1.6.2 和 HDFS。
我有例如以下用户的 Kerberos 主体和 key 表:
需要用户 spark
在安全集群中运行 spark-submit
命令,Spark 应用程序必须打开 HDFS 目录 /user/中的一些文件hdfsuserA/...
,由 hdfsuserA (700) 所有。
由于我启用了 Kerberos,我的 Spark 应用程序将不再运行,它失败并出现以下异常
[Stage 1:> (0 + 92) / 162]Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 55 in stage 1.0 failed 4 times, most recent failure: Lost task 55.3 in stage 1.0 (TID 225, had-data1): org.apache.hadoop.security.AccessControlException: Permission denied: user=spark, access=EXECUTE, inode="/user/hdfsuserA/new/data/Export_PDM_Hadoop_05_2016.csv":hdfsuserA:hadoop:drwx------
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:319)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkTraverse(FSPermissionChecker.java:259)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:205)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:190)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1827)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1811)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPathAccess(FSDirectory.java:1785)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsInt(FSNamesystem.java:1862)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:1831)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:1744)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getBlockLocations(NameNodeRpcServer.java:693)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getBlockLocations(ClientNamenodeProtocolServerSideTranslatorPB.java:373)
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:640)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:982)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2313)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2309)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1724)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2307)
问题是,我对用户 spark
进行了身份验证,以便能够启动 Spark 应用程序,但是在应用程序内部,我得到一个异常,因为 /user/hdfsuserA
spark 用户无法访问 HDFS 目录。
当我使用用户 hdfsuserA
运行 spark-submit 命令时,我得到:
[hdfsuserA@had-job ~]$ kinit -kt /etc/security/keytabs/hdfsuserA.keytab hdfsuserA
[hdfsuserA@had-job ~]$ spark-submit --class spark.sales.TestAnalysis --master yarn --deploy-mode client /home/hdfsuserA/application_new.jar hdfs://had-job:8020/user/hdfsuserA/new/data/*
16/12/03 09:44:46 INFO Remoting: Starting remoting
16/12/03 09:44:46 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://sparkDriverActorSystem@141.79.71.34:46996]
spark.yarn.driver.memoryOverhead is set but does not apply in client mode.
spark.driver.cores is set but does not apply in client mode.
16/12/03 09:44:49 INFO metastore: Trying to connect to metastore with URI thrift://had-job:9083
16/12/03 09:44:49 INFO metastore: Connected to metastore.
Exception in thread "main" org.apache.spark.SparkException: Yarn application has already ended! It might have been killed or unable to launch application master.
at org.apache.spark.scheduler.cluster.YarnClientSchedulerBackend.waitForApplication(YarnClientSchedulerBackend.scala:122)
at org.apache.spark.scheduler.cluster.YarnClientSchedulerBackend.start(YarnClientSchedulerBackend.scala:62)
at org.apache.spark.scheduler.TaskSchedulerImpl.start(TaskSchedulerImpl.scala:144)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:530)
at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:59)
at myutil.SparkContextFactory.createSparkContext(SparkContextFactory.java:34)
at spark.sales.BasketBasedSalesAnalysis.main(BasketBasedSalesAnalysis.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
对于这样的问题,正确的解决方案是什么?我可以吗? kinit
用于应用内的另一个用户?
最佳答案
我发现了问题:这是一个用户问题!因为我只在运行 spark-submit
命令的集群的 NameNode 主机上创建了 hdfsuserA
,所以应用程序无法通过 keytabs 作为该用户进行身份验证其他主机。
所以要解决这个问题:在集群的所有主机上添加相同的用户:
sudo useradd hdfsuserA
sudo passwd hdfsuserA
之后调用 spark 应用程序应该可以正常工作(使用 spark-submit
中的 master yarn
参数,使用 master local[x]
它总是有效)!
关于hadoop - 在 Kerberized 集群中读取 Spark 应用程序中的 HDFS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40932192/
我们有一个非 Kerberized Hortonworks 集群,它需要访问 Kerberized Cloudera cluster 中的服务. 非 Kerberized 集群可以通过哪些方式与 Ke
经过几天的锤击,我有一个工作的 CentOS 6.3 系统绑定(bind)到一个运行 Windows 2008R2 的 AD 域。我的方法是使用 Kerberos 身份验证的基于 sssd 的 pam
我已经创建了一个应用程序,并且有一个 kerberos 领域 - 我希望能够“kerberize”这个应用程序。我不是 100% 了解如何执行此操作的详细信息,但是有没有一种方法可以设置任何给定应用程
尝试使用 dask 读取 kerberized HDFS 集群上的 parquet 文件目录,使用以下命令: import hdfs3 hdfs = hdfs3.HDFileSystem(, port
我正在尝试通过 beeline 让 hiveserver2 与 kerberized HDP 2.3 集群一起使用。我在亚马逊ec2。 一旦我得到一张可更新的票,我就可以执行 hdfs 操作并启动 m
我已经对 HDP 2.3 集群进行了 kerbrized,并且在缓存中有一个有效的 TGT。 我可以通过直线控制台成功运行查询。例如,以下事情进展顺利。 $beeline $!connect jdbc
我成功地对一个测试 Hortonworks 集群进行了 Kerberized。 Ambari 为服务创建了 key 表,它们都已启动。名称节点有 HA。备用名称节点启动速度快,事件名称节点需要更长的时
我想在 OpenTSDB 上做一些 POC。我已经按照安装说明安装了 OpenTSDB,但启动起来很困难。我正在使用启用了 Kerberos 的 HDP 环境,我正在将 OpenTSDB 与 Kerb
我正在尝试使用 SQL Alchemy 查询 Kerberized Hive 集群.我可以使用 pyhs2 提交查询这确认在通过 Kerberos 身份验证时可以连接和查询 Hive: import
我让 Apache NiFi 独立运行并且运行良好。但是,当我尝试设置 Apache NiFi 以访问 Hive 或 HDFS Kerberized Cloudera Hadoop 集群时。我遇到了问
我正在尝试通过笔记本电脑上安装的 intelliJ 在本地连接到 hdfs。我正在尝试连接的集群是使用边缘节点进行 Kerberized 化的。我为边缘节点生成了一个 key 表,并在下面的代码中进行
我有一个 java 应用程序需要访问 Hadoop 集群以定期(例如,每 24 小时)获取文件。 由于启用了 Kerberos 协议(protocol)来保护该集群,我正在使用 UserGroupIn
我对 Kerberos 很陌生。我正在使用共享的 Hadoop 集群。我的管理员向我提供了用户名和密码以及 KDC 服务器的位置。 是否可以仅使用 JAVA GSS API 和 Hadoop USer
我设置了一个 HDP 集群,其中包含 Spark。我还为集群启用了 Kerberos,因此所有服务和用户都必须通过其主体进行身份验证。 这似乎工作正常,所有服务都在运行,并且用户必须获得有效的 Ker
我正在尝试按照以下文档连接 H2O 和 kerberized Hive:http://docs.h2o.ai/h2o/latest-stable/h2o-docs/getting-data-into-
我需要使用 Kerberos 身份验证将 Http 请求发送到 Hadoop 集群,并且我想使用 Keytab 进行身份验证。 我通过 Apache 找到了一个库 HttpClient,我编写了这段代
我有一个漂亮的 AngularJS 应用程序,它使用 JBoss (WildFly 8) RESTful API 来检索数据。要将它集成到我的公司环境中,它需要 Kerberos 身份验证。我看过数英
我正在尝试对 AWS EMR 集群进行 Kerberize。我启用了 hadoop 安全性,创建了 kerberos 主体并将它们部署在所有节点上。 但是,当我使用命令“sudo start hado
我使用 Hortonworks Data Platform 2.5 设置了一个 Hadoop 集群,其中还包括 Ambari 2.4、Kerberos、Spark 1.6.2 和 HDFS。 我有例如
我正在使用 impyla 模块连接到 kerberized hadoop 集群。我想访问 hiveserver2/hive 但我收到以下错误: test_conn.py from impala.dba
我是一名优秀的程序员,十分优秀!