由於客戶端必須將從MapReduce作業生成的文件的所有權轉移給HBase,所以在安全模式下的批量加載比正常設置涉及更多。安全批量加載由名為SecureBulkLoadEndpoint的協處理器實現,該協處理器使用由配置屬性hbase.bulkload.staging.dir配置的暫存目錄,該目錄默認為/tmp/hbase-staging/。
安全批量加載算法
- 只有一次,創建一個臨時目錄,這個目錄是全局通用的,並由運行HBase的用戶擁有(模式711或rwx—x—x)。此目錄的列表將類似於以下內容:
<code>$ ls -ld /tmp/hbase-staging
drwx--x--x 2 hbase hbase 68 3 Sep 14:54 /tmp/hbase-staging/<code>
- 用戶將數據寫入該用戶擁有的安全輸出目錄。例如,/user/foo/data。
- 在內部,HBase創建一個全局可讀/可寫(-rwxrwxrwx, 777)的秘密的臨時目錄。例如,/tmp/hbase-staging/averylongandrandomdirectoryname。該目錄的名稱和位置不會公開給用戶。HBase管理這個目錄的創建和刪除。
- 用戶使數據具有全局可讀性和可寫性,將其移入隨機的臨時目錄,然後調用該SecureBulkLoadClient#bulkLoadHFiles方法。
安全的優勢在於秘密目錄的長度和隨機性。
要啟用安全批量加載,請將以下屬性添加到hbase-site.xml。
<code><property>
<name>hbase.security.authorization/<name>
<value>true/<value>
/<property>
<property>
<name>hbase.bulkload.staging.dir/<name>
<value>/tmp/hbase-staging/<value>
/<property>
<property>
<name>hbase.coprocessor.region.classes/<name>
<value>org.apache.hadoop.hbase.security.token.TokenProvider,
org.apache.hadoop.hbase.security.access.AccessController,
org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint/<value>
/<property>/<code>
閱讀更多 會飛的魚go 的文章