安装Hive/Hive基本操作<一>

来源:互联网 发布:数据字典设计文档模板 编辑:程序博客网 时间:2024/06/07 19:28
安装Hive
    (一)Linux安装MySQL
    1)首先卸载自带的MySQL数据库
    # rpm -qa | grep mysql
    # rpm -e mysql-libs-5.1.71-1.el6.x86_64  --nodeps
    2)通过yum安装mysql
    #  yum install -y mysql-server  mysql  mysql-devel
    3)启动mysql服务(mysqld)
    [zhoukuo@CentOS02 ~]$ service mysqld start
     ...
    Please report any problems with the /usr/bin/mysqlbug script!

                                                                         [  OK  ]
     Starting mysqld:                                          [  OK  ]
    4)设置为开机启动
[zhoukuo@CentOS02 ~]$ sudo chkconfig mysqld on                 //设置开机启动
[zhoukuo@CentOS02 ~]$ sudo chkconfig --list | grep mysqld    //查看是否为开机
mysqld            0:off    1:off    2:on    3:on    4:on    5:on    6:off
    5)登陆mysql数据库
    # mysql -u root -p
    6)设置密码
    方式一:
    [zhoukuo@CentOS02 ~]$ /usr/bin/mysqladmin -u root password '123456'
    方式二:
    set password for 'root'@'localhost' = password('123456')
    7)授权root的权限
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on *.* to 'root'@'CentOS02' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

    all privileges:添加所有权限
    第一个*:所有数据库
    第二个*:所有表
    第一个'root':代表root用户
    %:代表其他的外部主机
    '123456' :代表root用户密码

## 刷新权限(一定要记得)
    mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

进入数据库:
[zhoukuo@CentOS02 ~]$ mysql -h  -uroot-p123456

    (二)安装Hive
    参考官网安装介绍:
    https://cwiki.apache.org/confluence/display/Hive/GettingStarted
    1.解压hive的tar包
[zhoukuo@CentOS02 software]$ tar -zxf hive-0.13.1-bin.tar.gz -C ../modules/

    2.创建/tmp和hive数据仓库在HDFS之上的目录
    [zhoukuo@CentOS02 hadoop-2.5.0]$ bin/hdfs dfs -mkdir -p /user/hive/warehouse
    $ bin/hdfs dfs -mkdir  /tmp      //默认已经创建了
    修改目录的权限(增加组用户的写权限)
[zhoukuo@CentOS02 hadoop-2.5.0]$ bin/hdfs dfs -chmod  g+w  /tmp
17/09/04 07:52:56 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[zhoukuo@CentOS02 hadoop-2.5.0]$ bin/hdfs dfs -chmod  g+w  /user/hive/warehouse
17/09/04 07:53:15 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

    3.${HIVE_HOME}/conf/ 重命名生成配置文件
[zhoukuo@CentOS02 conf]$ cp hive-default.xml.template hive-site.xml
[zhoukuo@CentOS02 conf]$ cp hive-env.sh.template  hive-env.sh
[zhoukuo@CentOS02 conf]$ cp hive-log4j.properties.template hive-log4j.properties

    4.${HIVE_HOME}/conf/ 修改hive-env.sh
    46    JAVA_HOME=/opt/modules/jdk1.8.0_144
    48    HADOOP_HOME=/opt/modules/hadoop-2.5.0
    51    export HIVE_CONF_DIR=/opt/modules/hive-0.13.1/conf

    5)${HIVE_HOME}/conf/ 修改hive-site.xml
    参考官网的介绍:
    https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin
    
    --JDBC连接的四要素:ConnectionURL         DriverName          UserName           Password
=====================
<--!132-->
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://CentOS02:3306/metastore?createDatabaseIfNotExist=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>

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

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

<--!168-->
<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>123456</value>
  <description>password to use against metastore database</description>
</property>
    
=====================
    6)拷贝jdbc驱动包到${HIVE_HOME}/lib
    $ cp mysql-connector-java-5.1.34-bin.jar ../modules/apache-hive/lib/
    
    7)${HIVE_HOME}/conf/ 修改hive-log4j.properties
    20     hive.log.dir=/opt/modules/hive-0.13.1/logs

Hive基本操作
    一)启动Hive的条件
    1.检查hadoop的相关进程
[zhoukuo@CentOS02 ~]$ jps
9461 JobHistoryServer
9013 ResourceManager
8886 NameNode
13095 RunJar
13820 Jps
9308 NodeManager
8941 DataNode

    2.启动进入Hive CLI
    ${HIVE_HOME}/bin存放的hive的启动命令
    [zhoukuo@CentOS02 hive-0.13.1]$ bin/hive
    启动之后检查mysql数据库中metastore数据库是否自动创建成功
hive> show databases;
OK
default
mydb
Time taken: 0.151 seconds, Fetched: 2 row(s)

    3.Hive表创建
    //创建数据库 
create databasemydb;
   //创建表
create table student(
id int comment 'id of student',
name string comment 'name of student',
age int,
gender string,
addr string
)
comment 'studnet'
row format delimited fields terminated by '\t';   //指定表格字段的分隔符
//加载数据
hive> load data local inpath '/home/zhoukuo/student.txt' into table student;   --加载本地数据到hive表中;
//查询数据
select * from student;

--表类型一:内部表/管理表:使用内部存储目录(/user/hive/warehouse)
create table dept(
deptid int comment 'id of dept',
name string comment 'name of dept',
addr string comment 'address of dept'
)
comment 'table of dept'
row format delimited fields terminated by '\t';

--查看表的元数据信息
hive> select name,age from student;
......
# Detailed Table Information          
Database:              default                  
Owner:                  zhoukuo                  
CreateTime:            Mon Sep 04 10:16:53 CST 2017    
LastAccessTime:        UNKNOWN                  
Protect Mode:          None                    
Retention:              0                        
Location:              hdfs://CentOS02:8020/user/hive/warehouse/dept  
Table Type:            MANAGED_TABLE  --内部表;
......

--加载HDFS上的数据到hive表中
load data inpath '/hive/input/dept.txt' into table dept;

--load如果加载的数据是HDFS之上的话,实际执行的是剪切或移动文件

--表类型二:外部表
create external table emp(
empid int,
empname string,
jobname string,
managerid  int,
hiredate  string,
salary float,
bonus float,
deptid int
)
row format delimited fields terminated by '\t'
location '/hive/table/emp';
......
Location:              hdfs://CentOS02:8020/hive/table/emp    
Table Type:            EXTERNAL_TABLE
......

创建表
    外部表创建表的时候,不会移动数到数据仓库目录中(/user/hive/warehouse),只会记录表数据存放的路径
    内部表会把数据复制或剪切到表的目录下
删除表
    外部表在删除表的时候只会删除表的元数据信息不会删除表数据
    内部表删除时会将元数据信息和表数据同时删除
--删除内部表
drop table dept;

--删除外部表
drop table emp;

--清空表数据
truncate table student;




--表类型三:分区表(静态分区表 和 动态分区表)(一级分区表 二级分区表...)
create table dept_part(
deptid int comment 'id of dept',
name string comment 'name of dept',
addr string comment 'address of dept'
)
comment 'table of dept_part'
partitioned by (date string)
row format delimited fields terminated by '\t';

--向分区表的分区内加载数据(如果分区不存在,则自动创建分区)
hive (mydb)> load data local inpath '/home/zhoukuo/emp.txt' into table dept_part partition (date='2017-09-03');

--创建分区
hive (mydb)> alter table dept_part add partition(date='2017-09-03');

--删除分区
hive (mydb)> alter table dept_part drop partition(date='2017-09-02');

--向已经创建的分区加载数据
hive (mydb)> load data local inpath '/home/zhoukuo/emp.txt' into table dept_part partition (date='2017-09-03');

--创建分区并指定分区所在目录
hive (mydb)> alter table dept_part add partition(date='2017-09-01') location'/user/hive/warehouse/mydb.db/dept_part/2017-09-01';

--查看分区表的分区信息
hive (mydb)> show partitions dept_part; 

--查询全表数据
select * from dept_part;

--查询分区字段表数据
hive (mydb)> select * dept_part where date='2017-09-04';

分区表创建表的时候需要指定分区字段,分区字段与普通字段的区别:分区字段会在HDFS表目录下生成一个分区字段名称的目录,而普通字段则不会,查询的时候可以当成普通字段来使用,一般不直接和业务直接相关。

外部分区表:
create external  table  dept_partt(
deptno int,
deptname string,
address string
)
partitioned by (province string)
row  format delimited fields terminated by '\t'
location '/input/demo';

//手动增加分区字段及外部目录:
alter table dept_partt add partition (province='boston') location '/input/demo/boston';

//手动增加分区字段(自动生成分区目录)
alter table dept_partt add partition (province='new york');


二)与其他文件系统的交互
    1.与Linux系统交互
    hive (mydb)> !ls  /opt/sofware/;

    2.与hdfs文件系统的交互
    hive (mydb)> dfs -ls  /input
    hive (mydb)> dfs -mkdir /hive

    3. show databases --显示数据库;  //可以直接使用--对语句进行注释

    4.hive (mydb)>quit; 退出Hive