Spark 的 HBase 客户端无法使用 SASL 在 ZooKeeper 中进行身份验证

HBase client for Spark cannot be authenticated in ZooKeeper using SASL

我正在处理来自 Spark(EMR,在 Yarn 模式下)的 HBase 表。实际上,PySpark——我认为这并不重要。我从 HBase 集群外部通过单独的 Thrift 服务调用 HBase。

看起来我能够连接到 Thrift 服务器,但是 ZooKeeper 有一些问题(因为错误指向 ZooKeeper 端口 2181)。

为什么会发生这种情况,我该如何解决?

17/08/02 20:21:31 INFO ZooKeeper: Client environment:java.io.tmpdir=/tmp
17/08/02 20:21:31 INFO ZooKeeper: Client environment:java.compiler=<NA>
17/08/02 20:21:31 INFO ZooKeeper: Client environment:os.name=Linux
17/08/02 20:21:31 INFO ZooKeeper: Client environment:os.arch=amd64
17/08/02 20:21:31 INFO ZooKeeper: Client environment:os.version=4.4.35-33.55.amzn1.x86_64
17/08/02 20:21:31 INFO ZooKeeper: Client environment:user.name=hadoop
17/08/02 20:21:31 INFO ZooKeeper: Client environment:user.home=/home/hadoop
17/08/02 20:21:31 INFO ZooKeeper: Client environment:user.dir=/home/hadoop/data
17/08/02 20:21:31 INFO ZooKeeper: Initiating client connection, connectString=thrift-internal.production.k8s.prod.node.io:2181 sessionTimeout=180000 watcher=org.apache.hadoop.hbase.zookeeper.PendingWatcher@2818bc0e
17/08/02 20:21:31 INFO ClientCnxn: Opening socket connection to server ip-172-23-115-152.us-west-2.compute.internal/172.23.115.152:2181. Will not attempt to authenticate using SASL (unknown error)

您可以访问您的集群管理器吗? Cloudera 经理。您可以检查 zookeeper 服务是否 运行 正确或那里弹出的任何错误消息。

您可以通过 sudo 服务动物园管理员状态

或者您也可以通过以下方式远程登录 zookeeper 主机:

root@host:~# telnet localhost 2181 正在尝试 127.0.0.1... 连接到我的主机。 转义符是'^]'。 统计数据 Zookeeper 版本:3.4.3-cdh4.0.1--1,构建于 06/28/2012 23:59 GMT

如果您 运行 处于独立模式,则它是一个 JVM 进程,您可以通过 'jps'

检查状态

将显示jvm进程列表;对于具有进程 ID 的动物园管理员来说是这样的 HQuorumPeer

作为 HBase 客户端,您必须同时连接:HBase 服务(直接或通过 Thrift)和 ZooKeeper 服务(通常与 HBase Master 在同一台服务器上运行)。

当您使用 Thrift 服务器连接到 HBase 时,库使用相同的 host 地址与 ZooKeeper 通信。

hbase = happybase.Connection(host, port=port, timeout=10000)

但是,如果 Thrift 服务器在单独的 hardware/IPs.

上工作,则此 ZooKeeper 地址不正确

因此,您必须使用常规代码连接到 Thrift

hbase = happybase.Connection(host, port=port, timeout=10000)

但在通过 hbase.zookeeper.quorum 参数连接到 table 时指定 HBaseHost (ZooKeeper):

   conf = {"hbase.zookeeper.quorum": HBaseHost, "hbase.mapreduce.inputtable": table}
   rdd = spark_context.newAPIHadoopRDD(
        "org.apache.hadoop.hbase.mapreduce.TableInputFormat",
        "org.apache.hadoop.hbase.io.ImmutableBytesWritable",
        "org.apache.hadoop.hbase.client.Result",
        keyConverter=keyConv,
        valueConverter=valueConv,
        conf=conf
    )

ZooKeeper 地址也可能在 hbase-site.xml 中指定为 hbase.zookeeper.quorum 属性。然后您需要将此配置文件包含在您的 HBase 客户端设置中。