Hadoop集群客户端配置

网易提供大数据集群默认开启Kerberos认证,用户如需配置客户端,先完成Kerberos及JDK基础依赖配置及客户端与集群网络环境打通;具体需开通网络端口见 数开平台相关网络端口列表(kerberos的udp端口必须开通,否则会认证失败)
  1. 用户环境如无法提供yum源且无法联通外网,可联系运维人员完成JDK及Kerberos客户端安装;
  2. 集群默认部署路径一般为/usr/easyops/,可通过easyops确认默认部署路径是否进行自定义调整;

Demo - Hadoop客户端配置 - 图1

主机名映射
如用户环境主机已配置DNS服务,则可跳过该步骤,如未配置DNS服务,则需在客户端主机手工配置主机名映射;
# 通过系统配置文件/etc/hosts添加集群节点主机名映射,保留该文件原有内容,在文件末尾追加集群相关节点映射关系即可,格式如下
##  IP地址  主机名
192.168.1.2 demo01.xxx.com
JDK配置
客户端需依赖JDK环境,推荐从集群节点打包拷贝至客户端主机上解压配置使用;自行安装推荐JDK版本1.7以上,建议安装 OpenJDK;

如使用Oracle JDK,需手动下载JCE相关UnlimitedJCEPolicy包(local_policy.jar和US_export_policy.jar)至$JAVA_HOME/jre/lib/security目录下;
下载地址为:JCE下载地址

# 方式1. 使用集群JDK,默认部署目录为/usr/easyops/jdk8(可通过easyops确认默认部署路径),直接将整个文件夹打包拷贝至客户端解压并添加到环境变量中
# 以我们Demo环境为例,JDK解压路径为/opt/wks/jdk8,将其添加至~/.bash_profile中,登陆自动加载
export JAVA_HOME=/opt/wks/jdk8
export PATH=$JAVA_HOME/bin:$PATH

# 方式2. 自行基于yum预案安装
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

Demo - Hadoop客户端配置 - 图2

Kerberos配置
## 1. 安装Kerberos客户端及其依赖包
yum install krb5-devel krb5-workstation  -y

## 2. 配置Kerberos服务器信息,配置信息从集群任意节点拷贝即可,配置文件路径为/etc/krb5.conf

## 3. 验证,需先通过数开平台-个人中心下载keytab文件并上传至客户端节点,如返回结果为当前时间则为配置成功
kinit -kt admin.mammut.keytab `klist -kt admin.mammut.keytab |awk '{ print $4}'|sed -n '5p'`  && klist

BASE_DIR的路径一般为/usr/easyops

HDFS客户端
$BASE_DIR/hdfs/default_hdfs_client/current/$BASE_DIR/hdfs/default_hdfs_client/config/两个软链指向的目录分别打包,并拷贝至客户端节点解压;
# Azkaban Exec所在节点打包
tar -czvf hdfs_client.tar.gz $BASE_DIR/hdfs/default_hdfs_client/current/
tar -czvf hdfs_config.tar.gz  $BASE_DIR/hdfs/default_hdfs_client/config/

# 客户端节点解压,/opt/wks目录可根据用户需要自定指定
tar -zxvf hdfs_client.tar.gz -C  /opt/wks/hdfs_client
tar -zxvf  hdfs_config.tar.gz -C  /opt/wks/hdfs_client/etc/hadoop

# 删除环境变量文件
rm -rf /opt/wks/hdfs_client/etc/hadoop  hadoop-env.sh

# 设置环境变量
export HADOOP_HOME=/opt/wks/hdfs_client

# Kerberos认证,如keytab文件不在当前目录,需指定keytab文件相对路径或绝对路径
klist -kt admin.mammut.keytab |awk '{print $4}'|grep -v '^$'|head -n 1 |xargs kinit -kt admin.mammut.keytab

# 验证客户端
hdfs dfs -ls  /user
HIVE客户端
$BASE_DIR/hive/default_hive_client/current/软链指向的目录打包并拷贝至客户端节点解压;
#  Azkaban Exec所在节点打包 
tar -czvf hive_client.tar.gz  $BASE_DIR/hive/default_hive_client/current/

# 客户端节点解压,其中/opt/wks目录可根据用户需要自定指定
tar -zxvf hive_client.tar.gz -C  /opt/wks/hive_client

# 删除无用软链
rm -rf /opt/wks/hive_client/conf

# 设置环境变量
export HIVE_HOME=/opt/wks/hive_client
SPARK客户端
$BASE_DIR/spark2/default_spark2_client/current/$BASE_DIR/spark2/default_spark2_client/config/以及$BASE_DIR/yarn/default_yarn_client/config/软链指向的目录打包并拷贝至客户端节点解压;
#  Azkaban Exec所在节点打包 
tar -czvf spark_client.tar.gz  $BASE_DIR/spark2/default_spark2_client/current/
tar -czvf spark_config.tar.gz  $BASE_DIR/spark2/default_spark2_client/config/
tar -czvf yarn_config.tar.gz  $BASE_DIR/yarn/default_yarn_client/config/

# 客户端节点解压,其中/opt/wks目录可根据用户需要自定指定
tar -zxvf spark_client.tar.gz -C  /opt/wks/spark_client
tar -zxvf spark_config.tar.gz -C  /opt/wks/spark_client/conf
tar -zxvf yarn_config.tar.gz -C  /opt/wks/hdfs_client/etc/hadoop

# 删除/opt/wks/spark_client/conf/spark-defaults.conf配置文件中与路径相关配置项,如果路径中存在spark-env.sh,则删除该文件

# 设置环境变量
export SPARK_HOME=/opt/wks/spark_client
export HADOOP_CONF_DIR=/opt/wks/hdfs_client/etc/hadoop
IMPALA客户端

$BASE_DIR/impala/default_impala_client/current/$BASE_DIR/impala/default_impala_client/current/config/软链指向的目录打包并拷贝至客户端节点解压;

# 任意一个Impalad所在节点打包 
tar -czvf impala_client.tar.gz  $BASE_DIR/impala/default_impala_client/current/
tar -czvf spark_config.tar.gz  $BASE_DIR/impala/default_impala_client/config/

# 客户端节点解压,其中/opt/wks目录可根据用户需要自定指定
tar -zxvf impala_client.tar.gz -C  /opt/wks/impala_client
tar -zxvf impala_client.tar.gz -C  /opt/wks/impala_client/conf


# 设置环境变量
export IMPALA_HOME=/opt/wks/impala_client
  1. 使用beeline链接hive或impala,需依赖hadoop客户端
  2. 同时配置Hive和Spark客户端时,引入环境变量的顺序需保持HIVE_HOME优先SPARK_HOME,即需先引入HIVE_HOME,然后再引入SPARK_HOME,如放在同一行命令中,需保持HIVE_HOME在SPARH_HOME前面;
  3. 以上环境变量相关配置可合并为一个配置文件,将配置文件添加至~/.bash_profile中,每次登陆用户自动加载
FAQ
FAQ1:

Qjavax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt

A:使用OracleJDK但未安装 jce 相关 jar 包导致,参考上文安装 JDK

FAQ2:

Qkinit: Client not found in Kerberos database while getting initial credentials

A:该问题为kerberos跨域导致的,可使用完整principal或调整krb5.confdefault_realmkeytab文件中realm一致解决

FAQ3:

Q3: Failed to find Spark jars directory (/usr/easyops/spark2/default_spark2/client/20……

A: 此类问题一般为配置文件或环境变量配置存在问题,根据报错中提示的路径对应组件,找到该组件配置文件并删除其中路径相关配置即可

作者:wangsong