cdh访问
❶ 如何访问需要kerberos认证的web-cdh-about云开发
解决热点问题,方法很多,region分配的过多、region分配的过多不知道楼主是如何考虑的,如何去进行预分区,可以采用下面三步:1.取样,先随机生成一定数量的rowkey,将取样数据按升序排序放到一个集合里2.根据预分区的region个数,对整个集合平均分割,即是相关的splitKeys.3.HBaseAdmin.createTable(,byte[][]splitkeys)可以指定预分区的splitKey,即是指定region间的rowkey临界值.
❷ 如何远程读取CDH的hadoop上的HDFS数据
static Configuration conf=new Configuration();
static FileSystem fs=null;
static{
try {
//默认的hadoop的fs.defaultFS的端口号为8020,这里需要跟集群里面的配置一致
conf.set("fs.defaultFS","hdfs://dnode1:8020/");
fs=FileSystem.get(conf);
} catch (IOException e) {
log.error("初始化FileSystem失败!",e);
}
}
OK,只需要这简单的一行,我们就可以读取HDFS上的数据了,另外如要注意的是,需要把hadoop的对应的host也配置在win上的host文件里,避免访问文件系统出错,只要上面这一步打通,下面的对于HDFS系统上文件和目录增删改查,以及对文件内容的读取和写入,散仙在这里就不多写了,这个很简单,大家看看FileSystem这个类的Api就能很容易掌握的。
❸ cdh里面怎么修改kafka的配置文件
Kafka是由LinkedIn设计的一个高吞吐量、分布式、基于发布订阅模式的消息系统,使用Scala编写,它以可水平扩展、可靠性、异步通信和高吞吐率等特性而被广泛使用。目前越来越多的开源分布式处理系统都支持与Kafka集成,其中Spark Streaming作为后端流引擎配合Kafka作为前端消息系统正成为当前流处理系统的主流架构之一。
然而,当下越来越多的安全漏洞、数据泄露等问题的爆发,安全正成为系统选型不得不考虑的问题,Kafka由于其安全机制的匮乏,也导致其在数据敏感行业的部署存在严重的安全隐患。本文将围绕Kafka,先介绍其整体架构和关键概念,再深入分析其架构之中存在的安全问题,最后分享下Transwarp在Kafka安全性上所做的工作及其使用方法。
Kafka架构与安全
首先,我们来了解下有关Kafka的几个基本概念:
Topic:Kafka把接收的消息按种类划分,每个种类都称之为Topic,由唯一的Topic Name标识。
Procer:向Topic发布消息的进程称为Procer。
Consumer:从Topic订阅消息的进程称为Consumer。
Broker:Kafka集群包含一个或多个服务器,这种服务器被称为Broker。
Kafka的整体架构如下图所示,典型的Kafka集群包含一组发布消息的Procer,一组管理Topic的Broker,和一组订阅消息的Consumer。Topic可以有多个分区,每个分区只存储于一个Broker。Procer可以按照一定的策略将消息划分给指定的分区,如简单的轮询各个分区或者按照特定字段的Hash值指定分区。Broker需要通过ZooKeeper记录集群的所有Broker、选举分区的Leader,记录Consumer的消费消息的偏移量,以及在Consumer Group发生变化时进行relalance. Broker接收和发送消息是被动的:由Procer主动发送消息,Consumer主动拉取消息。
然而,分析Kafka框架,我们会发现以下严重的安全问题:
1.网络中的任何一台主机,都可以通过启动Broker进程而加入Kafka集群,能够接收Procer的消息,能够篡改消息并发送给Consumer。
2.网络中的任何一台主机,都可以启动恶意的Procer/Consumer连接到Broker,发送非法消息或拉取隐私消息数据。
3.Broker不支持连接到启用Kerberos认证的ZooKeeper集群,没有对存放在ZooKeeper上的数据设置权限。任意用户都能够直接访问ZooKeeper集群,对这些数据进行修改或删除。
4.Kafka中的Topic不支持设置访问控制列表,任意连接到Kafka集群的Consumer(或Procer)都能对任意Topic读取(或发送)消息。
随着Kafka应用场景越来越广泛,特别是一些数据隐私程度较高的领域(如道路交通的视频监控),上述安全问题的存在犹如一颗定时炸弹,一旦内网被黑客入侵或者内部出现恶意用户,所有的隐私数据(如车辆出行记录)都能够轻易地被窃取,而无需攻破Broker所在的服务器。
Kafka安全设计
基于上述分析,Transwarp从以下两个方面增强Kafka的安全性:
身份认证(Authentication):设计并实现了基于Kerberos和基于IP的两种身份认证机制。前者为强身份认证,相比于后者具有更好的安全性,后者适用于IP地址可信的网络环境,相比于前者部署更为简便。
权限控制(Authorization):设计并实现了Topic级别的权限模型。Topic的权限分为READ(从Topic拉取数据)、WRITE(向Topic中生产数据)、CREATE(创建Topic)和DELETE(删除Topic)。
基于Kerberos的身份机制如下图所示:
Broker启动时,需要使用配置文件中的身份和密钥文件向KDC(Kerberos服务器)认证,认证通过则加入Kafka集群,否则报错退出。
Procer(或Consumer)启动后需要经过如下步骤与Broker建立安全的Socket连接:
1.Procer向KDC认证身份,通过则得到TGT(票证请求票证),否则报错退出
2.Procer使用TGT向KDC请求Kafka服务,KDC验证TGT并向Procer返回SessionKey(会话密钥)和ServiceTicket(服务票证)
3.Procer使用SessionKey和ServiceTicket与Broker建立连接,Broker使用自身的密钥解密ServiceTicket,获得与Procer通信的SessionKey,然后使用SessionKey验证Procer的身份,通过则建立连接,否则拒绝连接。
ZooKeeper需要启用Kerberos认证模式,保证Broker或Consumer与其的连接是安全的。
Topic的访问控制列表(ACL)存储于ZooKeeper中,存储节点的路径为/acl/<topic>/<user>,节点数据为R(ead)、W(rite)、C(reate)、D(elete)权限的集合,如/acl/transaction/jack节点的数据为RW,则表示用户jack能够对transaction这个topic进行读和写。
另外,kafka为特权用户,只有kafka用户能够赋予/取消权限。因此,ACL相关的ZooKeeper节点权限为kafka具有所有权限,其他用户不具有任何权限。
构建安全的Kafka服务
首先,我们为Broker启用Kerberos认证模式,配置文件为/etc/kafka/conf/server.properties,安全相关的参数如下所示:
其中,authentication参数表示认证模式,可选配置项为simple, kerberos和ipaddress,默认为simple。当认证模式为kerberos时,需要额外配置账户属性principal和对应的密钥文件路径keytab.
认证模式为ipaddress时,Procer和Consumer创建时不需要做任何改变。而认证模式为kerberos时,需要预先创建好相应的principal和keytab,并使用API进行登录,样例代码如下所示:
public class SecureProcer extends Thread {
private final kafka.javaapi.procer.Procer<Integer, String> procer;
private final String topic;
private final Properties props = new Properties();
public SecureProcer(String topic) {
AuthenticationManager.setAuthMethod(“kerberos”);
AuthenticationManager.login(“procer1″, “/etc/procer1.keytab”);
props.put(“serializer.class”, “kafka.serializer.StringEncoder”);
props.put(“metadata.broker.list”,
“172.16.1.190:9092,172.16.1.192:9092,172.16.1.193:9092″);
// Use random partitioner. Don’t need the key type. Just set it to Integer.
// The message is of type String.
procer = new kafka.javaapi.procer.Procer<Integer, String>(
new ProcerConfig(props));
this.topic = topic;
❹ 针对cdh的组件oozie适合apache版本的hadoop组件一起使用么
CDH5.3 Oozie服务搭建
编写人:胡旻 版本:V_0.5 修改时间:20150215(Oozie版本CDH5.3组件V4.0.0)
版权所有转载请注明
一.Oozie简介
Oozie是一个管理Hdoop作业(job)的工作流程调度管理服务。
1. Oozie的工作流是一系列动作的直接周期图(Directed Acyclical Graphs)。这些动作是典型的Hadoop任务(MapRece,Streaming, Pipes, Pig, Hive, Sqoop, etc)2. Oozie协调作业就是通过时间(频率)和有效数据触发当前的Oozie工作流程3. Oozie可以将一系列协调作业捆绑作为一个任务进行管理4. Oozie 是一个可扩展,数据感知的服务,允许你在Hadoop上使用运行一系列独立的任务二.软件包
Oozie采用服务器客户端模式,对于安装Oozie有两种包选择,针对Oozie服务器(oozie)和客户端(oozie-client)的独立的RPM包。
三.安装需求
安装Oozie服务器需要满足
1. 操作系统的支持(如:支持CDH5的操作系统)2. Oracle JDK的支持
3. 如果不想用自带的derby还需要一个可以支持的数据库安装Oozie Client需要满足
Oracle JDK的支持
四.安装Oozie
Oozie包含两个独立包;一个是客户端包(oozie-client)另一个是服务包(oozie)。选择你需要的合适的包进行安装。
使用yum方式安装Oozie服务包
$ sudo yum install oozie
使用yum方式安装Oozie客户端包
$ sudo yum install oozie-client
五.配置Oozie
1.配置Hadoop任务的使用版本
Oozie客户端不会和HadoopMapRece任务进行直接的交互,所以其不需要任何MapRece的设置Oozie服务能够对接使用MRv1或YARN,但是不能同时使用。
文件类型
安装路径
二进制包
/usr/lib/oozie/
配置信息
/etc/oozie/conf/
文档
/usr/share/doc/oozie-4.0.0+cdh5.3.0+334
例子
/usr/share/doc/oozie-4.0.0+cdh5.3.0+334
数据
/usr/share/doc/oozie-4.0.0+cdh5.3.0+334
日志
/var/log/oozie
临时文件
/var/tmp/oozie/
PID文件
/var/run/oozie/
2. 使用Mysql配置Oozie
安装和启动mysql,使用mysql命令台工具,创建Oozie数据库和Oozie的mysql用户$ mysql -u root -p
Enter password: ******
mysql> create database oozie;
Query OK, 1 row affected (0.03 sec)
mysql> grant all privileges on oozie.* to 'oozie'@'localhost' identified by 'oozie';Query OK, 0 rows affected (0.03 sec)
mysql> grant all privileges on oozie.* to 'oozie'@'%' identified by 'oozie';Query OK, 0 rows affected (0.03 sec)
mysql> exit
Bye
3.配置Oozie使用MySQL,编辑oozie-site.xml中属性文件如下,配置oozie-site.xml$ sudo vim /etc/oozie/conf/oozie-site.xml...
<property>
<name>oozie.service.JPAService.jdbc.driver</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>oozie.service.JPAService.jdbc.url</name>
<value>jdbc:mysql://localhost:3306/oozie</value>
</property>
<property>
<name>oozie.service.JPAService.jdbc.username</name>
<value>oozie</value>
</property>
<property>
<name>oozie.service.JPAService.jdbc.password</name>
<value>oozie</value>
</property>
...
4. 添加MySQL JDBC 驱动包(JAR文件)给Oozie.
拷贝或软连接mysql的JDBC驱动JAR文件到/var/lib/oozie/ 文件夹5. 建立Oozie数据库模式
在设置完Oozie 数据库信息和创建相应的数据库,创建Oozie数据库模式,Oozie为这个目的提供了一个数据库工具运行Oozie数据库工具
$ sudo -u oozie /usr/lib/oozie/bin/ooziedb.sh create -run你应该看到以下输出
Validate DB Connection.
DONE
Check DB schema does not exist
DONE
Check OOZIE_SYS table does not exist
DONE
Create SQL schema
DONE
DONE
Create OOZIE_SYS table
DONE
Oozie DB has been created for Oozie version '4.0.0-cdh5.3.0'
The SQL commands have been written to: /tmp/ooziedb-5737263881793872034.sql6. 允许Oozie Web Console
为了允许Oozie webconsole, 下载添加ExtJS库到 Oozie服务器步骤1:下载库
从http//archive.cloudera.com/gplextras/misc/ext-2.2.zip下载ExtJS版本2.2库文件并将其放在合适的位置。
步骤2:安装库文件
提取文件ext-2.2.zip并将其放在/var/lib/oozie下. 并解压说明:1.以前同事何敏在测试机上安装oozie 时,将ext-2.2.zip直接放到该目录下即可。但是现在clouderamanger 中不行2. 同事以前aparch 正式使用的ext-2.2.zip 在cloueramanger 下放到/var/lib/oozie下,解压后也不能正常。后来网友世界提供的解压后正常步骤3. 在Hadoop的HDFS上安装Oozie Shared Libraryoozie安装绑定了Oozie的分享库,包含了所有允许工作流任务运行的动作(streaming, DistCp, Pig, Hive, Sqoop).
步骤4.oozie安装绑定了两个共享库,一个是MRv1 另一个是 YARN。请确保你安装了合适你使用的MapRece版本The shared library file for MRv1 isoozie-sharelib-mr1.tar.gz.
The shared library file for YARN isoozie-sharelib-yarn.tar.gz.
(我系统是运行在YARN上运行MapRece,所以注意)$ sudo -u hdfs hadoop fs -mkdir /user/oozie$ sudo -u hdfs hadoop fs -chown oozie:oozie /user/oozie$ sudo oozie-setup sharelib create -fs <FS_URI> -locallib /usr/lib/oozie/oozie-sharelib-yarn.tar.gz其中FS_URI是文件系统HDFS URI分享库应该安装的位置(例如 hdfs://<HOST>:<PORT>).
7. 设置支持Oozie的Uber JARs
为了使集群支持uber Jars我们设定oozie-site.xml以下属性...
<property>
<name>oozie.action.maprece.uber.jar.enable</name>
<value>true</value>
...
六. 启动、停止和访问Oozie
1.启动Oozie服务器
$ sudo service oozie start
如果能看见消息Oozie系统ID[oozie-oozie] 开始在oozie.log日志文件中,说明系统已经成功开始2.停止Oozie服务器
$ sudo service oozie stop
3.通过Oozie客户端访问Oozie服务器
Oozie客户端是一个命令行单元可以通过Oozieweb-services API和Oozie 服务器进行交互$ oozie admin -oozie http//localhost:11000/oozie -statusSystem mode: NORMAL
为了方便使用这个组件,设置环境变量OOZIE_URL指向Oozie服务器的URL.后续你能跳过-oozie 选项$ export OOZIE_URL=http//localhost:11000/oozie$ oozie admin -version
Oozie server build version: 4.0.0-cdh5.3.04.通过Web浏览器访问Oozie服务器
如果你添加了ExtJS库,允许了Oozie web控制台,你可以通过http//<OOZIE_HOSTNAME>:11000/oozie.
oozie is not allowed to impersonate oozie问题的解决在主控节点(NameNode和ResourceManage)中修改hdfs-site.xml文件添加如下属性<!-- OOZIE -->
<property>
<name>hadoop.proxyuser.oozie.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.oozie.groups</name>
<value>*</value>
</property>
<!-- -->
然后更新
主控节点:NameNode
hdfs dfsadmin -fs hdfs://hcdream1:8020 - dfsadmin -fs hdfs://hcdream2:8020 –主控节点:ResourceManager
yarn rmadmin -
❺ 如何用cloudera manager接管已有hadoop的cdh版本集群
本文介绍如何搭建cloudera manager去接入已有hadoop组件(cdh),搜索国内资料并无整体介绍,没有任何参考文章可以借鉴;通过大数据qq交流群当中某老师提供的国外某篇cloudera cto的文章得到解决思路,经实验调试可以实现此功能。
下面进入本文主题。
一、下载必备文件:
1.cloudera manager:
之后发现原集群的对应目录所有者为hadoop,而根据其他角色启动进程的所有者hdfs来进行权限修改后datanode可以启动
❻ mapr客户端可以访问cdh5的hdfs吗
很明显用客户端访问,
❼ 将hive 数据导入到cdh集群,impala报错
这是由于ES的数据类型所限导致的ES与Hive的数据类型对应问题,impala是不支持的,impala是可以直接访问hive数据的啊
❽ cdh版本hadoop怎么开权限控制
如下图,hadoop访问控制分为两级,其中ServiceLevel Authorization为系统级,用于控制是否可以访问指定的服务,例如用户/组是否可以向集群提交Job,它是最基础的访问控制,优先于文件权限和mapred队列权限验证。Access Control on Job Queues在job调度策略层之上,控制mapred队列的权限。DFSPermmision用户控制文件权限。目前版本中,连接到hadoop集群的用户/组信息取决于客户端环境,即客户端主机中`whoami`和`bash –c groups`取到的用户名和组名,没有uid和gid,用户属组列表中只要有一个与集群配置的用户组相同即拥有该组权限。
❾ 求解答cdh5添加hive 时要求输入MySQL用户密码,测试联通性报错
sqoop是map任务,分布到集群所有机器上执行。
所以你的授权(grant)只给了''@'localhost'是不够的。你至少需要将权限给到'user'@'%',这其中的user,是你访问mysql使用的用户。
❿ 怎么 查看 cdh hadoop版本
hadoop访问控制两级其ServiceLevel Authorization系统级用于控制否访问指定服务例用户/组否向集群提交Job基础访问控制优先于文件权限mapred队列权限验证Access Control on Job Queuesjob调度策略层控制mapred队列权限DFSPermmision用户控制文件权限目前版本连接hadoop集群用户/组信息取决于客户端环境即客户端主机`whoami``bash –c groups`取用户名组名没uidgid用户属组列表要与集群配置用户组相同即拥该组权限
图" class="illustration_alink">