(1)hadoop2.7.1源码编译 http://zilongzilong.iteye.com/blog/2246856
(2)hadoop2.7.1安装准备 http://zilongzilong.iteye.com/blog/2253544
(3)hadoop2.7.1安装 http://zilongzilong.iteye.com/blog/2245547
(4)hbase安装准备 http://zilongzilong.iteye.com/blog/2254451
(5)hbase安装 http://zilongzilong.iteye.com/blog/2254460
(6)snappy安装 http://zilongzilong.iteye.com/blog/2254487
(7)hbase性能优化 http://zilongzilong.iteye.com/blog/2282670
(8)雅虎YCSBC测试hbase性能测试 http://zilongzilong.iteye.com/blog/2248863
(9)spring-hadoop实战 http://zilongzilong.iteye.com/blog/2254491
(10)hadoop hbase kerberos http://zilongzilong.iteye.com/blog/2287536
1.hadoop安全机制历史
在Hadoop1.0.0或者CDH3 版本之前, hadoop并不存在安全认证一说。默认集群内所有的节点都是可靠的,值得信赖的。用户与HDFS或者M/R进行交互时并不需要进行验证。导致存在恶意用户伪装成真正的用户或者服务器入侵到hadoop集群上,恶意的提交作业,修改JobTracker状态,篡改HDFS上的数据,伪装成NameNode 或者TaskTracker接受任务等。 尽管在版本0.16以后, HDFS增加了文件和目录的权限,但是并没有强认证的保障,这些权限只能对偶然的数据丢失起保护作用。恶意的用户可以轻易的伪装成其他用户来篡改权限,致使权限设置形同虚设。不能够对Hadoop集群起到安全保障。
在Hadoop1.0.0或者CDH3版本后,加入了Kerberos认证机制。使得集群中的节点就是它们所宣称的,是信赖的。Kerberos可以将认证的密钥在集群部署时事先放到可靠的节点上。集群运行时,集群内的节点使用密钥得到认证。只有被认证过节点才能正常使用。企图冒充的节点由于没有事先得到的密钥信息,无法与集群内部的节点通信。防止了恶意的使用或篡改Hadoop集群的问题,确保了Hadoop集群的可靠安全。
2.Hadoop面临的安全问题
2.1 用户到服务器的认证问题
1)NameNode,,JobTracker上没有用户认证
用户可以伪装成其他用户入侵到一个HDFS 或者MapReduce集群上。
2)DataNode上没有认证
Datanode对读入输出并没有认证。导致如果一些客户端如果知道block的ID,就可以任意的访问DataNode上block的数据
3)JobTracker上没有认证
可以任意的杀死或更改用户的jobs,可以更改JobTracker的工作状态
2.2 服务器到服务器的认证问题
1)没有DataNode, TaskTracker的认证
用户可以伪装成datanode ,tasktracker,去接受JobTracker, Namenode的任务指派。
3.安全机制
3.1Java的安全机制
详细介绍请参考JAAS:灵活的Java安全机制
简单来说,用户首先使用LoginContext的接口进行登录验证。LoginContext可以配置使用不同的验证协议。验证通过后,用户得到一个subject,里面包含凭证,公私钥等。之后,在涉及到需要进行权限认证的地方(例如,资源访问,外部链接校验,协议访问等),使用doAs函数()代替直接执行。
这样,java的权限认证就和用户的业务逻辑分离了。
//一段典型的代码如下
LoginContext lc = new LoginContext("MyExample"); try { lc.login(); } catch (LoginException) { // Authentication failed. } // Authentication successful, we can now continue. // We can use the returned Subject if we like. Subject sub = lc.getSubject(); Subject.doAs(sub, new MyPrivilegedAction());
3.2Kerberos认证协议
Kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。
简单介绍
使用Kerberos时,一个客户端需要经过三个步骤来获取服务:
认证:客户端向认证服务器发送一条报文,并获取一个含时间戳的Ticket-Granting Ticket(TGT)。
授权:客户端使用TGT向Ticket-Granting Server(TGS)请求一个服务Ticket。
服务请求:客户端向服务器出示服务Ticket,以证实自己的合法性。该服务器提供客户端所需服务,在Hadoop应用中,服务器可以是namenode或jobtracker。
为此,Kerberos需要The Key Distribution Centers(KDC)来进行认证。KDC只有一个Master,可以带多个slaves机器。slaves机器仅进行普通验证。Mater上做的修改需要自动同步到slaves。
另外,KDC需要一个admin,来进行日常的管理操作。这个admin可以通过远程或者本地方式登录。
4.Hadoop Kerberos安全机制安装
安装这里就不讲解了,网上资料一大堆
5.kerberos安装后,hbase客户端链接的变化
5.1 客户端链接kerberos的准备
一台机器叫hbaseclient.com,首先在其上安装kerberos客户端,安装后连接kadmin工具创建用户test,并生成keytab文件
kinit admin/admin kadmin: addprinc -randkey test kadmin: xst -k test.keytab test
5.2 未安装kerberos之前,hbase客户端链接代码
public class Test1 { public static void main(String[] args) throws IOException { Configuration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "zookeeperserver1,zookeeperserver2,zookeeperserver3"); conf.set("hbase.zookeeper.property.clientPort", "2181"); HTable t = new HTable(conf, "test"); Scan s = new Scan(); ResultScanner rs = t.getScanner(s); try{ for(Result r:rs){ for(Cell cell:r.rawCells()){ System.out.println("Row: "+new String(CellUtil.cloneRow(cell))); System.out.println("CF: "+new String(CellUtil.cloneFamily(cell))); System.out.println("Qualifier: "+new String(CellUtil.cloneQualifier(cell))); System.out.println("Value: "+new String(CellUtil.cloneValue(cell))); } } }finally{ t.close(); } System.out.println("Done!"); }
5.3 安装kerberos之后,hbase客户端链接代码
public class Test1 { public static void main(String[] args) throws IOException { Configuration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "zookeeperserver1,zookeeperserver2,zookeeperserver3"); conf.set("hbase.zookeeper.property.clientPort", "2181"); conf.set("hadoop.security.authentication", "kerberos"); UserGroupInformation.setConfiguration(conf); UserGroupInformation.loginUserFromKeytab("hbaseclient.com", "/home/test/test.keytab"); HTable t = new HTable(conf, "test"); Scan s = new Scan(); ResultScanner rs = t.getScanner(s); try{ for(Result r:rs){ for(Cell cell:r.rawCells()){ System.out.println("Row: "+new String(CellUtil.cloneRow(cell))); System.out.println("CF: "+new String(CellUtil.cloneFamily(cell))); System.out.println("Qualifier: "+new String(CellUtil.cloneQualifier(cell))); System.out.println("Value: "+new String(CellUtil.cloneValue(cell))); } } }finally{ t.close(); } System.out.println("Done!"); }
6.spring-data-hadoop中如何使用kerberos
6.1 kerberos安装之前配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hdp="http://www.springframework.org/schema/hadoop" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/hadoop http://www.springframework.org/schema/hadoop/spring-hadoop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> <!-- 默认的hadoopConfiguration,默认ID为hadoopConfiguration,且对于file-system等不需指定ref,自动注入hadoopConfiguration --> <hdp:configuration> fs.defaultFS=hdfs://master:9000/ </hdp:configuration> <!-- hadoop hdfs 操作类FileSystem,用来读写HDFS文件 --> <hdp:file-system id="hadoop-cluster" uri="hdfs://master:9000/" /> <!-- 配置zookeeper地址和端口 --> <hdp:hbase-configuration configuration-ref="hadoopConfiguration" zk-quorum="zookeeperserver1,zookeeperserver2,zookeeperserver3" zk-port="2181"> </hdp:hbase-configuration> <!-- 配置HbaseTemplate --> <bean id="hbaseTemplate" class="org.springframework.data.hadoop.hbase.HbaseTemplate"> <property name="configuration" ref="hbaseConfiguration" /> </bean> </beans>
6.2 kerberos安装之后配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hdp="http://www.springframework.org/schema/hadoop" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/hadoop http://www.springframework.org/schema/hadoop/spring-hadoop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> <!-- 默认的hadoopConfiguration,默认ID为hadoopConfiguration,且对于file-system等不需指定ref,自动注入hadoopConfiguration --> <hdp:configuration> fs.defaultFS=hdfs://master:9000/ hadoop.security.authentication=kerberos hadoop.security.authorization=true keyTab=/home/test/test.keytab principal=hbaseclient.com </hdp:configuration> <!-- hadoop hdfs 操作类FileSystem,用来读写HDFS文件 --> <hdp:file-system id="hadoop-cluster" uri="hdfs://master:9000/" /> <!-- 配置zookeeper地址和端口 --> <hdp:hbase-configuration configuration-ref="hadoopConfiguration" zk-quorum="zookeeperserver1,zookeeperserver2,zookeeperserver3" zk-port="2181"> </hdp:hbase-configuration> <!-- 配置HbaseTemplate --> <bean id="hbaseTemplate" class="org.springframework.data.hadoop.hbase.HbaseTemplate"> <property name="configuration" ref="hbaseConfiguration" /> </bean> </beans>
7.以上配置是参见hadoop-common-2.6.0.jar中源码org.apache.hadoop.security.UserGroupInformation.java得知
8.参考资料
Hadoop Kerberos安全机制介绍 http://dongxicheng.org/mapreduce/hadoop-kerberos-introduction/
Hadoop的kerberos的实践部署 http://blog.csdn.net/xiao_jun_0820/article/details/39375819
Hadoop的kerberos的实践部署 http://bbs.superwu.cn/forum.php?mod=viewthread&tid=331&extra=
相关推荐
为搭建Hadoop2.2+Zookeeper3.4.5+HBase0.96集群环境,需要至少3台Linux机器,建议使用Centos6.4 64位操作系统,每台机器建议配置不低于4G内存和10G磁盘空间。 软件方面,需要安装jdk-7u55-linux-x64.rpm、apache-...
本篇将详细阐述如何在Hadoop 2.7.1环境下搭建HBase 1.2.1集群,并进行性能优化,以提升系统效率。 首先,我们需要了解Hadoop和HBase的基本概念。Hadoop是基于分布式文件系统HDFS(Hadoop Distributed File System)...
本压缩包提供了这些组件的安装部署资源,便于快速搭建一个完整的Hadoop2.7.1、ZK3.5、HBase2.1和Phoenix5.1.0的基础环境。 首先,Hadoop是Apache开源项目,它提供了分布式文件系统(HDFS)和MapReduce计算框架,...
标题 "hadoop2.7.1+hbase2.1.4+zookeeper3.6.2.rar" 提供的信息表明这是一个包含Hadoop 2.7.1、HBase 2.1.4和ZooKeeper 3.6.2的软件集合。这个压缩包可能包含了这些分布式系统的安装文件、配置文件、文档以及其他...
### Hadoop2.7.1 + HBase1.3.5 在 CentOS6.5 虚拟机环境下的安装配置指南 #### 准备工作 为了确保 Hadoop 和 HBase 的顺利安装,需要提前做好一系列准备工作,包括安装 VMware、设置虚拟机、配置 CentOS 操作系统等...
- 在Hadoop集群运行的基础上安装HBase,确保Hadoop的相关环境变量被HBase使用。 - 配置HBase的`hbase-site.xml`以指定Zookeeper地址和集群模式。 - 启动HBase服务,包括Master和RegionServer。 3. **Spark**:...
在大数据处理领域,Hadoop、HBase和Zookeeper是三个至关重要的组件,它们共同构建了一个高效、可扩展的数据处理和存储环境。以下是关于这些技术及其集群配置的详细知识。 首先,Hadoop是一个开源的分布式计算框架,...
在本文档中,我们详细地介绍了Hadoop+Hbase+Spark+Hive的搭建过程,包括环境准备、主机设置、防火墙设置、环境变量设置、Hadoop安装、Hbase安装、Spark安装和Hive安装。本文档旨在指导读者从零开始搭建Hadoop+Hbase+...
在安装Hadoop时,通常需要配置集群环境,包括主节点和从节点,并确保所有节点之间的网络通信畅通。 Spark是大数据处理的另一个关键组件,它支持批处理、交互式查询(通过Spark SQL)、实时流处理(通过Spark ...
在大数据处理领域,Hadoop、Zookeeper和HBase是三个非常关键的组件,它们共同构建了一个高效、可扩展的数据仓库集群。以下是对这三个组件及其在集群搭建中的配置说明的详细阐述。 1. Hadoop:Hadoop是Apache软件...
在构建Hadoop+HBase+Hive集群的过程中,涉及了多个关键步骤和技术要点,下面将对这些知识点进行详细的解析。 ### 1. 时间同步:NTP配置 在分布式系统中,时间的一致性至关重要,特别是在处理日志、事件排序以及...
本文将详细介绍如何搭建Hadoop+HBase集群,包括前提准备、机器集群结构分布、硬件环境、软件准备、操作步骤等。 一、前提准备 在搭建Hadoop+HBase集群之前,需要准备以下几个组件: 1. Hadoop:Hadoop是一个基于...
Hadoop 2.6.0+Hbase1.12+mahout0.9 集群搭建,自己写的,可以根据实际情况搭建伪分布式或者完全分布式。
在构建大数据处理环境时,Linux环境下的Hadoop2.6+Hbase1.2集群安装部署是基础步骤,而Spark分布式集群的搭建则是提升数据处理效率的关键。这些技术的组合使用,可以为大规模数据处理提供高效、可靠的解决方案。 ...
本项目旨在搭建一套完整的Spark集群环境,包括Hadoop HA(高可用)、HBase、Phoenix、Kafka、Flume、Zookeeper以及Scala等多个组件的集成。这样的环境适用于大规模的数据处理与分析任务,能够有效地支持实时数据流...
jdk1.8.0_131、apache-zookeeper-3.8.0、hadoop-3.3.2、hbase-2.4.12 mysql5.7.38、mysql jdbc驱动mysql-connector-java-8.0.8-dmr-bin.jar、 apache-hive-3.1.3 2.本文软件均安装在自建的目录/export/server/下 ...
本教程将深入探讨如何利用Hadoop2.7.3、HBase1.2.5和ZooKeeper3.4.6搭建一个完整的分布式集群环境,以支持大规模数据存储和处理。 首先,我们来了解下这三个组件的基本概念: 1. **Hadoop**:Apache Hadoop是一个...
### Hadoop+Zookeeper+Hbase集群搭建知识点详解 #### 一、安装环境要求 **1.1 HBase与JDK兼容性** - **Apache HBase** 的版本选择需考虑其与 Java Development Kit (JDK) 的兼容性。具体而言: - Apache HBase ...
【标题】:“安装笔记:hadoop+hbase+sqoop2+phoenix+kerberos” 【描述】:在本文中,我们将探讨如何在两台云主机(实际环境可能需要三台或更多)上安装Hadoop、HBase、Sqoop2、Phoenix以及Kerberos的详细过程,...