將本地文件導入Hive


將本地文件導入Hive案例

如果嫌搗路徑麻煩,可以配置Hive的環境變量:

[root@bigdata111 hive-1.2.1]# cd /etc/profile

#HIVE_HOME

export HIVE_HOME=/opt/module/hive-1.2.1/

export PATH=$PATH:$HIVE_HOME/bin

 使之生效:

[root@bigdata111 hive-1.2.1]# source /etc/profile

[root@bigdata111 hive-1.2.1]# hi

history         hive            hive-config.sh  hiveserver2

這樣之后能給提示就成功配置環境變量了。

接下來將本地文件導入Hive

需求:將本地/opt/module/hiveTest/student.txt這個目錄下的數據導入到hive的student(id int, name string)表中。

1.數據准備:

在/opt/module/hiveTest/這個目錄下准備數據

(1)在/opt/module/目錄下創建hiveTest

[root@bigdata111 module]# mkdir hiveTest/

(2)在/opt/module/hiveTest/目錄下創建student.txt文件並添加數據

[root@bigdata111 module]# cd hiveTest/

[root@bigdata111 hiveTest]# vi student.txt

1001 zhangshan

1002 lishi

1003 zhaoliu

注意以tab鍵間隔。

2.Hive實際操作

(1)啟動hive

[root@bigdata111 hiveTest]# hive

(2)顯示數據庫

hive (default)> show databases;

(3)顯示default數據庫中的表

hive (default)> show tables;

(4)刪除已創建的student表

hive (default)> drop table student1;

(5)創建student表, 並聲明文件分隔符’\t’

hive> create table student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

hive (default)> create table student1 (id int,name string) row format delimited fields terminated by '\t';

可以進行查詢:

 

(6)加載/opt/module/datas/student.txt 文件到student數據庫表中。

hive (default)> load data local inpath '/opt/module/hiveTest/student.txt' into table student1;

(7)Hive查詢結果

hive (default)> select * from student1;

OK

student1.id student1.name

1001 zhangsan

1002 lisi

1003 zhaoliu

Time taken: 0.435 seconds, Fetched: 3 row(s)

3.測試:

Hive加載數據時,如果加進來的數據與表定義的分隔符、類型不同,就會變成空值

除此之外,存到HDFS后文建會默認按照字典順序排序(ASCII碼從小到大),讀取的時候也是按照這個順序。

下面再向student1目錄下加些分隔方式、類型不匹配的數據

1)分隔方式不匹配:

[root@bigdata111 hiveTest]# vi a

內容為:

1005 zhaoli(空格分隔的)

1006 qianqi

1007    sisi(tab鍵分隔的)

1008    hihi

加載:

hive (default)> load data local inpath '/opt/module/hiveTest/a' into table student1;

 

 

 

2)數據類型不匹配:

[root@bigdata111 hiveTest]# vi w

內容為:

kkk     soso(第一個數據類型不是規定的int,tab鍵分隔的)

1009    1212

加載:

hive (default)> load data local inpath '/opt/module/hiveTest/w' into table student1;

 

 

 

3)對於上面的Web頁面可以發現文件順序是按照字典順序進行排序的。

從select語句的結果可以看出:從HDFS里讀取數據也是按照這個文件先后順序讀的。

4.可能遇到的問題

再打開一個客戶端窗口啟動hive,會產生java.sql.SQLException異常。

Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

        at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:522)

        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677)

        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.lang.reflect.Method.invoke(Method.java:606)

        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)

        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

Caused by: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

        at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1523)

        at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.<init>(RetryingMetaStoreClient.java:86)

        at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:132)

        at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:104)

        at org.apache.hadoop.hive.ql.metadata.Hive.createMetaStoreClient(Hive.java:3005)

        at org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:3024)

        at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:503)

        ... 8 more

原因是,Metastore默認存儲在自帶的derby數據庫中,推薦使用MySQL存儲Metastore;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM