Hive安裝使用心得

來源:http://www.cnblogs.com/liuyifeng/p/4721189.htmlhtml

1、Hive的安裝java

1.1Hive的安裝過程mysql

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

解壓hive文件sql

進入$HIVE_HOME/conf/修改文件數據庫

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

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

 

 

修改$HIVE_HOME/confhive-env.sh,增長如下三行瀏覽器

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

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、數據定義

    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;

相關文章
相關標籤/搜索