In this tutorial I will show you how to use Kerberos with Phoenix. Before you begin ensure you have installed Kerberos Server, Hadoop, HBase and Zookeeper.
This assumes your hostname is “hadoop”
Install Phoenix
wget http://apache.forsale.plus/phoenix/apache-phoenix-5.0.0-HBase-2.0/bin/apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz tar -zxvf apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz sudo mv apache-phoenix-5.0.0-HBase-2.0-bin /usr/local/phoenix/ cd /usr/local/phoenix/
Setup .bashrc:
sudo nano ~/.bashrc
Add the following to the end of the file.
#PHOENIX VARIABLES START
export PHOENIX_HOME=/usr/local/phoenix
export PHOENIX_CLASSPATH=$PHOENIX_HOME/*
export PATH=$PATH:$PHOENIX_HOME/bin
#PHOENIX VARIABLES END
source ~/.bashrc
Link Files
ln -sf $HBASE_CONF_DIR/hbase-site.xml $PHOENIX_HOME/bin/hbase-site.xml ln -sf $HADOOP_CONF_DIR/core-site.xml $PHOENIX_HOME/bin/core-site.xml ln -sf $PHOENIX_HOME/phoenix-5.0.0-HBase-2.0-server.jar $HBASE_HOME/lib/phoenix-5.0.0-HBase-2.0-server.jar
hbase-env.sh
nano /usr/local/hbase/conf/hbase-env.sh #Ensure the following env variables are set export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-/usr/local/hadoop/etc/hadoop} export PHOENIX_CLASSPATH=${PHOENIX_CLASSPATH:-/usr/local/phoenix} export HBASE_CLASSPATH="$HBASE_CLASSPATH:$CLASSPATH:$HADOOP_CONF_DIR:$PHOENIX_CLASSPATH/phoenix-5.0.0-HBase-2.0-server.jar:$PHOENIX_CLASSPATH/phoenix-core-5.0.0-HBase-2.0.jar:$PHOENIX_CLASSPATH/phoenix-5.0.0-HBase-2.0-client.jar"
hbase-site.xml
nano /usr/local/hbase/conf/hbase-site.xml #Add the following properties <property> <name>phoenix.functions.allowUserDefinedFunctions</name> <value>true</value> <description>enable UDF functions</description> </property> <property> <name>hbase.regionserver.wal.codec</name> <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value> </property> <property> <name>hbase.region.server.rpc.scheduler.factory.class</name> <value>org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory</value> <description>Factory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates</description> </property> <property> <name>hbase.rpc.controllerfactory.class</name> <value>org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory</value> <description>Factory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates</description> </property> <property> <name>hbase.defaults.for.version.skip</name> <value>true</value> </property> <property> <name>phoenix.queryserver.http.port</name> <value>8765</value> </property> <property> <name>phoenix.queryserver.serialization</name> <value>PROTOBUF</value> </property> <property> <name>phoenix.queryserver.keytab.file</name> <value>/etc/security/keytabs/hbase.service.keytab</value> </property> <property> <name>phoenix.queryserver.kerberos.principal</name> <value>hbase/hadoop@REALM.CA</value> </property> <property> <name>hoenix.queryserver.http.keytab.file</name> <value>/etc/security/keytabs/hbaseHTTP.service.keytab</value> </property> <property> <name>phoenix.queryserver.http.kerberos.principal</name> <value>hbaseHTTP/hadoop@REALM.CA</value> </property> <property> <name>phoenix.queryserver.dns.nameserver</name> <value>hadoop</value> </property> <property> <name>phoenix.queryserver.dns.interface</name> <value>enp0s3</value> </property> <property> <name>phoenix.schema.mapSystemTablesToNamespace</name> <value>true</value> </property> <property> <name>phoenix.schema.isNamespaceMappingEnabled</name> <value>true</value> </property>
sqlline.py
sqlline.py hadoop:2181:/hbase-secure:hbase/hadoop@GAUDREAULT_KDC.CA:/etc/security/keytabs/hbase.service.keytab