Hive(筆記)


(2015.07.22Hive筆記)

一、Hive的安裝

1.1Hive的安裝過程

下載hive源文件(apache-hive-0.14.0-bin.tar.gz

解壓hive文件

進入$HIVE_HOME/conf/修改文件

cp hive-env.sh.template hive-env.sh

cp hive-default.xml.template(模板文檔,提供了hive很多參數) hive-site.xml

 

 

修改$HIVE_HOME/confhive-env.sh,增加以下三行

export JAVA_HOME=/usr/local/jdk1.7.0_45

export HIVE_HOME=/usr/local/hive-0.14.0

export HADOOP_HOME=/usr/local/hadoop-2.6.0

配置MySQLmetastore

 

修改$HIVE_HOME/conf/hive-site.xml

<property>

    <name>javax.jdo.option.ConnectionURL</name>

    <value>jdbc:mysql://192.168.1.101:3306/hive?

         createDatabaseIfNotExist=true</value>

</property>

<property>

    <name>javax.jdo.option.ConnectionDriverName</name>

    <value>com.mysql.jdbc.Driver</value>(lib目錄下默認沒有驅動,需要自己下載mysql-connector-java-5.1.10.jar,因為自帶了derby-10.10.1.1.jar,能啟動derby數據庫)

</property>

<property>

    <name>javax.jdo.option.ConnectionUserName</name>

    <value>hive</value>

</property>

<property>

    <name>javax.jdo.option.ConnectionPassword</name>

    <value>hive</value>

</property>

 

 

 

<property>

  <name>hive.querylog.location</name>

  <value>/usr/local/hive-0.14.0/tmp</value>

</property>

 

<property>

  <name>hive.exec.local.scratchdir</name>

  <value>/usr/local/hive-0.14.0/tmp</value>

</property>

 

<property>

  <name>hive.downloaded.resources.dir</name>

  <value>/usr/local/hive-0.14.0/tmp</value>

</property>

 

 

連接本地Mysql解決辦法(感謝為我提供幫助的國柱、其國、世昌師兄們和老師)

1.首先登陸到mysql

mysql -uroot -pmysql

2.創建遠程登陸用戶並授權

grant all PRIVILEGES on test_db.* to root@'192.168.1.101' identified by 'root';

3.執行了上面的語句后,再執行下面的語句,方可立即生效。

flush privileges;

 

如果不行

use mysql;

然后UPDATE user SET `Host` = '%' WHERE `User` = 'root' LIMIT 1;

flush privileges;

 

我還是有一些疑問1:現在不能用root用戶登錄,只能用其他用戶登錄對嗎?其他用戶的權限少了些什么?2配置文件連接的是192.168.1.101,在qlyog127.0.0.1新建一個hive數據庫才能用(hive新建的表的元數據都保存在那里,而不是192.168.1.101

 

新創建一個用戶,不要用root,估計root串了。

use mysql;

grant all privileges on *.* to <用戶名>@'%' identified by '密碼';

flush privilege;

SELECT `Host`,`User` FROM user;

alter database hive character set latin1;

 

成功連接mysql啟動hive

 

因為$HIVE_HOME/lib目錄下有derbyjar包所以使用derby作為默認的metastore

Hive1.2版本中的jline-2.12.jar包與hadoop2.6.0jline-0.9.94.jar版本)不兼容,解決辦法,將這個jar包復制到hadooplib目錄下。

 

 

1.2hive web界面模式

 

web界面安裝:

下載apache-hive-0.14.0-src.tar.gz(版本需要對應)

制作war包放在HIVE_HOME/lib/ : (apache-hive-0.14.0-src.tar\apache-hive-0.14.0-src\hwiweb解壓出來,里面的jsp文件就是hwi的顯示界面 )hwi/web/*里面所有的文件打成war包(壓縮文件,並重命名為hive-hwi-0.14.0.war

復制tool.jar(jdklib包下面的tool.jar)HIVE_HOME/lib

修改hive-site.xml(HIVE_HOME/conf)

<property>

  <name>hive.hwi.listen.host</name>

  <value>0.0.0.0</value>

</property>

<property>

  <name>hive.hwi.listen.port</name>

  <value>9999</value>

</property>

<property>

  <name>hive.hwi.war.file</name>

  <value>lib/hive-hwi-0.14.0.war</value>

</property>

hive web界面的 (端口號9999) 啟動方式

    #hive --service hwi &&表示后台顯示)

用於通過瀏覽器來訪問hive    

    http://hadoop0:9999/hwi/

 

可以查看hive的系統信息,hadoop日志路徑信息等

 

 

1.3set命令使用

 

hive控制台set命令:

set hive.cli.print.current.db=true;

set hive.cli.print.header=true;

set hive.metastore.warehouse.dir=/hive;

hive參數初始化配置set命令:

~/.hiverc(存放在每個用戶的主目錄下面,可以創建一個.hiverc,將set命令的參數復制進去,重新啟動執行hive,就可以將set命令執行起來)

補充:

hive歷史操作命令集(more .hivehistory查看一下)

~/.hivehistory

 

直接查看(執行set),查看hadoop定義的全部變量,hive底層依賴的hadoop環境變量配置信息(set -v

設置name變量並初始化(set hivevarname=crxy;)顯示(set hivevarname;),傳值(create table t2name string,${hivevar:name} string;

  1. 基本數據類型

     

    String和int在創建表,時間戳(hiveHbase結合時,底層的映射結構,是自動完成,如果沒有,hiveHbase結合有困難)

     

     

    2.1復合數據類型

    創建學生表

    hive>CREATE TABLE student(

    id INT,

    name STRING,

    favors ARRAY<STRING>,

    scores MAP<STRING, FLOAT>

    );

     

    2.2hive記錄中默認分隔符

     

    分隔符    描述                                語句

    \n        分隔行    LINES TERMINATED BY '\t'

    ^A        分隔字段(),顯示編碼使用\001    FIELDS TERMINATED BY '\001'

    ^B        分隔復合類型中的元素,顯示編碼使用\002    COLLECTION ITEMS TERMINATED BY '\002'

    ^C        分隔map元素的keyvalue,顯示編碼使用\003    MAP KEYS TERMINATED BY '\003'

     

     

    Hdfs存儲表時用的是分隔符

    原始數據組織方式(導入hive表前的數據)

    1001\001zhangsan\001AA\002\BB\001key\003value 1002\001lisi

    hdfs數組存放方式

    1001^Azhangsan^AAA^BBB^Akey^Cvalue\n1002^Alisi

     

     

    2.3復合類型—Struct使用

    structs內部的數據可以通過DOT.)來存取,例如,表中一列c的類型為STRUCT{a INT; b INT},我們可以通過c.a來訪問域a

    hive> create table student_test(id INT, info struct<name:STRING, age:INT>) ROW FORMAT DELIMITED(限定) FIELDS TERMINATED(終止) BY ',' COLLECTION(集合) ITEMS TERMINATED BY ':'; (第一個是字段idstruct結構體的分隔符逗號或者tab\t)都可以,第二個是struct分割)

    vi student_test

    1001,zhangsan:24

    1002,lisi:28

    1003,wangwu:25

    local inpath,應該就是為什么可以將/root/student_test傳進去)

    (導入數據)load data local inpath"student_test" into table student_test;

    Select * from student_test;

    (查詢id)select id from student_test;

    (查詢structs內部數據,通過點的方式)

    select id,info.name from student_test;

    Select id,info.name,info.age from student_test;

     

    可以直接在MySQL(儲存的是元數據)查看創建的表

    也可以在hdfs(儲存的是表的實際信息)上查看

    dfs -cat /usr/hive/warehouse/student_test/student_test;

    第一個是表名沒有內容,第二個才是表的內容,除了默認格式不一樣,指定格式顯示就會一樣的。

     

    2.4復合類型—Array使用

     

    array中的數據為相同類型,例如,假如array A中元素['a','b','c'],則A[1]的值為'b'

    create table class_test(name string, student_id_list array<INT>) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' COLLECTION ITEMS TERMINATED BY ':';

     

    vi class_test

    zhangsan,10:25:27:37

    lisim,09:31:42:46

    wangwu,06:12:18

     

    (導入表)load data local inpath "class_test" into table class_test;

    select * from class_test;

    (查詢名字)select name from class_test;

    (集合類型的角標查詢)select name,student_id_list[0] from class_test;

    select name,lstudent_id_list[0] from class_test where name='zhangsan';

    角標超出范圍會顯示NULL

    按照列解析的

     

     

    2.5復合類型—Map使用

     

    訪問指定域可以通過["指定域名稱"]進行,例如,一個Map M包含了一個group-gidkv對,gid的值可以通過M['group']來獲取

    create table employee(id string, perf map<string, int>) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY ',' MAP KEYS TERMINATED BY ':';

     

    (字段之間使用的是\t(Tab),集合(多個map就會是集合)之間的用,號,map之間用:分割)

    vi employee(在~目錄下面)

    1001    job:80,team:60,person:70

    1002    job:60,team:80,person:80

    1003    job:90,team:70,person:100

     

    Load data local inpath "employee" into table employee;(備注;使用雙引號和單引號也是可以的。)

    (查詢)Select *from employee;

    Select id,perf['job'] from employee;

    Select id,perf['job'],perf['person'] from employee;

    (設置別名,顯示表頭)select id,perf['job'] as job,perf['team'] as team,perf['person'] as person from employee;

    三、數據定義

    3.1數據庫定義

     

    默認數據庫"default"

    使用#hive命令后,不使用hive>use <數據庫名>,系統默認的數據庫。可以顯式使用hive> use default;

     

    創建一個新庫

    hive>CREATE DATABASE

    [IF NOT EXISTS] mydb

    [LOCATION] '/.......'

    [COMMENT] '....';

     

    hive>SHOW DATABASES;

     

    hive>DESCRIBE DATABASE [extended] mydb;

     

    hive>DROP DATABASE [IF EXISTS] mydb [CASCADE];

     

    Create database mydb;

    hdfs創建mydb.db目錄會存放mydb數據里面的內容

    消除不必要的提示(干擾我們的判斷)

    Create database if not exists mydb;

    Use mydb;

    Create table t1(name string);

    Show tables;

    Create database bd;

    Show databases;

    Drop database if exists db;

    (級聯刪除)

    drop database if exists mydb cascade;

     

    3.2 表定義

    hive>CREATE TABLE IF NOT EXISTS t1(...)

    [COMMENT '....']

    [LOCATION '...']

     

    (當前數據庫顯示其他數據庫的表)hive>SHOW TABLES in mydb;

     

    hive>CREATE TABLE t2 LIKE t1;

     

    hive>DESCRIBE t2;

    (尋找某個關鍵字的表)show tables in default 'class*';

    (顯示表的結構)desc t1;

    (顯示表的結構,原來的)describe t1;

    (顯示拓展信息)desc extended t1;

    (顯示拓展信息更加有結構,查看分隔符)desc formatted t1;

     

    (創建另一個表進行測試,防止操作不當對原表造成傷害)create table t2 like t1;

    (復制其他數據庫的表的結構)Create table t3 like default.employee;


免責聲明!

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



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