2013年9月30日 星期一

Hadoop in Taiwan 2013 會後心得

時間 2013/9/28 (六) 09:00 ~ 17:00
地點 台北市南港區研究院路二段128號
中央研究院人文社會科學館 4F國際會議廳
研討會網址 http://www.hadoopintaiwan.com/

觀察與發現

  • 本次研討會主題以「即時、安全、易用」為主軸,整體而言涵蓋Hadoop Ecosystem的最新發展現況。
  • 在「即時」的部分,Intel Andrew Purtell提供許多新興技術(Storm、Shark、Impala、Kafka)與Hadoop整合的Architecture Pattern,非常值得對Big Data Platform架構有興趣的同仁學習與驗證。另外有兩場議程討論Cloudera Impala的使用,觀察現階段Real-time Query(RTQ)解決方案應該仍是以Impala為主。不過個人認為Impala仍是Cloudera主導的專案,社群(尤其是Apache)的參與度不高,仍需要觀察後續發展是否能夠維持目前的動能。
  • 在「未來」的部分,Intel Jason Dai則介紹UC Berkeley AMPLab的BDAS架構與組成元件。根據會後與講者交流得知,Intel似乎將BDAS視為下一代的Hadoop,投入80%人力與AMPLab合作研發,並在中國與阿里巴巴進行POC驗證,目前已進入準上線狀態。綜合09/12在Yahoo!TW Tech研討會的資訊,似乎BDAS相關元件已成為Next Gen Big Data Platform的重要核心技術
  • 在「安全」的部分,趨勢Jason Yueh與騰雲徐啟超兩位講者均提到目前社群已經開始進行Data Encrytion的研究與開發,不過實際仍面臨許多待克服的難題,包含:如何在資料加密與系統效能之間取得平衡、如何提供一致化的資料加密框架讓Hadoop Ecosystem能夠無縫接合。綜合兩位講者的觀察HBase應該是目前最有可能實施Data Encryption的專案。
  • 在「易用」的部分,Revolution Xiaohui Liu介紹ScaleR套件與ClouodR兩項產品。ScaleR能夠讓相同的程式代碼(R language)運作在不同的環境(本機、HPC、Hadoop MR),並提供豐富的函式庫來降低應用開發者的負擔。CloudR則是結合AWS提供on-demand analytics的SaaS環境,使用者只需要幾個簡單的步驟就可以在Web Based R IDE環境RStudio進行開發與驗證。根據講者demo畫面該服務未來支援的Hadoop版本包含IDH、CDH、Hortonwork,並沒有侷限在單一版本或廠商。

講座心得

主題 :Architectural patterns for building real time applications with Apache HBase
講者:Andrew Purtell (Apache HBase計畫提交人at Intel)
摘要:

  • 對於「即時」的要求而言,可以區分為How fast to refresh/process the data與How fast to answer the questions to the user。
  • 目前已有許多Hadoop Integration Pattern分別適用在不同的情境與需求。在這些情境中HBase都能夠扮演Persistence service provider的角色
  • 在9/18 Apache Fundation已經正式接納Storm為Incubator project

主題 :Big Data Security
講者:Jason Yueh (Distinguished Technologist at Trend Micro)
摘要: 

  • Big Data Security已從Authentication、Authorization、Gateway發展至Data Encryption。
  • 避免機密資料外洩的最佳作法就是「不要儲存機密資料」。考慮RDBMS已經相對發展成熟,建議將機密資料儲存在RDBMS而Hadoop僅保存非機密資料。實務上Trend Micro的機密資料(客戶個資)約百萬筆,而Log資料為每天幾百GB,因此該作法是可行的。
  • Audit Log對資安而言是非常重要的線索,不過需要搭配良好的工具進行整理與分析,Trend Micro目前是採用Splunk的解決方案。
  • 在Hadoop叢集外加入Gateway限制存取可以提高系統整體的安全性,目前社群也提出數個方案進行這方面的研究與開發。

主題:The Spark Stack: Lightning-Fast Analytics over Hadoop Data
講者:Jason Dai (Engineering Director & Principal Engineer, Intel Software and Services Group)
摘要: 

  • Big Data Analytic Stack是由UC Berkeley AMPLab提出的巨量資料平台架構,範圍涵蓋:資源管理(Mesos)、In-Memory 檔案系統(Tachyon)、In-Memory分散式運算框架(Spark)、RTQ SQL引擎(Shark)、串流處理框架(Spark Streaming)、圖學運算框架(GraphX)、便於開發與使用的Machine Learning框架(MBbase)。
  • 根據講者說明,BDAS能夠協助開發者基於相同的運算框架(Spark)進行資料處理、機器學習、圖學關聯分析、以及即時查詢等應用開發,而無須採用多種不同框架(Hadoop、Storm、Neo4J)與程式語言(Java、Python、Clojure、Scala)
  • Intel與AMPLab進行密切合作,除提升系統的穩定性外並將BDAS推廣至中國的網站用戶(阿里巴巴)進行POC驗證,獲得不錯的成果
備註: 講者同時也參與 Project Panthera: An Analytical SQL Engine for MapReduce on Hive 的開發,詢問結果目前並沒有將Panthera移植到Shark/Spark框架的規劃

主題:基於 R 加Hadoop的高性能預測分析
講者:Liu Xiaohui (Revolution Analytics; Senior Developer)
摘要: 

  • 講者提出一個實際案例,說明用戶首先使用R進行資料建模與評估,然後再將R語言程式改用Hive實作執行在Hadoop叢集,不但增加開發者的負擔,也延長整體專案的時程
  • Revolution提供的ScaleR套件能夠讓用戶在不同的環境(本機、HPC、Hadoop MR)執行相同的程式碼,並提供豐富的函式庫以降低應用開發者的負擔。目前支援的函式庫種類包含:Descriptive Statistics、Statistical Tests、Sampling、Predictive Models、Data Visualization、Simulation、Cluster Analysis、Classification等
  • CloudR則是結合AWS EC2與Hadoop(IDH、Hortonwork、CDH)提供on-demand analytics的SaaS環境,使用者只需要幾個簡單的步驟就可以在Web-based R IDE環境RStudio進行開發與驗證。此外也提供Web-based的SSH與IDH Manager管控畫面

主題:Savanna - Hadoop跟OpenStack的第一次接觸
講者:macJack
摘要:

  • Savanna是今年4月由Hortonwork、Red Hat、Mirantis提出,希望在OpenStack環境提供Hadoop自動供裝與管理的專案
  • 主要功能包含
    • designed as an OpenStack component
    • managed through REST API with UI available as part of OpenStack Dashboard
    • support for different Hadoop distributions
  • 系統架構主要包含幾個重要元件,包含:
    • Cluster Configuration Manager
      all the business logic resides here
    • Auth component
      responsible for client authentication & authorization
    • DAL
      Data Access Layer, persists internal models in DB
    • VM Provisioning
      component responsible for communication with Nova and Glance
    • Deployment Engine
      pluggable mechanism responsible for deploying Hadoop on provisioned VMs; existing management solutions like Apache Ambari and Cloudera Management Console could be utilized for that matter
    • REST API
      exposes Savanna functionality via REST
    • Python Savanna Client
      similar to other OpenStack components Savanna has its own python client
    • Savanna pages
      GUI for the Savanna is located on Horizon
  • 在9/25釋出最新版本0.2.2,已完成功能包含
    • Basic cluster provisioning of Apache Hadoop
    • Cluster operation support and integration with tooling, advanced configuration (HDFS, Swift, etc.)
    • 0.2.2可透過Hortonwork提供的plug-in供裝HDP版本

主題:HBase Operation
講者:劉一正
摘要:

  • 講者分享HBase維運常遇見的問題,包含:
  • Region Hotspot
  • Data can’t be inserted
  • Incorrect property setting
  • Backup impacks performance
  • Inconsistent
  • Major compaction
  • -ROOT- .META. corrupt
  • 根據經驗來看,每台Region Server的Region數目是影響效能的最重要因素,Region數目越高將造成主機更忙碌
  • 如果將MapReduce與HBase安裝在相同叢集時,需要特別注意兩者之間是否會產生資源競爭問題
  • 了解整體系統運作架構將有助於釐清問題與提出解決方案 (以下是自己歸納的HBase R/W架構)

主題:Real-time Big Data Analytics Engine using Impala
講者:Jason Shih / Etu
摘要:

  • Impala 1.2新增功能包含
    • cost-based join order optimization
    • support existing Hive UDFs(Java) without recompile
    • add Impala(C++) UDFs and UDAs
    • 支援更多JDBC/ODBC connector,包含:MicroStrategy、Qlikview、Tableau
  • 2.0預計新增功能
    • SQL 2003-compliant analytic window functions (aggregation OVER PARTITION)
    • Additional authentication mechanisms – including the ability to specify username/passwords in addition to the already supported Kerberos authentication
    • Enhanced, production-ready, YARN-integrated resource manager
    • ORDER BY without LIMIT clauses
  • 講者建議不要在Impala使用Insert語法,應該直接將資料存入HDFS/HBase後再從Impala進行查詢

主題:Hadoop Security: Now and future
講者:徐啟超 / TCloud Computing
摘要:


  • Hortonwork的Ambari 1.2.5已經提供Security Wizard,能夠大幅簡化安全相關設定與管理的負擔
  • 目前提升Hadoop安全的主流作法為:叢集內啟動Kerberos、經由Gateway (Apache Knox) 提供對外服務
  • 社群已開始進行資料加密相關patch的研究與開發,包含
    • [HADOOP-9331] Hadoop crypto codec framework and crypto codec implementations
    • [MAPREDUCE-5025] Key Distribution and Management for supporting crypto codec in Map Reduce
    • [HBASE-7544] Transparent table/CF encryption
    • [HIVE-5207] Support data encryption for Hive tables
    • [PIG-3289] Encryption aware load and store functions
  • 由於各專案採取實作的方式有差,因此開發進度上並不一致;HBase-7544直接採用Java內建的安全性框架,而不是基於Hadoop Common專案所提供的安全框架(仍在開發key management、encryption codec management等相關功能),因此將是最有可能提供資料加密功能的Hadoop Ecosystem套件
  • InfoQ的文章 Big Data Security: The Evolution of Hadoop’s Security Model 也有關於這部分的介紹
備註: Intel Rhino Project 應該算是很完整地規劃與實作Hadoop Ecosystem的整體安全性,不過預期應該只有IDH會整合這部分的成果..唉

2013年8月8日 星期四

設定 CDH4U3 Security for HFD/MR1

CentOS 6

network

$ system-config-network

passwordless SSH

[root@0a90a489]
rm -rf /root/.ssh;mkdir /root/.ssh;chmod 700 /root/.ssh;ssh-keygen -P '' -f /root/.ssh/id_rsa;chmod 600 /root/.ssh/*
ls -ald /root/.ssh;ls -al /root/.ssh/*
[root@0a90a48a]
rm -rf /root/.ssh;mkdir /root/.ssh; chmod 700 /root/.ssh
scp master:/root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys;restorecon -R -v /root/.ssh
ls -ald /root/.ssh;ls -al /root/.ssh/*

hosts file

[root@0a90a489] cat /etc/hosts
127.0.0.1       localhost
10.144.164.134  kdc.cht.local
10.144.164.137  0a90a489.cht.local 0a90a489
10.144.164.138  0a90a48a.cht.local 0a90a48a
10.144.164.139  0a90a48b.cht.local 0a90a48b
[root@0a90a489] vim scpfile.sh
hosts="0a90a4b0 0a90a4b1 0a90a4b2 0a90a4b3"
for i in `echo $hosts`
do
  scp $1 $i:$1
  ssh $i "ls -l $1"
done

NTP

setup ntp client on all hosts

[root@0a90a489] vim /etc/ntp.conf
driftfile /var/lib/ntp/drift
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
restrict kdc.cht.local
server kdc.cht.local prefer
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys

[root@0a90a489] service ntpd restart
ntpd (pid  2228) is running...
[root@0a90a489] chkconfig ntpd on
[root@0a90a489] while [ true ]; do clear; ntpstat; sleep 5; done
synchronised to NTP server (192.168.15.105) at stratum 12
  time correct to within 955 ms
  polling server every 64 s
[root@0a90a489] sh scpfile.sh /etc/ntp.conf
[root@0a90a489] ssh 0a90a48a "service ntpd restart"
[root@0a90a489] ssh 0a90a48a "chkconfig ntpd on"

Kerberos

setup Kerberos client on all hosts

[root@0a90a489] scp kdc.cht.local:/etc/krb5.conf /etc/krb5.conf
[root@0a90a489] vim /etc/krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = CHT.COM.TW
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 1d
forwardable = true

[realms]
CHT.COM.TW = {
 kdc = kdc.cht.local:88
 admin_server = kdc.cht.local
 default_domain = cht.local
}

[domain_realm]
.cht.local = CHT.COM.TW
cht.local = CHT.COM.TW

[root@0a90a489] yum install krb5-workstation

Installed:
 krb5-workstation.x86_64 0:1.9-33.el6_3.3
Dependency Updated:
 krb5-libs.x86_64 0:1.9-33.el6_3.3
[root@master] yum info krb5-workstation
Name        : krb5-workstation
Arch        : x86_64
Version     : 1.9
Release     : 33.el6_3.3
Size        : 631 k
Repo        : installed
[root@0a90a4ae] kinit leorick/admin
[root@0a90a4ae] klist -e
[root@0a90a4ae] kdestroy
[root@0a90a489] sh scpfile.sh /etc/krb5.conf

Step 3: If you are Using AES-256 Encryption, install the JCE Policy File on all hosts

[root@0a90a489] unzip jce_policy-6.zip
[root@0a90a489] cd $JAVA_HOME/jre/lib/security
[root@0a90a489] $ ls -l
-rw-r--r--  1 root root  2481 May  8 15:15 local_policy.jar
-rw-r--r--  1 root root  2465 May  8 15:15 US_export_policy.jar
[root@0a90a489]  mv local_policy.jar local_policy.jar.bak[root@0a90a489]  mv US_export_policy.jar US_export_policy.jar.bak[root@0a90a489]  cp ~/jce/local_policy.jar ./[root@0a90a489]  cp ~/jce/US_export_policy.jar ./
[root@0a90a489] ls -l
-rw-r--r--  1 root root  2481 Jul 18 16:59 local_policy.jar
-rw-r--r--  1 root root  2465 Jul 18 16:59 US_export_policy.jar
[root@0a90a489] sh scpfile.sh /usr/java/jdk1.6.0_33/jre/lib/security/local_policy.jar
[root@0a90a489] sh scpfile.sh /usr/java/jdk1.6.0_33/jre/lib/security/US_export_policy.jar

HDFS

Step 2: Verify User Accounts and Groups in CDH4 Due to Security

[root@0a90a4ae] ls -l /opt/hadoop/hdfs/dfs/name/
drwxr-xr-x 3 hdfs hdfs 4096 Jul 18 10:41 /opt/hadoop/hdfs/dfs/name/
[root@0a90a4ae] ssh slave1 ls -l /opt/hadoop/hdfs/dfs/data
drwx------ 3 hdfs hdfs 4096 Jul 18 10:41 /opt/hadoop/hdfs/dfs/data
[root@0a90a4ae] ls -ld /var/log/hadoop-hdfs
drwxrwxr-x 2 hdfs hadoop 4096 Jul 18 10:27 /var/log/hadoop-hdfs
[root@0a90a4ae] ssh slave1 ls -ld /var/log/hadoop-hdfs
drwxrwxr-x 2 hdfs hadoop 4096 Jul 18 10:27 /var/log/hadoop-hdfs

[root@0a90a4ae] ls -ld /opt/hadoop/mapred/local
drwxr-xr-x 3 mapred mapred 4096 Jul 18 10:27 /opt/hadoop/mapred/local
[root@0a90a4ae] ssh slave1 ls -ld /opt/hadoop/mapred/local
drwxr-xr-x 7 mapred mapred 4096 Jul 18 10:27 /opt/hadoop/mapred/local
[root@0a90a4ae] ls -ld /var/log/hadoop-0.20-mapreduce
drwxrwxr-x 3 root hadoop 4096 Jul 18 10:27 /var/log/hadoop-0.20-mapreduce
[root@0a90a4ae] ssh 0a90a48a ls -ld /var/log/hadoop-0.20-mapreduce
drwxrwxr-x 3 root hadoop 4096 Jul 18 10:27 /var/log/hadoop-0.20-mapreduce

Step 3: If you are Using AES-256 Encryption, install the JCE Policy File on all hosts


Step 4: Create and Deploy the Kerberos Principals and Keytab Files

[root@kdc] sh princ_hadoop_add.sh
domain="CHT.COM.TW"
instance="0a90a489.cht.local 0a90a48a.cht.local 0a90a48b.cht.local"
principals="HTTP hdfs mapred"
echo "you should authenticate with KDC first..."
/usr/kerberos/bin/klist
for i in `echo ${instance}`
do
  echo "### HOST $i"
  for j in `echo ${principals}`
  do
     /usr/sbin/kadmin.local -q "addprinc -randkey ${j}/${i}@${domain}"
  done
done
/usr/sbin/kadmin.local -q "list_principals *"

HTTP/0a90a489.cht.local@CHT.COM.TW
HTTP/0a90a48a.cht.local@CHT.COM.TW
HTTP/0a90a48b.cht.local@CHT.COM.TW
hdfs/0a90a489.cht.local@CHT.COM.TW
hdfs/0a90a48a.cht.local@CHT.COM.TW
hdfs/0a90a48b.cht.local@CHT.COM.TW
mapred/0a90a489.cht.local@CHT.COM.TW
mapred/0a90a48a.cht.local@CHT.COM.TW
mapred/0a90a48b.cht.local@CHT.COM.TW
[root@kdc] sh princ_hadoop_del.sh
domain="CHT.COM.TW"
instance="0a90a489.cht.local 0a90a48a.cht.local 0a90a48b.cht.local"
principals="HTTP hdfs mapred"
echo "you should authenticate with KDC first..."
/usr/kerberos/bin/klist
for i in `echo ${instance}`
do
  echo "### HOST $i"
  for j in `echo ${principals}`
  do
     /usr/sbin/kadmin.local -q "delprinc -force ${j}/${i}@${domain}"
  done
done
/usr/sbin/kadmin.local -q "list_principals *"
[root@0a90a489] kdestroy; kinit leorick/admin@CHT.COM.TW
[root@0a90a489] sh key_hadoop_dist.sh
domain="CHT.COM.TW"
instance="0a90a489.cht.local 0a90a48a.cht.local 0a90a48b.cht.local"
echo "you should authenticate with KDC first..."
/usr/bin/klist
for i in `echo ${instance}`
do
  echo "### HOST $i"
     KEYTAB="hadoop.keytab"
     TMPFILE="/root/${KEYTAB}.${i}"
     DESFILE="/etc/hadoop/conf/${KEYTAB}"
     PRINCIPAL="HTTP/${i}@${domain} mapred/${i}@${domain} hdfs/${i}@${domain}"
     rm -f ${TMPFILE}
     /usr/bin/kadmin -q "ktadd -k ${TMPFILE} ${PRINCIPAL}"
     scp ${TMPFILE} ${i}:${DESFILE}
     CMD="chown hdfs:hadoop ${DESFILE}"
     ssh ${i} ${CMD}
     CMD="chmod 440 ${DESFILE}"
     ssh ${i} ${CMD}
     CMD="ls -l ${DESFILE}"
     ssh ${i} ${CMD}
done
[root@0a90a489] vim key_hadoop_list.sh
target=`ls /etc/hadoop/conf/*.keytab`
for i in ${target}
do
  echo `ls -l ${i}`
  sudo /usr/bin/ktutil << EOF
  rkt ${i}
  list -e
  q
EOF
done
[root@0a90a489] sh scpfile.sh /root/key_hadoop_list.sh
[root@0a90a489] sh key_hadoop_list.sh
-r--r----- 1 hdfs hadoop 1352 Jul 31 15:23 /etc/hadoop/conf/hadoop.keytab
ktutil:     rkt /etc/hadoop/conf/hadoop.keytab
ktutil:     list -e
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
  1    2       HTTP/0a90a489.cht.local@CHT.COM.TW (aes256-cts-hmac-sha1-96)
  2    2       HTTP/0a90a489.cht.local@CHT.COM.TW (aes128-cts-hmac-sha1-96)
  3    2       HTTP/0a90a489.cht.local@CHT.COM.TW (des3-cbc-sha1)
  4    2       HTTP/0a90a489.cht.local@CHT.COM.TW (arcfour-hmac)
  5    2       HTTP/0a90a489.cht.local@CHT.COM.TW (des-hmac-sha1)
  6    2       HTTP/0a90a489.cht.local@CHT.COM.TW (des-cbc-md5)
  7    2     mapred/0a90a489.cht.local@CHT.COM.TW (aes256-cts-hmac-sha1-96)
  8    2     mapred/0a90a489.cht.local@CHT.COM.TW (aes128-cts-hmac-sha1-96)
  9    2     mapred/0a90a489.cht.local@CHT.COM.TW (des3-cbc-sha1)
 10    2     mapred/0a90a489.cht.local@CHT.COM.TW (arcfour-hmac)
 11    2     mapred/0a90a489.cht.local@CHT.COM.TW (des-hmac-sha1)
 12    2     mapred/0a90a489.cht.local@CHT.COM.TW (des-cbc-md5)
 13    2       hdfs/0a90a489.cht.local@CHT.COM.TW (aes256-cts-hmac-sha1-96)
 14    2       hdfs/0a90a489.cht.local@CHT.COM.TW (aes128-cts-hmac-sha1-96)
 15    2       hdfs/0a90a489.cht.local@CHT.COM.TW (des3-cbc-sha1)
 16    2       hdfs/0a90a489.cht.local@CHT.COM.TW (arcfour-hmac)
 17    2       hdfs/0a90a489.cht.local@CHT.COM.TW (des-hmac-sha1)
 18    2       hdfs/0a90a489.cht.local@CHT.COM.TW (des-cbc-md5)
[root@0a90a489] ssh 0a90a48a "sh /root/key_hadoop_list.sh"
-r--r----- 1 hdfs hadoop 1352 Jul 31 15:22 /etc/hadoop/conf/hadoop.keytab
ktutil:     rkt /etc/hadoop/conf/hadoop.keytab
ktutil:     list -e
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
  1    2       HTTP/0a90a48a.cht.local@CHT.COM.TW (aes256-cts-hmac-sha1-96)
  2    2       HTTP/0a90a48a.cht.local@CHT.COM.TW (aes128-cts-hmac-sha1-96)
  3    2       HTTP/0a90a48a.cht.local@CHT.COM.TW (des3-cbc-sha1)
  4    2       HTTP/0a90a48a.cht.local@CHT.COM.TW (arcfour-hmac)
  5    2       HTTP/0a90a48a.cht.local@CHT.COM.TW (des-hmac-sha1)
  6    2       HTTP/0a90a48a.cht.local@CHT.COM.TW (des-cbc-md5)
  7    2     mapred/0a90a48a.cht.local@CHT.COM.TW (aes256-cts-hmac-sha1-96)
  8    2     mapred/0a90a48a.cht.local@CHT.COM.TW (aes128-cts-hmac-sha1-96)
  9    2     mapred/0a90a48a.cht.local@CHT.COM.TW (des3-cbc-sha1)
 10    2     mapred/0a90a48a.cht.local@CHT.COM.TW (arcfour-hmac)
 11    2     mapred/0a90a48a.cht.local@CHT.COM.TW (des-hmac-sha1)
 12    2     mapred/0a90a48a.cht.local@CHT.COM.TW (des-cbc-md5)
 13    2       hdfs/0a90a48a.cht.local@CHT.COM.TW (aes256-cts-hmac-sha1-96)
 14    2       hdfs/0a90a48a.cht.local@CHT.COM.TW (aes128-cts-hmac-sha1-96)
 15    2       hdfs/0a90a48a.cht.local@CHT.COM.TW (des3-cbc-sha1)
 16    2       hdfs/0a90a48a.cht.local@CHT.COM.TW (arcfour-hmac)
 17    2       hdfs/0a90a48a.cht.local@CHT.COM.TW (des-hmac-sha1)
 18    2       hdfs/0a90a48a.cht.local@CHT.COM.TW (des-cbc-md5)
[root@0a90a489] ssh 0a90a48b "sh /root/key_hadoop_list.sh"
-r--r----- 1 hdfs hadoop 1352 Jul 31 15:30 /etc/hadoop/conf/hadoop.keytab
ktutil:     rkt /etc/hadoop/conf/hadoop.keytab
ktutil:     list -e
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
  1    2       HTTP/0a90a48b.cht.local@CHT.COM.TW (aes256-cts-hmac-sha1-96)
  2    2       HTTP/0a90a48b.cht.local@CHT.COM.TW (aes128-cts-hmac-sha1-96)
  3    2       HTTP/0a90a48b.cht.local@CHT.COM.TW (des3-cbc-sha1)
  4    2       HTTP/0a90a48b.cht.local@CHT.COM.TW (arcfour-hmac)
  5    2       HTTP/0a90a48b.cht.local@CHT.COM.TW (des-hmac-sha1)
  6    2       HTTP/0a90a48b.cht.local@CHT.COM.TW (des-cbc-md5)
  7    2     mapred/0a90a48b.cht.local@CHT.COM.TW (aes256-cts-hmac-sha1-96)
  8    2     mapred/0a90a48b.cht.local@CHT.COM.TW (aes128-cts-hmac-sha1-96)
  9    2     mapred/0a90a48b.cht.local@CHT.COM.TW (des3-cbc-sha1)
 10    2     mapred/0a90a48b.cht.local@CHT.COM.TW (arcfour-hmac)
 11    2     mapred/0a90a48b.cht.local@CHT.COM.TW (des-hmac-sha1)
 12    2     mapred/0a90a48b.cht.local@CHT.COM.TW (des-cbc-md5)
 13    2       hdfs/0a90a48b.cht.local@CHT.COM.TW (aes256-cts-hmac-sha1-96)
 14    2       hdfs/0a90a48b.cht.local@CHT.COM.TW (aes128-cts-hmac-sha1-96)
 15    2       hdfs/0a90a48b.cht.local@CHT.COM.TW (des3-cbc-sha1)
 16    2       hdfs/0a90a48b.cht.local@CHT.COM.TW (arcfour-hmac)
 17    2       hdfs/0a90a48b.cht.local@CHT.COM.TW (des-hmac-sha1)
 18    2       hdfs/0a90a48b.cht.local@CHT.COM.TW (des-cbc-md5)

Step 5: Shut Down the Cluster

service hbase-regionserver stop
service zookeeper-server stop
service hbase-master stop
for x in `cd /etc/init.d ; ls hadoop-*` ; do sudo service $x stop ; done
service hbasestargate stop
service oozie stop
service hue stop

Step 6.1: Enable Hadoop Security

[root@0a90a489] vim /etc/hadoop/conf/core-site.xml

 hadoop.security.authentication
 kerberos
 


 hadoop.security.authorization
 true
[root@0a90a489] sh scpfile.sh /etc/hadoop/conf/core-site.xml

Step 7: Configure Secure HDFS

[root@0a90a489] vim /etc/hadoop/conf/hdfs-site.xml


 dfs.block.access.token.enable
 true



 dfs.namenode.keytab.file
 
/etc/hadoop/conf/hadoop.keytab



 dfs.namenode.kerberos.principal
 hdfs/_HOST@
CHT.COM.TW


 dfs.namenode.kerberos.internal.spnego.principal
 HTTP/_HOST@
CHT.COM.TW



 dfs.secondary.namenode.keytab.file
 
/etc/hadoop/conf/hadoop.keytab


 dfs.secondary.namenode.kerberos.principal
 hdfs/_HOST@
CHT.COM.TW


 dfs.secondary.namenode.kerberos.internal.spnego.principal
 HTTP/_HOST@
CHT.COM.TW



 dfs.datanode.data.dir.perm
 700


 dfs.datanode.address
 0.0.0.0:1004


 dfs.datanode.http.address
 0.0.0.0:1006


 dfs.datanode.keytab.file
 
/etc/hadoop/conf/hadoop.keytab


 dfs.datanode.kerberos.principal
 hdfs/_HOST@
CHT.COM.TW

[root@0a90a489] sh scpfile.sh /etc/hadoop/conf/hdfs-site.xml

Step 10: Set Variables for Secure DataNodes

[root@0a90a489] vim /etc/default/hadoop-hdfs-datanode
export HADOOP_SECURE_DN_USER=hdfs
export HADOOP_SECURE_DN_PID_DIR=
/var/run/hadoop-hdfs
export HADOOP_SECURE_DN_LOG_DIR=/var/log/hadoop-hdfs
export JSVC_HOME=/usr/libexec/bigtop-utils
[root@0a90a489] sh scpfile.sh /etc/default/hadoop-hdfs-datanode
Step 11.4: Start up the NameNode
[root@0a90a489] service hadoop-hdfs-namenode start
[root@0a90a489] vim /var/log/hadoop-hdfs/hadoop-hdfs-namenode-0a90a489.log
...
2013-07-31 16:15:54,732 INFO org.apache.hadoop.security.UserGroupInformation: Login successful for user hdfs/0a90a489.cht.local@CHT.COM.TW using keytab file /etc/hadoop/conf/hadoop.keytab
...
2013-07-31 16:15:56,615 INFO org.apache.hadoop.security.authentication.server.KerberosAuthenticationHandler: Login using keytab /etc/hadoop/conf/hadoop.keytab, for principal HTTP/0a90a489.cht.local@CHT.COM.TW
2013-07-31 16:15:56,634 INFO org.apache.hadoop.security.authentication.server.KerberosAuthenticationHandler: Initialized, principal [HTTP/0a90a489.cht.local@CHT.COM.TW] from keytab [/etc/hadoop/conf/hadoop.keytab]

[root@0a90a489] kdestroy
[root@0a90a489] hadoop fs -ls /
13/07/31 16:20:34 ERROR security.UserGroupInformation: PriviledgedActionException as:root (auth:KERBEROS) cause:javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]

[root@0a90a489] kinit leorick/admin
Password for leorick/admin@CHT.COM.TW:
[root@0a90a489] hadoop fs -ls /
Found 6 items
drwxr-xr-x   - mapred hadoop          0 2013-07-31 14:27 /benchmarks
drwxr-xr-x   - hbase  hbase           0 2013-07-29 16:58 /hbase
drwxr-xr-x   - mapred mapred          0 2013-07-29 16:26 /mapred
drwxrwxrwt   - hdfs   hadoop          0 2013-07-31 14:06 /tmp
drwxr-xr-x   - hdfs   hadoop          0 2013-07-29 16:24 /user
drwxr-xr-x   - hdfs   hadoop          0 2013-07-29 16:25 /var

Step 12.1: Start up a DataNode

[root@0a90a48a] service hadoop-hdfs-datanode start
[root@0a90a48a] vim /var/log/hadoop-hdfs/hadoop-hdfs-datanode-0a90a48a.log
2013-07-31 16:22:47,662 INFO org.apache.hadoop.security.UserGroupInformation: Login successful for user hdfs/0a90a48a.cht.local@CHT.COM.TW using keytab file /etc/hadoop/conf/hadoop.keytab
[root@0a90a48b ] sudo service hadoop-hdfs-datanode start
[root@0a90a48b ] vim /var/log/hadoop-hdfs/hadoop-hdfs-datanode-0a90a48b.log
2013-07-31 16:32:26,031 INFO org.apache.hadoop.security.UserGroupInformation: Login successful for user hdfs/0a90a48b.cht.local@CHT.COM.TW using keytab file /etc/hadoop/conf/hadoop.keytab

Step 12.2: Test

[root@0a90a489] kdestroy;kinit -k -t /etc/hadoop/conf/hadoop.keytab hdfs/0a90a489.cht.local@CHT.COM.TW
[root@0a90a489] hdfs dfs -mkdir /user/leorick
[root@0a90a489] hdfs dfs -put install.log  /user/leorick/
[root@0a90a489] hdfs dfs -chown -R leorick:leorick /user/leorick
[root@0a90a489] hdfs dfs -chmod -R 700  /user/leorick
[root@0a90a489] hdfs dfs -ls -R /user/leorick
-rw-------   2 leorick leorick      25233 2013-07-31 16:36 /user/leorick/install.log

[root@0a90a489] hdfs dfs -cat /user/leorick/install.log
Installing libgcc-4.4.7-3.el6.x86_64
warning: libgcc-4.4.7-3.el6.x86_64: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
...

[root@0a90a489] kdestroy;kinit leorick/admin@CHT.COM.TW
[root@0a90a489] hdfs dfs -cat /user/leorick/install.log
Installing libgcc-4.4.7-3.el6.x86_64
warning: libgcc-4.4.7-3.el6.x86_64: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
...

Step 13: Set the Sticky Bit on HDFS Directories

[root@0a90a489] sudo -u hdfs kinit -k -t /etc/hadoop/conf/hadoop.keytab hdfs/0a90a489.cht.local@CHT.COM.TW
[root@0a90a489] sudo -u hdfs hadoop fs -chmod 1777 /tmp
[root@0a90a489] sudo -u hdfs hadoop fs -ls /
drwxrwxrwt   - hdfs   hadoop          0 2013-07-31 14:06 /tmp
drwxr-xr-x   - hdfs   hadoop          0 2013-07-31 16:34 /user

MapReduce 0.20

Step 1: Configure Secure MRv1

[root@0a90a489] vim /etc/hadoop/conf/mapred-site.xml
 mapreduce.jobtracker.kerberos.principal
 mapred/_HOST@CHT.COM.TW
 mapreduce.jobtracker.keytab.file
 /etc/hadoop/conf/hadoop.keytab

 mapreduce.tasktracker.kerberos.principal
 mapred/_HOST@CHT.COM.TW
 mapreduce.tasktracker.keytab.file
 /etc/hadoop/conf/hadoop.keytab

 mapred.task.tracker.task-controller
 org.apache.hadoop.mapred.LinuxTaskController
 mapreduce.tasktracker.group
 mapred
[root@0a90a489] vim /etc/hadoop/conf/taskcontroller.cfg
hadoop.log.dir=/var/log/hadoop-0.20-mapreduce/
mapreduce.tasktracker.group=mapred
banned.users=bin
min.user.id=100
[root@0a90a489] sh scpfile.sh /etc/hadoop/conf/mapred-site.xml
[root@0a90a489] sh scpfile.sh /etc/hadoop/conf/taskcontroller.cfg

Step 2: Start up the JobTracker

[root@0a90a489] service hadoop-0.20-mapreduce-jobtracker start
[root@0a90a489] vim /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-jobtracker-0a90a489.log
2013-07-31 17:03:31,296 INFO org.apache.hadoop.security.UserGroupInformation: Login successful for user mapred/0a90a489.cht.local@CHT.COM.TW using keytab file /etc/hadoop/conf/hadoop.keytab

Step 3.1: Start up a TaskTracker

[root@0a90a48a] service hadoop-0.20-mapreduce-tasktracker start
[root@0a90a48a] vim /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-tasktracker-0a90a48a.log
2013-07-31 17:12:38,879 INFO org.apache.hadoop.security.UserGroupInformation: Login successful for user mapred/0a90a48a.cht.local@CHT.COM.TW using keytab file /etc/hadoop/conf/hadoop.keytab
[root@0a90a48b] service hadoop-0.20-mapreduce-tasktracker start
[root@0a90a48b] vim /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-tasktracker-0a90a48b.log
2013-07-31 17:11:15,282 INFO org.apache.hadoop.security.UserGroupInformation: Login successful for user mapred/0a90a48b.cht.local@CHT.COM.TW using keytab file /etc/hadoop/conf/hadoop.keytab
Step 3.2: Testing
3.2.1 沒有kerberos principle執行程式
[root@0a90a489] kdestroy
[root@0a90a489] hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar pi 4 1000
Number of Maps  = 4
Samples per Map = 1000
13/07/31 17:14:26 ERROR security.UserGroupInformation: PriviledgedActionException as:root (auth:KERBEROS) cause:javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
3.2.2 在每台主機建立OS帳號
[root@0a90a489] cat /etc/group
hadoop:x:498:
[root@0a90a489] useradd -b /home -k /etc/skel -m -s /bin/bash -g 498 leorick
[root@0a90a489] ssh 0a90a48a "useradd -b /home -k /etc/skel -m -s /bin/bash -g 498 leorick"
[root@0a90a489] ssh 0a90a48b "useradd -b /home -k /etc/skel -m -s /bin/bash -g 498 leorick"
[root@0a90a489] id leorick
uid=500(leorick) gid=498(hadoop) groups=498(hadoop)
[root@0a90a489] ssh 0a90a48a "id leorick"
uid=500(leorick) gid=498(hadoop) groups=498(hadoop)
[root@0a90a489] ssh 0a90a48b "id leorick"
uid=500(leorick) gid=498(hadoop) groups=498(hadoop)
3.2.3 使用kerberos principle執行程式
[root@0a90a489] kinit leorick/admin
Password for leorick/admin@CHT.COM.TW:
[root@0a90a489] hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar pi 4 1000
13/07/31 17:15:27 ERROR security.UserGroupInformation: PriviledgedActionException as:leorick/admin@CHT.COM.TW (auth:KERBEROS) cause:org.apache.hadoop.security.AccessControlException: Permission denied: user=leorick, access=EXECUTE, inode="/tmp/hadoop-mapred":mapred:hadoop:drwx------
...
3.2.4 修改HDFS上共用目錄權限並執行程式
[root@0a90a48a] kdestroy;kinit -k -t /etc/hadoop/conf/hadoop.keytab hdfs/0a90a48a.cht.local@CHT.COM.TW
[root@0a90a48a] hdfs dfs -chmod -R 777 /tmp/hadoop-mapred
[root@0a90a489] hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar pi 4 1000
Starting Job
13/07/31 17:28:40 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
13/07/31 17:28:40 INFO hdfs.DFSClient: Created HDFS_DELEGATION_TOKEN token 2 for leorick on 10.144.164.137:8020
13/07/31 17:28:40 INFO security.TokenCache: Got dt for hdfs://0a90a489.cht.local; Kind: HDFS_DELEGATION_TOKEN, Service: 10.144.164.137:8020, Ident: (HDFS_DELEGATION_TOKEN token 2 for leorick)
Job Finished in 42.958 seconds
Estimated value of Pi is 3.14000000000000000000