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">