转载请注明出处 :http://www.cnblogs.com/xiaodf/

本文档主要用于说明,如何在集群外节点上,部署大数据平台的客户端,此大数据平台已经开启了Kerberos身份验证。通过客户端用户在集群外就可以使用集群内的服务了,如查询集群内的hdfs数据,提交spark任务到集群内执行等操作。

具体部署步骤如下所示:

1、拷贝集群内hadoop相关组件包到客户端

本地创建目录/opt/cloudera/parcels

mkdir –R /opt/cloudera/parcels

拷贝组件包CDH-5.7.2-1.cdh5.7.2.p0.18到目录/opt/cloudera/parcels

进入目录建立软连接

cd /opt/cloudrea/parcels
ln –s CDH-5.7.2-1.cdh5.7.2.p0.18 CDH

2、拷贝集群内hadoop相关配置文件到客户端

创建目录/etc/hadoop,将/etc/hadoop/conf文件夹放入该目录,node1为集群内节点

mkdir /etc/hadoop
scp -r node1:/etc/hadoop/conf /etc/hadoop

创建目录/etc/hive,将/etc/hive/conf文件夹放入该目录

mkdir /etc/hive
scp -r node1:/etc/hive/conf /etc/hive

创建目录/etc/spark,将/etc/spark/conf文件夹放入该目录

mkdir /etc/spark
scp -r node1:/etc/spark/conf /etc/spark

3、拷贝集群内身份验证相关配置文件krb5.conf到客户端

scp node1:/etc/krb5.conf  /etc

4、运行客户端脚本client.sh,文件内容如下:

export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop
export HADOOP_CONF=/etc/hadoop/conf
export HADOOP_CONF_DIR=/etc/hadoop/conf
export YARN_CONF_DIR=/etc/hadoop/conf
export SPARK_CONF_DIR=/etc/spark/conf
#export SPARK_HOME=/opt/cloudera/parcels/CDH/lib/spark
CDH_HOME="/opt/cloudera/parcels/CDH"
export PATH=$CDH_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin/:$PATH
##beeline 连接hive进行sql查询
cd /opt/cloudera/parcels/CDH/bin
./beeline -u "jdbc:hive2://node7:10000/;principal=hive/node7@HADOOP.COM" --config /etc/hive/conf
##执行hdfs命令
#./hdfs --config /etc/hadoop/conf dfs -ls /
##提交spark命令
#cd /opt/cloudera/parcels/CDH/lib/spark/bin
#./spark-shell

注意:

1、客户端要与集群时间同步,否则身份认证会失败;

2、客户端host要添加集群hosts,集群hosts可连接集群某一点获取;

3、集群已开启kerberos身份验证,执行shell命令前,需要kinit进行身份验证,示例如下:

#kinit认证命令
[root@node5 client]# kinit -kt /home/user01.keytab user01
#查看当前用户
[root@node5 client]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: user01@HADOOP.COM Valid starting Expires Service principal
12/01/2016 20:48:50 12/02/2016 20:48:50 krbtgt/HADOOP.COM@HADOOP.COM
renew until 12/08/2016 20:48:50

4、spark jdbc编程,同样需要调用kerberos身份验证,示例如下,完整工程看【spark jdbc 示例】目录下Security

package kerberos.spark;

import org.apache.hadoop.security.UserGroupInformation;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Timer;
import java.util.TimerTask; /*
* 开启权限验证时,可以传入用户principal 和 keytab 进行身份验证
*/
public class sparkjdbc {
public static void main(String args[]) {
final String principal = args[0];//用户对应principal,如user01
final String keytab = args[1];//用户对应keytab,如/home/user01/user01.keytab
String sql = args[2];//业务sql操作语句
try {
//1、身份验证:间隔12小时验证一次
long interval=1;
long now = System.currentTimeMillis();
long start = interval - now % interval;
Timer timer = new Timer();
timer.schedule(new TimerTask(){
public void run() {
org.apache.hadoop.conf.Configuration conf = new org.apache.hadoop.conf.Configuration();
conf.set("hadoop.security.authentication", "Kerberos");
UserGroupInformation.setConfiguration(conf);
try {
UserGroupInformation.loginUserFromKeytab(principal,keytab);
System.out.println("getting connection");
System.out.println("current user: "+UserGroupInformation.getCurrentUser());
System.out.println("login user: "+UserGroupInformation.getLoginUser());
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("execute task!"+ this.scheduledExecutionTime());
}
},start,12*60*60*1000);//定时任务 //正常业务,spark jdbc连接hive进行sql操作
Class.forName("org.apache.hive.jdbc.HiveDriver");
Connection con = DriverManager
.getConnection("jdbc:hive2://node7:10000/;principal=hive/node7@HADOOP.COM");
System.out.println("got connection");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);// executeQuery会返回结果的集合,否则返回空值
System.out.println("打印输出结果:");
while (rs.next()) {
System.out.println(rs.getString(1));// 入如果返回的是int类型可以用getInt()
} con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

部署开启了Kerberos身份验证的大数据平台集群外客户端的更多相关文章

  1. GreenPlum 大数据平台--集群恢复

    一,问题描述 :::: gpinitstandby:greenplum01:gpadmin-[ERROR]:-Cannot use -n option when standby master has ...

  2. 大数据Hadoop-Spark集群部署知识总结(一)

    大数据Hadoop-Spark集群部署知识总结 一.启动/关闭 hadoop myhadoop.sh start/stop 分步启动: 第一步:在hadoop102主机上 sbin/start-dfs ...

  3. 大数据——Hadoop集群坏境CentOS安装

    前言 前面我们主要分析了搭建Hadoop集群所需要准备的内容和一些提前规划好的项,本篇我们主要来分析如何安装CentOS操作系统,以及一些基础的设置,闲言少叙,我们进入本篇的正题. 技术准备 VMwa ...

  4. 一台虚拟机,基于docker搭建大数据HDP集群

    前言 好多人问我,这种基于大数据平台的xxxx的毕业设计要怎么做.这个可以参考之前写得关于我大数据毕业设计的文章.这篇文章是将对之前的毕设进行优化. 个人觉得可以分为两个部分.第一个部分就是基础的平台 ...

  5. 王雅超的学习笔记-大数据hadoop集群部署(十)

    Spark集群安装部署

  6. 大数据 -- Hadoop集群环境搭建

    首先我们来认识一下HDFS, HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.它其实是将一个大文件分成若干块保存在不同服务器的多个节点中.通过联网 ...

  7. [转]大数据hadoop集群硬件选择

      问题导读 1.哪些情况会遇到io受限制? 2.哪些情况会遇到cpu受限制? 3.如何选择机器配置类型? 4.为数据节点/任务追踪器提供的推荐哪些规格? 随着Apache Hadoop的起步,云客户 ...

  8. 入门大数据---Redis集群分布式学习

    Redis是什么? 官方介绍: Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列( ...

  9. 大数据-HDFS 集群搭建的配置文件

    1.HDFS简单版集群搭建相关配置文件 1.core-site.xml文件 <property> <name>fs.defaultFS</name> <val ...

随机推荐

  1. C# Winform 界面线程的Invoke死锁,以及Application.DoEvent的问题

    1.对于非界面线程来说,Invoke是把一个操作丢到界面线程的队列里,然后阻塞,等到这个操作被界面线程完成后,才继续后续操作.也就是说,Invoke是同步的. 问题来了,如果界面线程此时正在等待这个非 ...

  2. 大endian和little endian

    大endian和little endian      一般Intel处理器或X86平台是小端 ,只是有点老了摩托罗拉的处理器将采用大端,掌握一下小端序.     小端序一般指低地址存低字节.高地址存高 ...

  3. ubuntu安装nVidia驱动,遇到终端闪砾问题并解决

    安装nvidia的官方驱动之后,比起nouvean来说感觉速度快了不少. 安装该驱动很简单,但选择哪个驱动是要注意的.因为今天我试了nvidia的多个驱动后都在ubuntu下用起来并不好. 我现在的环 ...

  4. Android正在使用Handler实现消息分发机制(两)

    在开始这篇文章之前,.首先,我们在总结前两篇文章Handler, Looper和MessageQueue像一些关键点: 0)在创建线程Handler之前,你必须调用Looper.prepare(), ...

  5. 因下面文的损坏或丢失windows/system32/config/system 解决方法

    这是因为你电脑的初始化文件遭破坏所致.导致破坏的原因也可能是病毒或其它原因. 因为Windows启动须要读取Syatem.ini,Win.ini和注冊表文件,假设C盘根文件夹下有config.sys, ...

  6. [C++] 获取IE代理server的账号password

    非常多程序须要使用'浏览器设置'的代理server,IE设置的代理server有可能是须要账号password的.如何编程获取浏览器设置的代理server的账号password呢? InternetQ ...

  7. 异步陷阱之IO

    异步陷阱之IO篇 很多教程和资料都强调流畅的用户体验需要异步来辅助,核心思想就是保证用户前端的交互永远有最高的优先级,让一切费时的逻辑通通放到后台,等到诸事完备,通知一下前端给个提示或者继续下一步.随 ...

  8. setTimeout与setInterval的区别

    setTimeout与setInterval的区别:1.setTimeout设置后隔指定时间后只会执行一次2.setInterval设置后会每隔指定时间执行一次3.setTimeout一般在方法内部使 ...

  9. 让VS2010记住TFS的登陆用户名和密码

    用VS进行团队开发的都知道,每次打开VS连接TFS的时候,都要提示输入用户名和密码,每次都这样无疑感觉太多此一举了(当然你不想别人操作你的电脑就直接进入项目就没必要这么做),为了像连接远程那样可以记住 ...

  10. thrift之TTransport层的内存缓存传输类TMemoryBuffer

    内存缓存是简单的在内存进行读写操作的一种传输,任何时候想在上面写入数据都是放入缓存中,任何时候读操作数据也是来至于缓存.内存缓存的分配使用c语言的malloc类函数,分配的长度是需要长度的两倍,需要考 ...