當前位置:首頁 » 編程軟體 » hive腳本變數

hive腳本變數

發布時間: 2022-12-29 03:21:37

1. hive sql 中 怎麼用變數

第一步先准備測試表和測試數據用於後續測試:
hive> create database test;
OK
Time taken: 2.606 seconds

然後執行建表和導入數據的sql文件:
[[email protected] testHivePara]$ hive -f student.sql
Hive history file=/tmp/crazyant.net/hive_job_log_czt_201309131615_1720869864.txt
OK
Time taken: 2.131 seconds
OK
Time taken: 0.878 seconds
Copying data from file:/home/users/czt/testdata_student
Copying file: file:/home/users/czt/testdata_student
Loading data to table test.student
OK

2. Hive常用命令

#hive相關資料

#http://blog.csdn.net/u013310025/article/details/70306421

#https://www.cnblogs.com/guanhao/p/5641675.html

#http://blog.csdn.net/wisgood/article/details/40560799

#http://blog.csdn.net/seven_zhao/article/details/46520229

#獲取主機相關信息

export password='qwe'

export your_ip=$(ip ad|grep inet|grep -v inet6|grep -v 127.0.0.1|awk '{print $2}'|cut -d/ -f1)

export your_hosts=$(cat /etc/hosts |grep $(echo $your_ip)|awk '{print $2}')

#安裝mysql

echo "mysql-server-5.5 mysql-server/root_password password $password" | debconf-set-selections

echo "mysql-server-5.5 mysql-server/root_password_again password $password" | debconf-set-selections

apt-get -y install mariadb-server python-pymysql --force-yes

echo "[mysqld]

bind-address = $your_ip

default-storage-engine = innodb

innodb_file_per_table

max_connections = 4096

collation-server = utf8_general_ci

character-set-server = utf8" | tee > /etc/mysql/conf.d/openstack.cnf

sed -i "s/127.0.0.1/0.0.0.0/g" /etc/mysql/mariadb.conf.d/50-server.cnf

service mysql restart

#創建hive用戶和賦予許可權

mysql -uroot -p$password <<EOF

CREATE DATABASE hive;

CREATE USER 'hive' IDENTIFIED BY "$password";

GRANT ALL PRIVILEGES ON  *.* TO 'hive'@'%' WITH GRANT OPTION;

flush privileges;

EOF

#增加hive環境變數

hive_flag=$(grep "hive" /etc/profile)

if [ ! -n "$hive_flag" ]; then

    sed -i "s/\$PATH:/\$PATH:\/opt\/apache-hive-2.3.2-bin\/bin:/g" /etc/profile

else

    echo "Already exist!"

fi

#使腳本中環境變數生效

source /etc/profile

#修改hive配置

echo "$(grep "JAVA_HOME=" /etc/profile)

$(grep "HADOOP_HOME=" /etc/profile)

export HIVE_HOME=/opt/apache-hive-2.3.2-bin

export HIVE_CONF_DIR=/opt/apache-hive-2.3.2-bin/conf" |tee >> /opt/apache-hive-2.3.2-bin/conf/hive-env.sh

sed -i "s/hadoop3/$your_hosts/g" /opt/apache-hive-2.3.2-bin/conf/hive-site.xml

#在hdfs 中創建下面的目錄 ,並賦予所有許可權

hdfs dfs -mkdir -p /user/hive/warehouse

hdfs dfs -mkdir -p /user/hive/tmp

hdfs dfs -mkdir -p /user/hive/log

hdfs dfs -chmod -R 777 /user/hive/warehouse

hdfs dfs -chmod -R 777 /user/hive/tmp

hdfs dfs -chmod -R 777 /user/hive/log

mkdir -p /user/hive/tmp

#初始化hive

schematool -dbType mysql -initSchema

#安裝hive到此結束

#######################

#創建hive表

create table film

(name string,

time string,

score string,

id int,

time1 string,

score1 string,

name2 string,

score2 string)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ';'

STORED AS TEXTFILE;

#將本地文本導入hive

load data local inpath '/root/my.txt' overwrite into table film;

#hive相關筆記

create table patition_table(name string,salary float,gender string)  partitioned by (dt string,dep string)  row format delimited fields terminated by ',' stored as textfile;

create database movie;

create table movie(name string,data string,record int);

#刪除表

DROP TABLE if exists movies;

#創建表

CREATE TABLE movies(

    name string,

    data string,

    record int

) COMMENT '2014全年上映電影的數據記錄' FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;

load data local inpath 'dat0204.log' into table movies;

#hive 中使用dfs命令

hive> dfs -ls /user/hive/warehouse/wyp ;

select * from movies;

hive -e "select * from test" >> res.csv 

或者是: 

hive -f sql.q >> res.csv 

其中文件sql.q寫入你想要執行的查詢語句 

#導出到本地文件系統

hive> insert overwrite local directory '/home/wyp/wyp'

hive> select * from wyp;

導出到HDFS中

和導入數據到本地文件系統一樣的簡單,可以用下面的語句實現:

hive> insert overwrite directory '/home/wyp/hdfs'

hive> select * from wyp;

將會在HDFS的/home/wyp/hdfs目錄下保存導出來的數據。注意,和導出文件到本地文件系統的HQL少一個local,數據的存放路徑就不一樣了。

#將提取到的數據保存到臨時表中

insert overwrite table movies

本地載入  load data local inpath '/Users/tifa/Desktop/1.txt' into table test;

從hdfs上載入數據  load data inpath '/user/hadoop/1.txt' into table test_external; 

抹掉之前的數據重寫  load data inpath '/user/hadoop/1.txt' overwrite into table test_external;

3. hive語句中含有特殊符合$,導致使用hive -e "語句"時,引用不到變數

最近遇到的問題,由於hive語句中欄位包含特殊符號 id` ,沒有問題。

但是因為我要在shell里循環多個日期跑,使用hive -e "語句"時,卻報錯,最後排查是因為hive -e後面接雙引號的話,會導致反引號失效,導致shell認為$id是參數。

解決方式:需要用hive -e '語句'來執行,並且將語句中本來判斷條件的單引號換為雙引號,需要傳參的地方,用雙引號+單引號參數即"'參數'"的形式。

4. 在Hive中如何實現數據分區

一、Hive only:載入分區數據的快捷方法

如果指定的分區不存在Hive將創建新的分區


但是在hive分區中我們應該注意一些問題,比如:

(1)注意:Beeline設置的Hive變數只在當前會話有效,系統管理員可以設置永久生效

(2)注意:如果分區列有很多唯一值,將會創建很多分區

另外,我們可以給Hive配置參數來限制分區數 :

(1) hive.exec.max.dynamic.partitions.pernode

查詢在某個節點上可以創建的最大動態分區數,默認100

(2) hive.exec.max.dynamic.partitions

一個HiveQL語句可以創建的最大動態分區數 ,默認1000

(3)hive.exec.max.created.files

一個查詢總共可以創建的最大動態分區數,默認1000000

5. 如何每日增量載入數據到Hive分區表

載入數據
數據載入到Hive分區表(兩個分區,日期(20160316)和小時(10))中
每日載入前一天的日誌文件數據到表db_track.track_log
1.
數據存儲
數據日誌文件,放入某個目錄下,每天日誌文件放入同一個目錄
eg:
20160316
-
目錄名稱
日誌文件數據,每個小時生成一個文件,一天總共有二十四個文件
eg:
2016031820
2.
shell腳本編寫
負責調度的shell腳本load_tracklogs.sh
註:這里涉及到了兩個點:1)for循環
2)
linux下字元串的截取${line:0:4}
3)
傳遞參數到hive的sql腳本
#!/bin/sh
##
環境變數生效
.
/etc/profile
##
HIVE
HOME
HIVE_HOME=/opt/cdh5.3.6/hive-0.13.1-cdh5.3.6
##
日誌目錄
LOG_DIR=/data/tracklogs
##
目錄名稱,
依據日期date獲取
yesterday=`date
-d
-1days
'+%Y%m%d'`
###
for
line
in
`ls
$LOG_DIR/${yesterday}`
do
echo
"loading
$line
.............."
#從文件名稱中解析出日期和小時
daily=${line:0:4}${line:4:2}${line:6:2}
hour=${line:8:2}
LOAD_FILE=${LOG_DIR}/${yesterday}/${line}
###
echo
$daily
+
$hour
###
${HIVE_HOME}/bin/hive
-e
"LOAD
DATA
LOCAL
INPATH
'${LOAD_FILE}'
OVERWRITE
INTO
TABLE
db_track.track_log
PARTITION(date
=
'${daily}',
hour
=
'${hour}')
;"
${HIVE_HOME}/bin/hive
--hiveconf
LOAD_FILE_PARAM=${LOAD_FILE}
--hiveconf
daily_param=${daily}
--hiveconf
hour_param=${hour}
-f
/home/hadoop/load_data.sql
done
負責載入數據的sql腳本
注:
怎麼在HQL腳本中獲取外接傳遞的參數
LOAD
DATA
LOCAL
INPATH
'${hiveconf:LOAD_FILE_PARAM}'
OVERWRITE
INTO
TABLE
db_track.track_log
PARTITION(date
=
'${hiveconf:daily_param}',
hour
=
'${hiveconf:hour_param}')
;
制定每天定時執行
可以在當前用戶下直接創建:crontab
-e
註:crontab中的五個
*號分別代表分,時,日,月,周,下面的例子就是每天晚上1點30運行任務的例子,注意sh命令前一般需要加上絕對路徑
#
LODAD
DATA
INTO
TRACK_LOG
30
1
*
*
*
/bin/sh
/home/hadoop/load_tracklogs.sh

6. 為什麼使用HiveHive提供了什麼Hive支持哪些用戶

為什麼使用Hive?
為什麼使用Hive?那麼,在哪裡使用Hive呢?在載入了60億行(經度、維度、時間、數據值、高度)數據集到MySQL後,系統崩潰了,並經歷過數據丟失。這可能部分是因為我們最初的策略是將所有的數據都存儲到單一的一張表中了。後來,我們調整了策略通過數據集和參數進行分表,這有所幫助但也因此引入了額外的消耗,而這並非是我們願意接受的。
相反,我們決定嘗試使用Apache Hive技術。我們安裝了Hive 0.5 + 20,使用CDHv3和Apache Hadoop(0 20 2 + 320)。CDHv3還包含有許多其他相關工具,包括Sqoop和Hue這些在我們的架構中都標識出來了,如圖23-3底部所示。
我們使用Apache Sqoop轉儲數據到Hive中,然後通過寫一個Apache OODT包裝器,來使Hive按照空間/時間約束查詢數據,然後將結果提供給RCMET和其他用戶(圖23-2中間部分顯示)。RCMES集群的完整的架構如圖23- 3所示。我們有5台機器,包括圖中所示的一個主/從配置,通過一個運行GigE的私人網進行連接。

Hive提供了什麼
Photobucket公司使用Hive的主要目標是為業務功能、系統性能和用戶行為提供答案。為了滿足這些需求,我們每晚都要通過Flume從數百台伺服器上的MySQL資料庫中轉儲來自Web伺服器和自定義格式日誌TB級別的數據。這些數據有助於支持整個公司許多組織,比如行政管理、廣告、客戶支持、產品開發和操作,等等。對於歷史數據,我們保持所有MySQL在每月的第一天創建的所有的數據作為分區數據並保留30天以上的日誌文件。Photobucket使用一個定製的ETL框架來將MySQL資料庫中數據遷移到Hive中。使用Flume將日誌文件數據寫入到HDFS中並按照預定的Hive流程進行處理。

Hive支持的用戶有哪些
行政管理依賴於使用Hadoop提供一般業務健康狀況的報告。Hive允許我們解析結構化資料庫數據和非結構化的點擊流數據,以及業務所涉及的數據格式進行讀取。
廣告業務使用Hive篩選歷史數據來對廣告目標進行預測和定義配額。產品開發無疑是該組織中產生最大數量的特定的查詢的用戶了。對於任何用戶群,時間間隔變化或隨時間而變化。Hive是很重要的,因為它允許我們通過對在當前和歷史數據中運行A / B測試來判斷在一個快速變化的用戶環境中新產品的相關特性。
在Photobucket公司中,為我們的用戶提供一流的系統是最重要的目標。從操作的角度來看,Hive被用來匯總生成跨多個維度的數據。在公司里知道最流行的媒體、用戶、參考域是非常重要的。控制費用對於任何組織都是重要的。一個用戶可以快速消耗大量的系統資源,並顯著增加每月的支出。Hive可以用於識別和分析出這樣的惡意用戶,以確定哪些是符合我們的服務條款,而哪些是不符合的。也可以使用Hive對一些操作運行A / B測試來定義新的硬體需求和生成ROI計算。Hive將用戶從底層MapRece代碼解放出來的能力意味著可以在幾個小時或幾天內就可以獲得答案,而不是之前的數周。

Hive中的資料庫

Hive中資料庫的概念本質上僅僅是表的一個目錄或者命名空間。然而,對於具有很多組和用戶的大集群來說,這是非常有用的,因為這樣可以避免表命名沖突。通常會使用資料庫來將生產表組織成邏輯組。
如果用戶沒有顯式指定資料庫,那麼將會使用默認的資料庫default。
下面這個例子就展示了如何創建一個資料庫:
hive> CREATE DATABASE financials;

如果資料庫financials已經存在的話,那麼將會拋出一個錯誤信息。使用如下語句可以避免在這種情況下拋出錯誤信息:
hive> CREATE DATABASE IF NOT EXISTS financials;

雖然通常情況下用戶還是期望在同名資料庫已經存在的情況下能夠拋出警告信息的,但是IF NOT EXISTS這個子句對於那些在繼續執行之前需要根據需要實時創建資料庫的情況來說是非常有用的。
在所有的資料庫相關的命令中,都可以使用SCHEMA這個關鍵字來替代關鍵字TABLE。
隨時可以通過如下命令方式查看Hive中所包含的資料庫:
hive> SHOW DATABASES;
default
financials

hive> CREATE DATABASE human_resources;

hive> SHOW DATABASES;
default
financials
human_resources

如果資料庫非常多的話,那麼可以使用正則表達式匹配來篩選出需要的資料庫名,正則表達式這個概念,將會在第6.2.3節「Like和RLike」介紹。下面這個例子展示的是列舉出所有以字母h開頭,以其他字元結尾(即.*部分含義)的資料庫名:
hive> SHOW DATABASES LIKE 'h.*';
human_resources
hive> ...

Hive會為每個資料庫創建一個目錄。資料庫中的表將會以這個資料庫目錄的子目錄形式存儲。有一個例外就是default資料庫中的表,因為這個資料庫本身沒有自己的目錄。
資料庫所在的目錄位於屬性hive.metastore.warehouse.dir所指定的頂層目錄之後,這個配置項我們已經在前面的第2.5.1節「本地模式配置」和第2.5.2節「分布式模式和偽分布式模式配置」中進行了介紹。假設用戶使用的是這個配置項默認的配置,也就是/user/hive/warehouse,那麼當我們創建資料庫financials時,Hive將會對應地創建一個目錄/user/hive/warehouse/financials.db。這里請注意,資料庫的文件目錄名是以.db結尾的。
用戶可以通過如下的命令來修改這個默認的位置:
hive> CREATE DATABASE financials
> LOCATION '/my/preferred/directory';

用戶也可以為這個資料庫增加一個描述信息,這樣通過DESCRIBE DATABASE <database> 命令就可以查看到該信息。
hive> CREATE DATABASE financials
> COMMENT 'Holds all financial tables';

hive> DESCRIBE DATABASE financials;
financials Holds all financial tables
hdfs://master-server/user/hive/warehouse/financials.db

從上面的例子中,我們可以注意到,DESCRIEB DATABASE語句也會顯示出這個資料庫所在的文件目錄位置路徑。在這個例子中,URI格式是hdfs。如果安裝的是MapR,那麼這里就應該是maprfs。對於亞馬遜彈性MapRece(EMR)集群,這里應該是hdfs,但是用戶可以設置hive.metastore.warehouse.dir為亞馬遜S3特定的格式(例如,屬性值設置為s3n://bucketname...)。用戶可以使用s3作為模式,但是如果使用新版的規則s3n會更好。
前面DESCRIBE DATABASE語句的輸出中,我們使用了master-server來代表URI許可權,也就是說應該是由文件系統的「主節點」(例如,HDFS中運行NameNode服務的那台伺服器)的伺服器名加上一個可選的埠號構成的(例如,伺服器名:埠號這樣的格式)。如果用戶執行的是偽分布式模式,那麼主節點伺服器名稱就應該是localhost。對於本地模式,這個路徑應該是一個本地路徑,例如file:///user/hive/warehouse/financials.db。
如果這部分信息省略了,那麼Hive將會使用Hadoop配置文件中的配置項fs.default.name作為master-server所對應的伺服器名和埠號,這個配置文件可以在$HADOOP_HOME/conf這個目錄下找到。
需要明確的是,hdfs:///user/hive/warehouse/financials.db和hdfs://master-server/user/hive/
warehouse/financials.db是等價的,其中master-server是主節點的DNS名和可選的埠號。
為了保持完整性,當用戶指定一個相對路徑(例如,some/relative/path)時,對於HDFS和Hive,都會將這個相對路徑放到分布式文件系統的指定根目錄下(例如,hdfs:///user/<user-name>)。然而,如果用戶是在本地模式下執行的話,那麼當前的本地工作目錄將是some/relative/path的父目錄。
為了腳本的可移植性,通常會省略掉那個伺服器和埠號信息,而只有在涉及到另一個分布式文件系統實例(包括S3存儲)的時候才會指明該信息。
此外,用戶還可以為資料庫增加一些和其相關的鍵-值對屬性信息,盡管目前僅有的功能就是提供了一種可以通過DESCRIBE DATABASE EXTENDED <database>語句顯示出這些信息的方式:
hive> CREATE DATABASE financials
> WITH DBPROPERTIES ('creator' = 'Mark Moneybags', 'date' = '2012-01-02');

hive> DESCRIBE DATABASE financials;
financials hdfs://master-server/user/hive/warehouse/financials.db

hive> DESCRIBE DATABASE EXTENDED financials;
financials hdfs://master-server/user/hive/warehouse/financials.db
{date=2012-01-02, creator=Mark Moneybags);

USE命令用於將某個資料庫設置為用戶當前的工作資料庫,和在文件系統中切換工作目錄是一個概念:
hive> USE financials;

現在,使用像SHOW TABLES這樣的命令就會顯示當前這個資料庫下所有的表。
不幸的是,並沒有一個命令可以讓用戶查看當前所在的是哪個資料庫!幸運的是,在Hive中是可以重復使用USE…命令的,這是因為在Hive中並沒有嵌套資料庫的概念。
可以回想下,在第2.7.2節「變數和屬性」中提到過,可以通過設置一個屬性值來在提示符裡面顯示當前所在的資料庫(Hive v0.8.0版本以及之後的版本才支持此功能):
hive> set hive.cli.print.current.db=true;

hive (financials)> USE default;

hive (default)> set hive.cli.print.current.db=false;

hive> ...

最後,用戶可以刪除資料庫:
hive> DROP DATABASE IF EXISTS financials;

IF EXISTS子句是可選的,如果加了這個子句,就可以避免因資料庫finanacials不存在而拋出警告信息。
默認情況下,Hive是不允許用戶刪除一個包含有表的資料庫的。用戶要麼先刪除資料庫中的表,然後再刪除資料庫;要麼在刪除命令的最後面加上關鍵字CASCADE,這樣可以使Hive自行先刪除資料庫中的表:
hive> DROP DATABASE IF EXISTS financials CASCADE;

如果使用的是RESTRICT這個關鍵字而不是CASCADE這個關鍵字的話,那麼就和默認情況一樣,也就是,如果想刪除資料庫,那麼必須先要刪除掉該資料庫中的所有表。
如果某個資料庫被刪除了,那麼其對應的目錄也同時會被刪除。

7. hive中怎麼循環查詢語句,比如循環查詢第1-6條記錄。能不能定義個變數讓它從1增加到6,謝謝回答!

I是計數變數,也就是控制運算次數的,I的賦值你完全可以自己定義,不是唯一的,這里用I=2,是為了簡化程序,讓I既做計數變數,又可以用來參與運算---S4T「=」T×I;T賦予1是因為要從1連乘到5,其實你也可以把程序倒過來寫,從5連乘到1解:S1T「=」(賦值語句的符號)5S2I「=」4S3如果I大於等於(懶得找符號)1,那麼轉S4,否則轉S6;S4T「=」T×I;S5I「=」I-1,轉S3;S6輸出T

8. CDH Hive 配置HiveServer2

翻譯: https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_ig_hiveserver2_configure.html
版本:5.14.2

在使用HiveServer2之前,您必須進行以下配置更改。不這樣做可能會導致不可預知的行為。
警告: HiveServer1在CDH 5.3起不推薦使用,並且將在未來的CDH版本中刪除。HiveServer1的用戶應該盡快升級到 HiveServer2 。

重要提示:這些數字只是一般性指導,可能會受到諸如列數,分區,復雜聯接和客戶端活動等因素的影響。根據您的預期部署,通過測試進行優化以達到您的環境的最佳值。

有關為HiveServer2配置堆以及Hive Metastore和Hive客戶端的信息,請參閱 Hive組件的堆大小和垃圾收集 以及以下視頻:

解決HiveServer2服務崩潰問題

當您啟動視頻,請點擊YouTube上在播放器窗口的右下角看它在YouTube上,你可以調整它的大小更清晰的觀看。 (!--)

您必須正確配置並啟用Hive的表鎖管理器。這需要安裝ZooKeeper並設置一個ZooKeeper集合; 請參閱 ZooKeeper安裝 。

重要提示:如果不這樣做將會阻止HiveServer2處理並發查詢請求,並可能導致數據損壞。

通過設置屬性啟用鎖管理器 /etc/hive/conf/hive-site.xml 如下所示(用實例中的實際ZooKeeper節點名替換):

重要提示:啟用表鎖管理器而不指定有效的Zookeeper法定節點列表將導致不可預知的行為。確保兩個屬性都已正確配置。

(如果您仍在使用HiveServer1,還需要上述設置。不推薦使用HiveServer1;盡快遷移到HiveServer2。)

如果ZooKeeper沒有使用ClientPort默認值,你需要設置 hive.zookeeper.client.port 與ZooKeeper使用的值相同。檢查/etc/zookeeper/conf/zoo.cfg 以找到ClientPort值。如果ClientPort 設置為除2181(默認值)以外的任何值,設置hive.zookeeper.client.port 。例如,如果ClientPort 設置為2222,設置 hive.zookeeper.client.port 也是2222:

HiveServer2和HiveServer1的連接URL格式和驅動程序類別不同:

HiveServer2可以 配置 為驗證所有連接; 默認情況下,它允許任何客戶端連接。HiveServer2支持 Kerberos 或 LDAP 身份驗證; 配置屬性為hive.server2.authentication 。您還可以配置 可插入身份驗證 ,它允許您為HiveServer2使用自定義身份驗證提供程序; 和 HiveServer2 Impersonation ,它允許用戶以連接用戶的身份執行查詢和訪問HDFS文件,而不是啟動HiveServer2守護進程的超級用戶。有關更多信息,請參閱 Hive安全配置 。

警告:由於並發和安全問題,HiveServer1和Hive CLI在CDH 5中不推薦使用,並且將在未來版本中刪除。Cloudera建議您盡快遷移到 Beeline 和 HiveServer2 。如果您使用HiveServer2的Beeline,則不需要Hive CLI。

HiveServer2和HiveServer1可以在同一個系統上並發運行,共享相同的數據集。這允許您運行HiveServer1以支持使用本機HiveServer1 Thrift綁定的Perl或Python腳本。

默認情況下,HiveServer2和HiveServer1都綁定到埠10000,所以至少其中一個必須配置為使用不同的埠。您可以通過hive -site.xml中的hive.server2.thrift.port 設置HiveServer2的埠屬性。例如:

您也可以通過設置這些環境變數來指定埠(以及HiveServer2的主機IP地址):

9. 在hive查詢中使用變數

Hive配置屬性存儲於 hiveconf 命名空間中,該命名空間中的屬性是可讀寫的。在查詢語句中插入 '${hiveconf:變數名}' ,就可以通過 hive -hiveconf來替換變數。例如,查詢語句和執行方式如下:

需要注意的是:

Hive命令行變數,存儲於 hivevar 命名空間中,該命名空間中的變數是可讀寫的。使用方式和hive配置屬性類似,只是在查詢語句中插入的是 '${hivecar:變數名}' ,其中命名空間"hivecar:"可以省略。例如:

因為命令行變數的命名空間是唯一可以省略的,因此:

其他替換變數的方法:
利用shell腳本設置hive查詢語句中的變數
利用Python替換Hive查詢語句中的變數

10. hive在啟動過程中會去環境變數中找哪個hadoop的變數

一、hive配置

1.安裝環境

在hadoop-1.2.1集群上安裝hive-1.2.1

2.將hive-1.2.1環境變數添加到PATH路徑下

使用如下命令打開配置文件

nano /etc/profile

在打開的配置文件里添加如下代碼

export HIVE_HOME=/opt/hive-1.2.1PATH=$HIVE_HOME/bin:$PATH

3.配置hive-default.xml和hive-site.xml

在/opt/hive-1.2.1/conf目錄下沒有這兩個文件夾,只有一個hive-default.xml.template,復制hive-default.xml.template,命名為hive-default.xml。

然後修改hive-default.xml文件里的內容,將默認的路徑換成絕對路徑,具體修改如下圖:

然後復制hive-default.xml,命名為hive-site.xml。

在/opt/hive-1.2.1/conf只有hive-env.sh.template文件,復制hive-site.sh.template並命名為hive-site.sh,然後修改hive-site.sh文件許可權,使用如下命令

chmod u+x hive-env.sh

4.配置hive-log4j.properties

在/opt/hive-1.2.1/conf目錄下只有hive-log4j.properties.template文件,復制hive-log4j.properties.template並命名為hive-log4j.properties,命令如下

cp hive-log4j.properties.template hive-log4j.properties

將log4j.appender.EventCounter=org.apache.hadoop.hive.shims.HiveEventCounter

修改為:log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter

否則會出現警告:

WARN conf.HiveConf: HiveConf of name hive.metastore.local does not exist
WARNING: org.apache.hadoop.metrics.jvm.EventCounter is deprecated. Please use org.apache.hadoop.log.metrics.EventCounter in all the log4j.properties files.

5.啟動hive

使用命令hive啟動

二、在啟動過程中出現的問題

1./tmp/hive文件許可權問題

解決方案:需要使用如下命令修改/tmp/hive文件許可權

hadoop fs -chmod -R 777 /tmp/hive

2.找不到路徑問題

解決方案:需要按照上述步驟3來配置hive-default.xml和hive-site.xml文件。

熱點內容
原神電腦配置怎麼玩不卡 發布:2025-07-20 18:07:06 瀏覽:955
反編譯獲取原代碼 發布:2025-07-20 17:49:43 瀏覽:492
plc編譯怎麼找 發布:2025-07-20 17:48:56 瀏覽:162
無效的宏名稱將編譯啞宏 發布:2025-07-20 17:48:16 瀏覽:155
250萬解壓 發布:2025-07-20 17:44:52 瀏覽:620
騰訊視頻上傳廣告 發布:2025-07-20 17:35:55 瀏覽:406
掘地求升免費腳本 發布:2025-07-20 17:32:06 瀏覽:962
linux設置python環境變數 發布:2025-07-20 17:22:49 瀏覽:242
柱底層加密區 發布:2025-07-20 17:16:20 瀏覽:913
安卓ids是什麼文件 發布:2025-07-20 17:16:14 瀏覽:668