Hadoop 參數 core-site.xml

1 篇文章 / 0 new
author
Hadoop 參數 core-site.xml
  • fs.default.name (必需)
    預設值 : file:///
    說明 : 設定 Hadoop namenode 的 hostname 及 port,預設是 Standalone mode,如果是 Pseudo-Distributed mode 要指定為 hdfs://localhost:9000,但是這個缺點是只有在本機才能操作,從其他機器不能連。建議可直接使用 Cluster mode,指定 hdfs://hostname:9000。但是 Hadoop 是依據 hostname 去做 ip binding,所以要注意 /etc/hosts 裡 hostname 不能對應到 127.0.0.1,要對應實際的 ip
    10.1.112.70        hostname

    如果發現不能從其他機器連線的話,在 namenode 上用 netstat 看 ip/port mapping 是否正確

    tcp        0      0 ::ffff:10.1.112.70:9000     :::*                        LISTEN      2691/java
    tcp        0      0 ::ffff:10.1.112.70:9000     ::ffff:10.1.112.70:49119    ESTABLISHED 2691/java          
    tcp        0      0 ::ffff:10.1.112.70:9000     ::ffff:10.1.112.70:49113    ESTABLISHED 2691/java
  • hadoop.tmp.dir (必需)
    預設值 : /tmp/hadoop-${user.name}
    說明 : Hadoop 存放暫存檔案的目錄(是程式使用的虛擬的基本目錄結構),會根據 user account 在此目錄下開不同的子目錄。但是放在預設的 /tmp 下可能會有一個問題,一般在 Centos 會 enable tmpwatch,tmpwatch 會定期把 /tmp 下沒用到的檔案砍掉,如果不希望系統做這件事,可以 disable tmpwatch 或把 hadoop.tmp.dir 指到不同的目錄下
  • fs.checkpoint.dir
    預設值 : ${hadoop.tmp.dir}/dfs/namesecondary
    說明 : secondary namenode 存放暫存檔案的目錄,如果有多個目錄可用",“隔開。設定多個目錄 的好處是 Hadoop 會把 temp image files 分別寫到指定的多個目錄,以避免其中一份資料壞掉。seconary namenode 相關的設定不一定需要,甚至在 Hadoop cluster 可以不需要起 secondary namenode。但重起 namenode 時也會做 file merge,當檔案很大時,重起的時間會非常的長。為了減少 downtime,建議在 production site 都會啟動 secondary namenode。而且要起在跟 namenode 不同的機器,以保證當 namenode 硬碟壞掉的時候,還可以從 secondary namenode 上把資料備份回來。
  • fs.checkpoint.period
    預設值 : 3600(秒)
    說明 : 控制 secondary namenode 的 checkpoint 時間間隔。如果距離上次 checkpoint 的時間大於這個參數設定的值,就會觸發 checkpoint。secondary namenode 會把 namenode 的 fsimage 和 editlog 做 snapshot。如果存取 Hadoop 的次數頻繁或為了減少重起 namenode 的 downtime,可以把這個值設小一點。
  • fs.checkpoint.size
    預設值 : 67108864(byte)
    說明 : 如果 Hadoop 非常的忙碌,editlog 可能會在短時間內長的很大,fs.checkpoint.period 的設定不見得可以完全預測這個狀況,所以保險的做法會多設定這個值,以保證當檔案大到超過 fs.checkpoint.size 的值也會觸發 checkpoint。
  • io.file.buffer.size
    預設值 : 4096(byte)
    說明 : 這是讀寫 sequence file 的 buffer size, 可減少 I/O 次數。在大型的 Hadoop cluster,建議可設定為 65536 到 131072。
  • ipc.client.connection.maxidletime
    預設值 : 10000(毫秒)
    說明 : 設定 Hadoop client 連線時最大的閒置時間,預設是 10 秒。如果 Hadoop cluster 的網路連線不穩,可以把這個值設到 60000(60秒)。
  • ipc.server.tcpnodelay
    預設值 : false
    說明 : 在 Hadoop server 是否啟動 Nagle’s 演算法。設 true 會 disable 這個演算法,關掉會減少延遲,但是會增加小封包的傳輸。server site 不太需要這定這個值。
  • ipc.client.tcpnodelay
    預設值 : false
    說明 : 在 Hadoop client 是否啟動 Nagle’s 演算法。設 true 會 disable 這個演算法,關掉會減少延遲,但是會增加小封包的傳輸。client site 建議把這個值設 true。
  • hadoop.security.authorization
    預設值 : false
    說明 : 是不是要開啟 service-level 帳號驗證機制,開啟之後 Hadoop 在執行任何動作之前都會先確認是否有權限。詳細的權限設定會放在 hadoop-policy.xml 裡。例如要讓 fenriswolf 這個 account 及 mapreduce group 可以 submit M/R jobs,要設定 security.job.submission.protocol.acl
    <property>
         <name>security.job.submission.protocol.acl</name>
         <value>fenriswolf mapreduce</value>
    </property>
  • hadoop.security.authentication
    預設值 : simple
    說明 : simple 表示沒有 authentication,Hadoop 會用 system account 及 group 來控管權限。另外可以指定為 kerberos, 這部分相對比較複雜,要有一個 kerberos server 並產生 account keytab,在執行任何操作前 client 要先用 kinit 指令對 kerberos server 認證,之後的任何操作都是以 kerberos account 來執行。
  • hadoop.kerberos.kinit.command
    預設值 : N/A
    說明 : 如果 hadoop.security.authentication 設為 kerberos 就要多設這個參數指定 Kerberos kinit 指令的路徑。在 CentOS 裝 krb5-workstation package 後預設安裝路徑為 /usr/kerberos/bin/kinit
  • fs.trash.interval
    預設值 : 0(分)
    說明 : 清掉垃圾筒的時間。預設是不清, 所以在刪除資料時要自己執行
    hadoop fs -rm -skipTrash

    hadoop fs -expunge

    來清除垃圾筒的資料,但是強制用 -skipTrash 會造成誤刪的資料救不回來,user 也會常常會忘記做 -expunge 而造成 Hadoop 空間不會釋放。建議可以設為 1440 讓 Hadoop 每天清除垃圾筒。

  • topology.script.file.name
    預設值 : N/A
    說明 : 實作 Hadoop Rack Awareness 的機制,指定一個可執行檔,input 會是一組 hostname 或 ip,回傳值是 rack name 清單。不指定的情況下,Hadoop 會預設所有的 node 都在同一個 rack 之下。
    以下是一個 python 的範例,不過用 shell script 或其他語言寫也可以
    #!/usr/bin/python
     
    import sys
    from string import join
     
    DEFAULT = '/dc/rack0';
     
    RACK_MAP = {
        '10.1.113.37' : '/dc/rack1',
        'hadoop-worker01' : '/dc/rack1',
     
        '10.1.113.77' : '/dc/rack1',
        'hadoop-worker02' : '/dc/rack1',
     
        '10.1.113.45' : '/dc/rack2',
        'hadoop-work03' : '/dc/rack2',
     
        '10.1.113.48' : '/dc/rack2',
        'hadoop-work04' : '/dc/rack2',
      }
     
    if len(sys.argv) == 1:
      print DEFAULT
    else:
      print join([RACK_MAP.get(i, DEFAULT) for i in sys.argv[1:]]," ")


    如上圖所示,一個非常大的 Hadoop cluster 可能會跨多個 data centers,每個 data center 會有多個 racks,每個 rack 有多個 nodes。假設 Hadoop replication number 設 3,在 Hadoop 做 replication 時會根據這個設定,第一份資料放在 local node,第二份資料放在另一個 rack 的某個 node,第三份資料會放在與第二份同個 rack 但不同的 node 下。當網路設定有問題或斷線時,某一個 rack 可能會全部不見,放在不同的 rack 可以保證仍然能存取到資料。為了增加網路的容錯能力,一般都會設定這個 script。
    如果在 cluster 已經有資料的情況下才設定 rack topology,可以用 hadoop balancer 指令讓所有的 blocks 重新分配

  • topology.script.number.args
    預設值 : 100
    說明 : 每次傳給 topology.script.file.name script 的參數個數。如果 Hadoop node 個數過多,topology.script.file.name script 會被執行多次,一次傳入 100 個參數
  • hadoop.native.lib
    預設值 : true
    說明 : 預設 Hadoop 會去找所有可用的 native libraries 並自動 load 進來使用,例如壓縮類的 libraries 像 GZIP, LZO 等等。會設成 false 的原因通常是為了 debug,Hadoop 會把 native libraries 換成相對應的 java 實作方式來執行,例如 GZIP,以方便使用者檢測 libraries 是否執行錯誤。但是 LZO 這類的 libraries 並沒有 java 實作,所以還是會 call native libraries 來做壓縮,也就沒有 debug 的效果了。詳細的壓縮格式類型會在 mapred-site.xml 設定。
 
 name value  Description 
fs.default.name hdfs://hadoopmaster:9000 定義HadoopMaster的URI和埠
fs.checkpoint.dir /opt/data/hadoop1/hdfs/namesecondary1 定義hadoop的name備份的路徑,官方文檔說是讀取這個,寫入dfs.name.dir
fs.checkpoint.period 1800 定義name備份的備份間隔時間,秒為單位,只對snn生效,默認一小時
fs.checkpoint.size 33554432 以日誌大小間隔做備份間隔,只對snn生效,默認64M
io.compression.codecs org.apache.hadoop.io.compress.DefaultCodec
com.hadoop.compression.lzo.LzoCodec
com.hadoop.compression.lzo.LzopCodec
org.apache.hadoop.io.compress.GzipCodec
org.apache.hadoop.io.compress.BZip2Codec
Hadoop所使用的編解碼器,gzip和bzip2為自帶,lzo需安裝hadoopgpl或者kevinweil,逗號分隔,snappy也需要單獨安裝
 io.compression.codec.lzo.class com.hadoop.compression.lzo.LzoCodec LZO所使用的壓縮編碼器 
 topology.script.file.name /hadoop/bin/RackAware.py 機架感知腳本位置 
 topology.script.number.args 1000 機架感知腳本管理的主機數,IP位址 
 fs.trash.interval 10800 HDFS垃圾箱設置,可以恢復誤刪除,分鐘數,0為禁用,添加該項無需重啟hadoop
hadoop.http.filter.initializers org.apache.hadoop.security. AuthenticationFilterInitializer 需要jobtracker,tasktracker
namenode,datanode等http訪問埠用戶驗證使用,需配置所有節點
hadoop.http.authentication.type simple | kerberos |  驗證方式,默認為簡單,也可自己定義class,需配置所有節點
hadoop.http.authentication.
token.validity
36000 驗證權杖的有效時間,需配置所有節點
 hadoop.http.authentication.
signature.secret
默認可不寫參數 默認不寫在hadoop啟動時自動生成私密簽名,需配置所有節點
hadoop.http.authentication.cookie
.domain
domian.tld http驗證所使用的cookie的功能變數名稱,IP位址訪問則該項無效,必須給所有節點都配置功能變數名稱才可以。
 hadoop.http.authentication.
 simple.anonymous.allowed
true | false 簡單驗證專用,默認允許匿名訪問,true
 hadoop.http.authentication.
kerberos.principal
HTTP/localhost@$LOCALHOST Kerberos驗證專用,參加認證的實體機必須使用HTTP作為K的Name
 hadoop.http.authentication.
kerberos.keytab
/home/xianglei/hadoop.keytab Kerberos驗證專用,密鑰文件存放位置
 hadoop.security.authorization true|false Hadoop服務層級驗證安全驗證,需配合hadoop-policy.xml使用,配置好以後用dfsadmin,mradmin -refreshServiceAcl刷新生效
 io.file.buffer.size 131072 用作序列化檔處理時讀寫buffer的大小
 hadoop.security.authentication simple | kerberos hadoop本身的許可權驗證,非http訪問,simple或者kerberos
 hadoop.logfile.size 1000000000 設置日誌檔大小,超過則產生新日誌
 hadoop.logfile.count 20 最大日誌數
 io.bytes.per.checksum 1024 每校驗碼所校驗的位元組數,不要大於io.file.buffer.size
 io.skip.checksum.errors true | false 處理序列化檔時跳過校驗碼錯誤,不拋異常。默認false
 io.serializations org.apache.hadoop.io.serializer. WritableSerialization 序列化的編解碼器
 io.seqfile.compress.blocksize 1024000 塊壓縮的序列化檔的最小塊大小,位元組
 webinterface.private.actions true | false 設為true,則JT和NN的tracker網頁會出現殺任務刪檔等操作連接,默認是false
實際根據硬體配置的不同,參數大小需做調整

from http://fenriswolf.me/2012/04/05/hadoop-%E5%8F%83%E6%95%B8%E8%A8%AD%E5%AE...
Free Web Hosting