Hive 環境搭建

1、安裝hive的機器上要有hadoop的環境  

hadoop集羣搭建參考博客地址         https://my.oschina.net/xiaozhou18/blog/787902java

2、如今機器上安裝mysql數據庫   用來存儲hive的元數據信息   命令以下

         rpm -qa | grep mysql     查看機器上的mysql信息node

         rpm -e mysql-libs-5.1.66-2.el6_3.i686 --nodeps   刪除已安裝的mysqlmysql

         rpm -ivh MySQL-server-5.1.73-1.glibc23.i386.rpm    安裝mysql   服務端linux

         rpm -ivh MySQL-client-5.1.73-1.glibc23.i386.rpm      安裝mysql  客戶端sql

        mysql> use mysql;shell

        mysql> UPDATE user SET password=password("test123") WHERE user='root';   修改mysql密碼 數據庫

        mysql>GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY '123' WITH GRANT OPTION;     容許用mysql客戶端遠程登錄mysql服務apache

                        mysql> flush privileges;oop

                        mysql> exit;  spa

         登錄mysql

         mysql -u root -p123

3、安裝hive

一、解壓hive 命令   [root@node11 java]# tar -zxvf apache-hive-1.2.1-bin.tar.gz 。

2 、複製一份hive的配置文件   命令[root@node11 conf]# cp hive-default.xml.template hive-site.xml

三、修改hive-site.xml的配置文件   內容以下

<configuration>
        <property>
          <name>javax.jdo.option.ConnectionURL</name>
          <value>jdbc:mysql://node11:3306/hive?createDatabaseIfNotExist=true</value>
          <description>JDBC connect string for a JDBC metastore</description>
        </property>

        <property>
          <name>javax.jdo.option.ConnectionDriverName</name>
          <value>com.mysql.jdbc.Driver</value>
          <description>Driver class name for a JDBC metastore</description>
        </property>

        <property>
          <name>javax.jdo.option.ConnectionUserName</name>
          <value>root</value>
          <description>username to use against metastore database</description>
        </property>

        <property>
          <name>javax.jdo.option.ConnectionPassword</name>
          <value>123</value>
          <description>password to use against metastore database</description>
        </property>
</configuration>

4、安裝hive和mysq完成後,將mysql的鏈接jar包拷貝到$HIVE_HOME/lib目錄下

5、啓動hive   命令   hive/bin/hive

若是出現java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected這個錯誤表示hive 的 jline-xxx.jar 和hadoop的jline-xxx.jar 版本不一致  把$hive_home/lib下的jline-xxx.jar 複製到$hadoop_home/share/hadoop/yarn/lib下   重啓hive。   看到以下界面表示進入到hive命令行模式。

6、簡單使用

建立表  create table trade_detail(id bigint, account string, income double, expenses double, time string) row format delimited fields terminated by '\t';

向表裏添加數據  
load data local inpath '/home/hadoop/data/trade_detail' overwrite into table trade_detail;

7、hive的腳本執行

$>hive -e 「」 能夠在hive shell環境下直接執行hive命令  如  ./hive –e ‘show tables’

$>hive -e 「」>aaa  把執行hive shell命令後查詢的結果導入aaa文件內

$>hive -S -e 「」>aaa   -S 執行速度快

$>hive -f file   執行file文件內的hive shell 命令

8、hive和hdfs   或liunx交互

與linux交互命令 !

!ls

!pwd

與hdfs交互命令

dfs -ls /

dfs -mkdir /hive

9、建立表

一、複合類型-struct

create table student_test(id INT, info struct<name:STRING, age:INT>)   ROW FORMAT DELIMITED FIELDS TERMINATED BY ','  COLLECTION ITEMS TERMINATED BY ':';  

ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 表示字段之間用逗號分割

COLLECTION ITEMS TERMINATED BY ':'  表示集合之間用冒號分割

查字段數據info.name  查詢

二、複合類型-Array

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

查字段數據student_id_list[0]查詢

三、複合類型—Map使用

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

查字段數據用perf['字段名']

10、對錶的操做

DROP DATABASE [IF EXISTS] mydb CASCADE; 級聯刪除mydb下的全部表

DESCRIBE DATABASE extended mydb;    extended查看mydb的擴展信息

CREATE TABLE t2 LIKE t1;  建立和t1表結構同樣的表

Hive>desc formatted t1; 格式化 顯示t1表的詳細結構

SHOW TABLES in mydb; 查看mydb下的表

11、對列的操做

修改列的名稱、類型、位置、註釋

hive>ALTER TABLE t3 CHANGE COLUMN old_name new_name String COMMENT '...' AFTER column2;

增長列

hive>ALTER TABLE t3 ADD COLUMNS(gender int);

12、表的種類

一、管理表 也叫內部表

默認建立表時   就是內部表   內部表在刪除表時   會刪除表的元數據信息和hdfs上的真實數據

二、外部表

hive>create external table external_table1 (key string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' location '/home/external';

在HDFS建立目錄/home/external

#hadoop fs -put /home/external_table.dat /home/external

加載數據

LOAD DATA INPATH '/home/external_table1.dat' INTO TABLE external_table1;

查看數據

select * from external_table

select count(*) from external_table

刪除表

drop table external_table

刪除外部表的時候   只會把表的元數據信息刪除 不會刪除hdfs上的數據

三、分區表

分區表避免了全表掃描

CREATE TABLE t3(name string) PARTITIONED BY (province string);

SHOW PARTITIONS t3 [partition (province='beijing')];  顯示t3表的分區

ALTER TABLE t3 ADD [IF NOT EXISTS] PARTITION(province='beijing') ; 增長分區

ALTER TABLE t3 DROP PARTITION(...); 刪除分區

建立表

create table partition_table(rectime string,msisdn string) partitioned by(daytime string,city string) row format delimited fields terminated by '\t' stored as TEXTFILE;

加載數據到分區

load data local inpath '/home/partition_table.dat' into table partition_table partition (daytime='2013-02-01',city='bj');

查看數據

select * from partition_table

select count(*) from partition_table

•刪除表 drop table partition_table

添加防止刪除的保護:
hive> alter table tablename partition (day='0925') enable no_drop;

添加防止查詢的保護:
hive> alter table tablename  partition (day=20161207') enable offline;
刪除防止查詢的保護:
hive> alter table tablename  partition (day='20161207') disable offline;

四、桶表

桶表用來抽樣查詢的

桶表是對數據進行哈希取值,而後放到不一樣文件中存儲。

建立表

  create table bucket_table(id string) clustered by(id) into 4 buckets; 

加載數據

  set hive.enforce.bucketing = true;  啓用桶表

  insert into table bucket_table select name from stu; 

  insert overwrite table bucket_table select name from stu;

數據加載到桶表時,會對字段取hash值,而後與桶的數量取模。把數據放到對應的文件中。

桶表的抽樣查詢

select * from bucket_table tablesample(bucket 1 out of 4 on id);

tablesample是抽樣語句

語法解析:TABLESAMPLE(BUCKET x OUT OF y)

y必須是table總bucket數的倍數或者因子。

hive根據y的大小,決定抽樣的比例。

例如,table總共分了64份,當y=32時,抽取(64/32=)2個bucket的數據,當y=128時,抽取(64/128=)1/2個bucket的數據。x表示從哪一個bucket開始抽取。

例如,table總bucket數爲32,tablesample(bucket 3 out of 16),表示總共抽取(32/16=)2個bucket的數據,分別爲第3個bucket和第(3+16=)19個bucket的數據。

相關文章
相關標籤/搜索