Streamsets Mapr FS origin/dest。 KerberosPrincipal 异常(使用 hadoop 模拟(在 mapr 6.0 中))

Streamsets Mapr FS origin/dest. KerberosPrincipal exception (using hadoop impersonation (in mapr 6.0))

我正在尝试执行从 mapr fs originmapr fs destination 的简单数据移动(这不是我的用例,只是为了测试目的而执行此简单移动)。尝试 validate 此管道时,我在暂存区看到的错误消息是:

HADOOPFS_11 - Cannot connect to the filesystem. Check if the Hadoop FS location: 'maprfs:///mapr/mycluster.cluster.local' is valid or not: 'java.io.IOException: Provided Subject must contain a KerberosPrincipal

使用 hadoop fs URI 字段的不同变体(例如 mfs:///mapr/mycluster.cluster.local、maprfs:///mycluster.cluster.local)不会似乎有帮助。尝试验证后查看日志,我看到

2018-01-04 10:28:56,686     mfs2mfs/mapr2sqlserver850bfbf0-6dc0-4002-8d44-b73e33fcf9b3  INFO    Created source of type: com.streamsets.pipeline.stage.origin.maprfs.ClusterMapRFSSource@16978460    DClusterSourceOffsetCommitter   *admin      preview-pool-1-thread-3

2018-01-04 10:28:56,697     mfs2mfs/mapr2sqlserver850bfbf0-6dc0-4002-8d44-b73e33fcf9b3  INFO    Error connecting to FileSystem: java.io.IOException: Provided Subject must contain a KerberosPrincipal  ClusterHdfsSource   *admin      preview-pool-1-thread-3

java.io.IOException: Provided Subject must contain a KerberosPrincipal
....

2018-01-04 10:20:39,159     mfs2mfs/mapr2mapr850bfbf0-6dc0-4002-8d44-b73e33fcf9b3   INFO    Authentication Config:  ClusterHdfsSource   *admin      preview-pool-1-thread-3

2018-01-04 10:20:39,159     mfs2mfs/mapr2mapr850bfbf0-6dc0-4002-8d44-b73e33fcf9b3   ERROR   Issues: Issue[instance='MapRFS_01' service='null' group='HADOOP_FS' config='null' message='HADOOPFS_11 - Cannot connect to the filesystem. Check if the Hadoop FS location: 'maprfs:///mapr/mycluster.cluster.local' is valid or not: 'java.io.IOException: Provided Subject must contain a KerberosPrincipal'']    ClusterHdfsSource   *admin      preview-pool-1-thread-3

2018-01-04 10:20:39,169     mfs2mfs/mapr2mapr850bfbf0-6dc0-4002-8d44-b73e33fcf9b3   INFO    Validation Error: Failed to configure or connect to the 'maprfs:///mapr/mycluster.cluster.local' Hadoop file system: java.io.IOException: Provided Subject must contain a KerberosPrincipal     HdfsTargetConfigBean    *admin  0   preview-pool-1-thread-3

java.io.IOException: Provided Subject must contain a KerberosPrincipal
....

然而,据我所知,系统不是 运行 Keberos,所以这个错误信息让我有点困惑。在 sdc environment variable file 中为本机 mapr 身份验证取消注释 #export SDC_JAVA_OPTS="-Dmaprlogin.password.enabled=true ${SDC_JAVA_OPTS}" 似乎无助于解决问题(即使在 运行 streamsets mapr 安装脚本之前重新安装和注释此行)。

有谁知道发生了什么以及如何解决它?谢谢。

这个答案是在 mapr 社区 forums 上提供的,对我有用(使用 mapr v6.0)。请注意,此处的说明 与流集文档当前提供的说明不同。在这些说明中,我以用户 root.

身份登录

按照文档安装流集(和 mapr 先决条件)后...

  1. 将流集 $SDC_DIST$SDC_HOME 位置的所有者更改为 mapr 用户(或您计划用于 hadoop 模拟的任何其他用户):$chown -R mapr:mapr $SDC_DIST(对于我这是 /opt/streamsets-datacollector 目录。)。对 $SDC_CONF(对我来说是 /etc/sdc)以及 /var/lib/sdcvar/log/sdc.
  2. 做同样的事情
  3. $SDC_DIST/libexec/sdcd-env.sh中,将用户名和组名(靠近文件顶部)设置为mapr用户"mapr"并启用mapr密码登录。该文件最终应如下所示:

    # user that will run the data collector, it must exist in the system
    #
    export SDC_USER=mapr
    
    # group of the user that will run the data collector, it must exist in the system
    #
    export SDC_GROUP=mapr
    ....
    # Indicate that MapR Username/Password security is enabled
    export SDC_JAVA_OPTS="-Dmaprlogin.password.enabled=true ${SDC_JAVA_OPTS}
    
  4. 编辑文件 /usr/lib/systemd/system/sdc.service 使其看起来像:

    [Service] 
    User=mapr 
    Group=mapr
    
  5. $cd/etc/systemd/system/ 并创建一个名为 sdc.service.d 的目录。在该目录中,创建一个文件(使用 any 名称)并添加内容(不带空格):

    Environment=SDC_JAVA_OPTS=-Dmaprlogin.passowrd.enabled=true
    
  6. 如果您使用的是 mapr 的 sasl ticket auth。系统(或类似的东西),在 运行 流集的节点上为该用户生成一张票。在这种情况下,使用 $maprlogin password 命令。

  7. 最后,重启sdc服务:$systemctl deamon-reload然后$systemctl retart sdc

运行 类似 $ps -aux | grep sdc | grep maprlogin 的东西来检查 sdc 进程是否由 mapr 拥有并且 -Dmaprlogin.passowrd.enabled=true 参数已成功设置。完成后,应该能够 validate/run maprFS 以批处理模式在 streamsets pipeline builder 中进行 maprFS 操作。

** 注意:如果使用 Hadoop Configuration Directory 参数。而不是 Hadoop FS URI,请记住将文件放在 $HADOOP_HOME/conf 目录中(eg.hadoop-site.xml、yarn-site.xml 等)(在mapr,类似 /opt/mapr/hadoop/hadoop-<version>/etc/hadoop/) 软linked 或硬复制到目录 $SDC_DIST/resource/<some hadoop config dir. you made need to create>(我只是在目录中复制 eberything)并将此路径添加到 Hadoop Configuration Directory 参数。为您的 MaprFS(或 HadoopFS)。在 sdc web UI Hadoop 配置目录框中,它看起来像 Hadoop Configuration Directory: <the directory within $SDC_DIST/resources/ that holds the hadoop files>.

** 注意: 如果您仍在记录表单的错误

 2018-01-16 14:26:10,883
    ingest2sa_demodata_batch/ingest2sademodatabatchadca8442-cb00-4a0e-929b-df2babe4fd41
    ERROR   Error in Slave Runner:  ClusterRunner   *admin
        runner-pool-2-thread-29
 com.streamsets.datacollector.runner.PipelineRuntimeException:
 CONTAINER_0800 - Pipeline
 'ingest2sademodatabatchadca8442-cb00-4a0e-929b-df2babe4fd41'
 validation error : HADOOPFS_11 - Cannot connect to the filesystem.
 Check if the Hadoop FS location: 'maprfs:///' is valid or not:
 'java.io.IOException: Provided Subject must contain a
 KerberosPrincipal'

您可能还需要将 -Dmaprlogin.password.enabled=true 添加到流水线的 /cluster/Worker Java Options 选项卡,用于源和目标 hadoop FS 阶段。

** 在 mapr 社区 link 播放的视频 link 还说要为 sdc 用户生成一个 mapr 票证(当 [=102= 时 sdc 进程运行的默认用户) ] 作为一项服务),但我没有这样做,而且该解决方案对我仍然有效(因此,如果有人知道为什么无论如何都应该这样做,请在评论中告诉我)。