hive server

hive server

hive 1

啟動(dòng):

hive --service hiveserver

jdbc連接

org.apache.hadoop.hive.jdbc.HiveDriver
dbc:hive://172.22.1.100:10000/test

hive2

hive --service hiveserver2

jdbc連接

org.apache.hive.jdbc.HiveDriver
dbc:hive2://172.22.1.100:10000/test

開(kāi)啟遠(yuǎn)程寫(xiě)的權(quán)限

hdfs-site.xml

<property>
<name>dfs.permissions</name>
<value>false</value>
</property>

配置用戶自定義安全策略

首先hive支持多種安全認(rèn)證方式:NONE,NOSASL, KERBEROS, LDAP, PAM ,CUSTOM等涩澡,一般默認(rèn)配置為none就是沒(méi)有任何驗(yàn)證赏淌,所以需要其他的安全策略池户,我選擇的是CUSTOM(自定義安全策略)店量。
如果將hive.server2.authentication設(shè)置成CUSTOM泽篮,則需要設(shè)置
hive.server2.custom.authentication.class來(lái)指定用于權(quán)限認(rèn)證的類丐膝,這個(gè)類需要實(shí)現(xiàn)
org.apache.hive.service.auth.PasswdAuthenticationProvider接口丑瞧。
首先實(shí)現(xiàn)一個(gè)自定義類:

package com.imis.project;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.security.sasl.AuthenticationException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hive.service.auth.PasswdAuthenticationProvider;

public class CustomHiveServer2Auth implements PasswdAuthenticationProvider  {
    @Override
    public void Authenticate(String username, String password)
            throws AuthenticationException {
        
        boolean ok = false;
        String passMd5 = new MD5().md5(password);
        HiveConf hiveConf = new HiveConf();
        Configuration conf = new Configuration(hiveConf);
      
        String filePath=null;
        File file=null;
        try {
            filePath=conf.get("hive.server2.custom.authentication.file");
            System.out.println("hive.server2.custom.authentication.file ["
                    + filePath + "] ..");
            file = new File(filePath);
        } catch (Exception e) {
            
            System.out.println("not found!");
        }
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new FileReader(file));
            String tempString = null;
            while ((tempString = reader.readLine()) != null) {
                String[] datas = tempString.split(",", -1);
                if(datas.length != 2) continue;
                //ok
                if(datas[0].equals(username) && datas[1].equals(passMd5)) {
                    ok = true;
                    break;
                }
            }
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new AuthenticationException("read auth config file error, [" + filePath + "] ..", e);
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e1) {}
            }
        }
        if(ok) {
            System.out.println("user [" + username + "] auth check ok .. ");
        } else {
            System.out.println("user [" + username + "] auth check fail .. ");
            throw new AuthenticationException("user [" + username + "] auth check fail .. ");
        }
    }
    
    //MD5加密
    class MD5 {
        private MessageDigest digest;
        private char hexDigits[] = {'0','1','2','3','4','5','6','7',
        '8','9','a','b','c','d','e','f'};
        
        public MD5() {
            try {
              digest = MessageDigest.getInstance("MD5");
            } catch (NoSuchAlgorithmException e) {
              throw new RuntimeException(e);
            }
        }
         public String md5(String str) {
            byte[] btInput = str.getBytes();
            digest.reset();
            digest.update(btInput);
            byte[] md = digest.digest();
            // 把密文轉(zhuǎn)換成十六進(jìn)制的字符串形式
            int j = md.length;
            char strChar[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                strChar[k++] = hexDigits[byte0 >>> 4 & 0xf];
                strChar[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(strChar);
        }
    }
}

然后整個(gè)項(xiàng)目打包趾痘,包括包的結(jié)構(gòu)命名為HiveServer2Auth.jar,放到$HIVE_HOME/lib下
hive-site.xml

<property>
<name>hive.server2.authentication</name>
<value>CUSTOM</value>
</property>
<property>
<name>hive.server2.custom.authentication.class</name>
<value>com.imis.project.CustomHiveServer2Auth</value>
</property>
<property>
<name>hive.server2.custom.authentication.file</name>
<value>/usr/local/apache-hive-0.13.1-bin/conf/hive.server2.users.conf</value>
</property>

在$HIVE_HOME/conf下新建文件hive.server2.users.conf凹耙,里面寫(xiě)入內(nèi)容:
[root@dev conf]# cat hive.server2.users.conf
user,5f4dcc3b5aa765d61d8327deb882cf99

然后重要的一件事姿现,配置hive的日志
在hive的conf目錄下執(zhí)行

cp hive-log4j.properties.template hive-log4j.properties
修改
hive.log.dir=/home/hadoop/hive/conf # 默認(rèn)的存儲(chǔ)位置
hive.log.file=hive.log # 默認(rèn)的文件名

最后在相應(yīng)目錄下新建hive.log文件就可以看到hive系統(tǒng)日志了

當(dāng)然你也可以配置job的日志

啟動(dòng)hiveserver2,已經(jīng)做到了權(quán)限控制肠仪。

遠(yuǎn)程調(diào)用mapreduce的問(wèn)題

返回錯(cuò)誤代碼1肖抱,表示的是用戶認(rèn)證的錯(cuò)誤
返回錯(cuò)誤代碼2,表示的是參數(shù)的問(wèn)題

此處查看hive.log發(fā)現(xiàn)是

user=imis, access=EXECUTE, inode="/tmp/hadoop-yarn":hadoop:supergroup:rwx----)

此處解決方案:首先發(fā)現(xiàn)是權(quán)限的問(wèn)題然后通過(guò)命令

hadoop fs -ls /tmp

發(fā)現(xiàn)有兩個(gè)目錄hadoop-yarn和hive异旧,在hive里面就是剛剛在自定義安全策略里面的用戶名的目錄比如user
然后就會(huì)發(fā)現(xiàn)user是沒(méi)有辦法使用hadoop-yarn目錄的意述,因?yàn)閡ser沒(méi)有權(quán)限,所以首先把hive目錄下的用戶授予權(quán)限吮蛹,然后改變hadoop-yarn的權(quán)限荤崇。

hdfs dfs -chmod -R 777 /tmp/hadoop-yarn
hdfs dfs -chomd -R 777 /tmp/hive

注:此處hadoop-tarn和hive的用戶是hadoop組是supergroup,有一個(gè)現(xiàn)象就是root用戶沒(méi)有授予權(quán)限的權(quán)限潮针,只能由hadoop用戶授予777權(quán)限术荤。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市每篷,隨后出現(xiàn)的幾起案子瓣戚,更是在濱河造成了極大的恐慌,老刑警劉巖焦读,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件子库,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡矗晃,警方通過(guò)查閱死者的電腦和手機(jī)仑嗅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人仓技,你說(shuō)我怎么就攤上這事鸵贬。” “怎么了脖捻?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵恭理,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我郭变,道長(zhǎng)颜价,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任诉濒,我火速辦了婚禮周伦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘未荒。我一直安慰自己专挪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布片排。 她就那樣靜靜地躺著寨腔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪率寡。 梳的紋絲不亂的頭發(fā)上迫卢,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音冶共,去河邊找鬼乾蛤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛捅僵,可吹牛的內(nèi)容都是我干的家卖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼庙楚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼上荡!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起馒闷,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤酪捡,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后窜司,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體沛善,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年塞祈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了金刁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖尤蛮,靈堂內(nèi)的尸體忽然破棺而出媳友,到底是詐尸還是另有隱情,我是刑警寧澤产捞,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布醇锚,位于F島的核電站,受9級(jí)特大地震影響坯临,放射性物質(zhì)發(fā)生泄漏焊唬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一看靠、第九天 我趴在偏房一處隱蔽的房頂上張望赶促。 院中可真熱鬧,春花似錦挟炬、人聲如沸鸥滨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)婿滓。三九已至,卻和暖如春粥喜,著一層夾襖步出監(jiān)牢的瞬間凸主,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工容客, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秕铛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓缩挑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鬓梅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子供置,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容