日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop集群的kerberos认证

發布時間:2025/3/15 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop集群的kerberos认证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章轉載自http://www.cnblogs.com/easycloud/p/3724437.html
轉載主要用于個人學習備查。

環境:

OS 版本: Centos6.4

Kerberos版本: krb5-1.10.3

環境配置

機器名

Ip地址

功能

安裝模塊

ganglia.localdomain

192.168.124.140

Kerberos server

krb5-libs

krb5-server

krb5-workstation

krb5-devel

hadoop1.localdomain

192.168.124.135

Namenode

Datanode

Jobtracker

tasktracker

krb5-libs

krb5-workstation

krb5-appl-clients

hadoop2.localdomain

192.168.124.136

Datanode

tasktracker

Krb5-libs

Krb5-workstation

krb5-appl-servers

hadoop3.localdomain

192.168.124.137

Datanode

tasktracker

Krb5-libs

Krb5-workstation

krb5-appl-servers

kerberos的安裝,這里就不介紹了,我們創建了一個LOCALDOMAIN域的數據庫

我們還是要給出配置文件的信息給大家參考

vi /etc/krb5.conf 主要修改realm

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = LOCALDOMAIN
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true

[realms]
LOCALDOMAIN = {
kdc = ganglia.localdomain
admin_server = ganglia.localdomain
}

[domain_realm]
.example.com = LOCALDOMAIN
example.com = LOCALDOMAIN

vi /var/kerberos/krb5kdc/kdc.conf

[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88

[realms]
LOCALDOMAIN = {

master_key_type = aes256-cts

acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
max_renewable_life=10d
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
}

vi /var/kerberos/krb5kdc/kadm5.acl

/admin@LOCALDOMAIN

在hadoop中,kerberos需要創建principle和生成keytab文件。

  • 創建principle
  • hadoop的kerberos認證,需要三種principle: hadoop, host, HTTP

    addprinc -randkey hadoop/hadoop1.localdomain@LOCALDOMAIN

    addprinc -randkey hadoop/hadoop2.localdomain@LOCALDOMAIN

    addprinc -randkey hadoop/hadoop3.localdomain@LOCALDOMAIN

    addprinc -randkey host/hadoop1.localdomain@LOCALDOMAIN

    addprinc -randkey host/hadoop2.localdomain@LOCALDOMAIN

    addprinc -randkey host/hadoop3.localdomain@LOCALDOMAIN

    addprinc -randkey HTTP/hadoop1.localdomain@LOCALDOMAIN

    addprinc -randkey HTTP/hadoop2.localdomain@LOCALDOMAIN

    addprinc -randkey HTTP/hadoop3.localdomain@LOCALDOMAIN

    使用listprincs查看一下結果

  • 創建keytab文件:hadoop.keytab
  • ktadd -norandkey -k /root/hadoop.keytab hadoop/hadoop1.localdomain@LOCALDOMAIN

    ktadd -norandkey -k /root/hadoop.keytab hadoop/hadoop2.localdomain@LOCALDOMAIN

    ktadd -norandkey -k /root/hadoop.keytab hadoop/hadoop3.localdomain@LOCALDOMAIN

    ktadd -norandkey -k /root/hadoop.keytab host/hadoop1.localdomain@LOCALDOMAIN

    ktadd -norandkey -k /root/hadoop.keytab host/hadoop2.localdomain@LOCALDOMAIN

    ktadd -norandkey -k /root/hadoop.keytab host/hadoop3.localdomain@LOCALDOMAIN

    ktadd -norandkey -k /root/hadoop.keytab HTTP/hadoop1.localdomain@LOCALDOMAIN

    ktadd -norandkey -k /root/hadoop.keytab HTTP/hadoop2.localdomain@LOCALDOMAIN

    ktadd -norandkey -k /root/hadoop.keytab HTTP/hadoop3.localdomain@LOCALDOMAIN

    查看一下結果

    klist -kt /root/hadoop.keytab

    將/root/hadoop.keytab 上傳到hadoop1,hadoop2和hadoop3上

    修改三個bug

    Jdk,需要下載jce(Java Cryptography Extension)1.6.32不需要安裝,低一點的版本需要。http://www.oracle.com/technetwork/java/javase/downloads/index.html
    時間同步問題,kdc和運行hadoop的服務器,時間必須是同步的,如果在虛擬機中運行,如果時間不一致,也會造成credential失效。
    Kdc默認不支持renew功能的,運行kinit 后”valid starting” and “renew until”的值是相同的時間,或者運行kinit –R后出現 kinit: Ticket expired while renewing credentials
    有兩種方法可以解決此問題,第一種方式就是在創建domain之前,在kdc.conf中增加 max_renewable_life = 7d,然后創建domain。第二種方式使用modprinc修改所有的principle,modprinc -maxrenewlife 7days krbtgt/ganglia.localdoamin/LOCALDOMAIN

    modprinc -maxrenewlife 7days K/M/LOCALDOMAIN

    modprinc -maxrenewlife 7days hadoop/hadoop1.localdomain/LOCALDOMAIN

    modprinc -maxrenewlife 7days hadoop/hadoop2.localdomain/LOCALDOMAIN

    modprinc -maxrenewlife 7days hadoop/hadoop3.localdomain/LOCALDOMAIN

    modprinc -maxrenewlife 7days host/hadoop1.localdomain/LOCALDOMAIN

    modprinc -maxrenewlife 7days host/hadoop2.localdomain/LOCALDOMAIN

    modprinc -maxrenewlife 7days host/hadoop3.localdomain/LOCALDOMAIN

    modprinc -maxrenewlife 7days HTTP/hadoop1.localdomain/LOCALDOMAIN

    modprinc -maxrenewlife 7days HTTP/hadoop2.localdomain/LOCALDOMAIN

    modprinc -maxrenewlife 7days HTTP/hadoop3.localdomain/LOCALDOMAIN

    配置hadoop

    vi conf/core-site.xml

    <property><name>hadoop.tmp.dir</name><value>/home/hadoop/repo4/tmp</value><description>A base for other temporary directories.</description></property><property><name>fs.default.name</name><value>hdfs://hadoop1.localdomain:9000</value></property><property><name>hadoop.security.authorization</name><value>true</value></property><property><name>hadoop.security.authentication</name><value>kerberos</value></property>

    修改conf/hadoop-env.sh,增加下面一句

    export HADOOP_SECURE_DN_USER=hadoop

    啟動hdfs

    在hadoop1上運行: bin/hadoop namenode

    在hadoop1,hadoop2和hadoop3上運行: sudo bin/hadoop datanode

    如果按照上面的步驟做,應該是可以能夠啟動hdfs的。

    下面我們再配置一下mapred

    vi conf/hdfs-site.xml

    <property><name>dfs.replication</name><value>2</value></property><property><name>dfs.name.dir</name><value>/home/hadoop/repo4/name</value></property><property><name>dfs.data.dir</name><value>/home/hadoop/repo4/data</value></property><property><name>dfs.webhdfs.enabled</name><value>true</value></property><property><name>dfs.web.authentication.kerberos.principal</name><value>HTTP/_HOST@LOCALDOMAIN</value></property><property><name>dfs.namenode.kerberos.https.principal</name><value>host/_HOST@KERBEROS_HADOOP</value></property><property><name>dfs.web.authentication.kerberos.keytab</name><value>/home/hadoop/hadoop-1.2.1/conf/hadoop.keytab</value></property><property><name>dfs.namenode.keytab.file</name><value>/home/hadoop/hadoop-1.2.1/conf/hadoop.keytab</value></property><property><name>dfs.namenode.kerberos.principal</name><value>hadoop/_HOST@LOCALDOMAIN</value></property><property><name>dfs.namenode.kerberos.https.principal</name><value>host/_HOST@LOCALDOMAIN</value></property><property><name>dfs.secondary.namenode.keytab.file</name><value>/home/hadoop/hadoop-1.2.1/conf/hadoop.keytab</value></property><property><name>dfs.secondary.namenode.kerberos.principal</name><value>hadoop/_HOST@LOCALDOMAIN</value></property><property><name>dfs.secondary.namenode.kerberos.https.principal</name><value>host/_HOST@LOCALDOMAIN</value></property><property><name>dfs.datanode.keytab.file</name><value>/home/hadoop/hadoop-1.2.1/conf/hadoop.keytab</value></property><property><name>dfs.datanode.kerberos.principal</name><value>hadoop/_HOST@LOCALDOMAIN</value></property><property><name>dfs.datanode.kerberos.https.principal</name><value>host/_HOST@LOCALDOMAIN</value></property><property><name>dfs.datanode.address</name><value>0.0.0.0:1004</value></property><property><name>dfs.datanode.http.address</name><value>0.0.0.0:1006</value></property>

    修改conf/mapred-site.xml

    <property><name>mapred.job.tracker</name><value>http://hadoop1.localdomain:9001</value></property><property><name>mapreduce.jobtracker.kerberos.principal</name><value>mapred/_HOST@LOCALDOMAIN</value></property><property><name>mapreduce.jobtracker.kerberos.https.principal</name><value>host/_HOST@LOCALDOMAIN</value></property><property><name>mapreduce.jobtracker.keytab.file</name><value>/home/hadoop/hadoop-1.2.1/conf/mapred.keytab</value></property><property><name>mapreduce.tasktracker.kerberos.principal</name><value>mapred/_HOST@LOCALDOMAIN</value></property><property><name>mapreduce.tasktracker.kerberos.https.principal</name><value>host/_HOST@LOCALDOMAIN</value></property><property><name>mapreduce.tasktracker.keytab.file</name><value>/home/hadoop/hadoop-1.2.1/conf/mapred.keytab</value></property><property><name>mapred.task.tracker.task-controller</name><value>org.apache.hadoop.mapred.LinuxTaskController</value></property><property><name>mapreduce.tasktracker.group</name><value>hadoop</value></property>

    修改后xml配置文件后,還需要做如下幾步

  • 修改tasktracker的配置文件
  • 先修改conf/taskcontroller.cfg

    mapred.local.dir=/home/hadoop/repo4/mapred/local

    hadoop.log.dir=/home/hadoop/hadoop-1.2.1/logs

    mapreduce.tasktracker.group=hadoop

    banned.users=hdfs

    在創建mapred.local.dir和hadoop.log.dir指定的目錄

  • 啟動一下tasktracker來看一下 bin/hadoop tasktracker
  • 出現了第一個異常: /etc/hadoop/taskcontroller.cfg not found,原因是bin/tasktracker默認使用etc/hadoop位置的taskcontroller.cfg

    我們將taskcontroller.cfg復制到/etc/hadoop

    sudo mkdir /etc/hadoop

    sudo scp conf/taskcontroller.cfg /etc/hadoop/

  • 啟動tasktracer: bin/hadoop tasktracker
  • 可執行文件task-controller的所屬者必須是root

    我們改變一下文件的所屬者

    sudo chown root:root bin/task-controller

  • 繼續啟動tasktracker: bin/hadoop tasktracker
  • 異常繼續出現:配置的組必須等于task-controller所屬組

    我們繼續改變一下文件的所屬著和所屬組

    sudo chown root:hadoop bin/task-controller

  • 繼續啟動tasktracker: bin/hadoop tasktracker
  • 檢查其他用戶還有異常:task-controller其他用戶不能有寫和執行權限

    運行命令去改變用戶權限

    sudo chmod o-rx bin/task-controller

  • 繼續啟動tasktracker: bin/hadoop tasktracker
  • task-controller還需要被設置setuid標志位

    運行命令去設置setuid標志位

    sudo chmod u+s bin/task-controller

  • 繼續啟動tasktracker: bin/hadoop tasktracker
  • 用戶的id比1000小

    Cat /etc/passwd,查看一下用戶id,然后設置參數min.user.id,通常普通用戶創建,都是從500開始,因為我們可以修改sudo vi /etc/hadoop/taskcontroller.cfg

    min.user.id=500

    測試一下mapred程序,我們還是用wordcount作為例子

    前面我們已經啟動了hdfs,再啟動mapred

    在hadoop1運行:bin/hadoop jobtracker

    在hadoop1,hadoop2和hadoop2上運行: bin/hadoop tasktracker

    創建一個輸入目錄:

    bin/hadoop dfs -mkdir /user/hadoop/input

    上傳一些文件

    bin/hadoop dfs -copyFromLocal conf/* /user/hadoop/input/

    查看一下結果

    bin/hadoop dfs -ls /user/hadoop/input/

    啟動mapred程序

    使用kerberos認證的缺點

    存在單點失敗:它需要KDC中心服務器的服務。當KDC掛掉時,整個系統有可能癱瘓。Hadoop花了很多時間來解決namenode的單點問題。幸虧這個缺陷可以通過使用復合Kerberos服務器和缺陷認證機制彌補
    Kerberos需要時間同步技術,Kerberos要求參與通信的主機的時鐘同步,如果主機的時鐘與Kerberos服務器的時鐘不同步,認證會失敗。默認設置要求時鐘的時間相差不超過10分鐘。通常用網絡時間協議后臺程序(NTP)來保持主機時鐘同步。
    配置非常繁瑣,通常配置好一個100個節點的服務器,需要三天時間。而且還會存在一個大的問題:用戶權限的問題,原來系統上的數據不能訪問。這一點還需要完善。
    因為所有用戶使用的密鑰都存儲于中心服務器中,危及服務器的安全的行為將危及所有用戶的密鑰。
    總結

    Kerberos是一種性能比較高的認證和授權,并且能夠進行數據加密的安全系統,但是并不是特別適合hadoop,原因有三點:1. Hadoop集群節點數多,配置和維護一個使用kerberos系統高性能,穩定的hadoop集群難度非常高。2. Hadoop中的hdfs是一個文件系統,用戶的認證和授權比較復雜,難度不低于linux系統的用戶和組管理。加上kerberos后,用戶和用戶組的管理更加復雜,通常一個合適的用戶不能訪問hdfs上的文件。 3. Hadoop加上kerberos后,通常原來的用戶和文件,可能都失效導致數據流失。尤其是一些根目錄,往往需要格式化整個系統才能使用。增加一個新用戶也是比較難的。因為要考慮各個節點間的訪問權限。 我認為可能輕量級的LDAP會適合hadoop系統,后面有時間來實現一下

    總結

    以上是生活随笔為你收集整理的Hadoop集群的kerberos认证的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。