将“Hive-x.x.x.tar.gz”复制到“/usr/local”目录中,“x.x.x”标识及具体的版本号,执行“tar -zxvf hive-x.x.x.tar.gz”命令对其解压缩,执行“mv hivex.x.x hive”命令,将解压目录更名为“hive”,便于之后的使用。执行“vi vi /etc/profile”命令,将其中增加export HIVE_HOME=/usr/local/hive”行,在“export PATH”语句中添加“:$HIVE_HOME/bin”的内容。保存该文件后,执行“source /etc/profile”命令,完成对环境变量的设置。
进入“/usr/local/hive/conf”目录,执行“mv hiveenv.sh.template hive-env.sh” 和“mv hive-default.xml.template hive-site.xml”命令,得到所需的Hive配置文件。前面谈到了Hive在HDFS中的默认位置,在“hive-site.xml” 文 件 中可以更改该位置,执行“vi hive-site.xml”命 令,在其中搜索“”,您可以根据需要对其进行修改,例如将其更改为“hive/warehouse”。
为了避免在启动Hive时出现找不到类的错误,执行“vi $HADOOP_HOME/conf/hadoop-env.sh”命令,在其中 添 加“export HADOOP_CLASSPATH=.:$CLAS
PATH:$HADOOP_CLASSPATH:$HADOOP_HOME/bin”行。
执 行“vi $HIVE_HOME/bin/hive-config.sh” 命令,在 其 中 添 加“export JAVA_HOME=/usr/local/jdk”,“export HIVE_HOME=/usr/local/hive”,“export HADOOP_HOME=/usr/local/hadoop”等行。进入“/usr/local/hive/bin”目录,执行“hive”命令,进入其控制台接口,在“hive>”提示符下可以执行各种命令。
例 如 执 行“show databases;”命令,会显示Hive的所有数据库信息。例 如 执 行“use default;”命令,选择名为“default”的数据库。执行“show tables;”命令,显示其下的表信息。用户可以根据实际需要,来创建表。
例如执行“create table tk1(biaohao int,pinming string);”命令,就可以创建名为“tk1”的表。在浏览器中访问“hadoopsrv1:5000/dfshealth.jsp”地 址,其中 的“hadoopsrv1” 为 本机名称。在打开的节点网页中点击“Browse the filesystem”链接,在目录内容网页中点击表格中的“user”链接,之后依次点击“hive”,“warehouse”,“tk1”等链接,可以查看与上述表对应的目录信息。在“/usr/local/hive/bin”目录下执行“ls”命令,可以看到名为“derby.log”,“metastore_db”等文件。
MySQL的安装分为客户端和服务器端两部分,执行“rpm -i MySQL-server-5.x.xx-x.e16.i686.rpm” 命令,安装服务器端程序。
执 行“mysqld_safe &”命令,在后台启动MySQL服务程序。
执 行“rpm -i MySQL-client-5.x.xx-x.e16.i686.rpm”命令,安装MySQL客户端程序。执行“mysql_secure_installation” 命令,根据提示设置MySQL密码。
然后执行“mysql -uroot-pxxx”命令登录 MySQL,其中的“xxx”表示密码。
当然,要想通过Hive连接MySQL,必须将MySQL的JDBC驱动包存储到“/usr/local/hive/lib”目 录中,所需的文件为“mysqlconnector-java-5.x.xx.jar”。
执 行“vi hive-site.xml”命令,在Hive的配置文件中找到“
找 到“”行,将其修改为“”,找 到“”行,将其修改为“”,其主要作用是设置MySQL的账户名和密码信息。
为了让用户可以远程连接MySQL,需要进行授权操作。在MySQL控制台中执行“create database hive;”命令,创建名为“hive”的数据库。执行“GRANT all ON hive.* TO root@'%'IDENTIFIED BY 'xxx';”命令,为Root账户分配完全访问权限。执行“flush privileges;”命令刷新权限设置。执行“set global binlog_format='MIXED';”命令,将二进制日志设置为混合模式。
Hive的数据存储基于Hadoop HDFS存储的,其没有专门的数据存储格式,Hive支持数据库、文件、表、视图等存储结构,其可以直接加载文本文件和序列文件。Hive中数据库的概念和MySQL等常见数据库是类似的,其默认数据库为default”,当启动 Hive后,可以使用“use xxx”来使用目标数据库,“xxx”为数据库的名称。
执 行“hive>create database xxx;”命令,可以创建一个新的数据库。对于Hive的操作来说,最常见的是对表的处理。在Hive中表的类型包括“Table”(内部 表),“Partition”(分 区表),“External Table”(外部 表),“Bucket Table”(桶表)等。对于内部表来说,其概念与一般数据库中的表是类似的,所不同的是,内部表在 Hive 中都有一个对应的目录用来存储数据。例如对于表“TK1”来说,因为前面已经更改了其默认存储路径,所以其在 HDFS中的存储目录为“/hive/warehouse/tk1”,该表中所有的数据都保存在这个目录中。当删除该表时,与之相关的元数据与数据都会被删除。
使 用“CREATE TABLE”命令来创建内部表,例如执行“CREATE TABLE tk2(yh name,mima string)row format delimited fields terminated by ' ;”命令,可以创建名为“tk2”的表,注意其行分隔符为“ ”,这样便于加载数据。在执行数据添加操作时,需要先建立一个文本文件,按照预设的分隔符编辑数据。之后执行“load data local inpath'/var/shujubiao.txt'into tk2;”命令,从指定的“shujubiao.txt”文件中直接加载数据,完成表数据添加操作。
当然,也可以使用HDFS中 的“put”命 令,例如 执 行“hadoop fs -put shujubiao.txt /hive/tk2”命令,也可以实现相同的加载操作。
执 行“select * from tk1”,“select count(*)from tk2”等命令,可以查看该表中的内容。
执 行“select * from tk1 limit 9”命令,只随机显示TK1表9条数据。
注意,如果对指定的字段查询,Hive会使用mapReduce的Job执行操作。执行“drop table tk2”命令,可以删除该表。
对于分区表来说,可以对数据进行分区操作,即按照某个字段,将文件划分为不同的标准。在 Hive 中分区对应于数据库的分区列的密集索引,表中的一个分区对应于表下的一个目录,所有的分区的数据都存储在对应的目录中。例如在“Product”表 中 包 含“brand” 和“factory”两个分区,那么对应 于“Brand”=“dayang”,“F a c t o r y”=“b f y c”的 目 录 为“/hive/product/brand=dayang/factory=bfyc”, 对 应于“Brand”=“gyang”,“F a c t o r y”=“y z m t”的 目 录 为“/hive/product/brand=gyang/factory=yzmt”。
例 如,执 行“create t a b l e p r o d u c t(x h string,factory string)partitioned by(brand) row format delimited fields terminated by ' ' stored as TEXTFILE;”命令,可以创建名为“product”的分区表。
执行“load data local inpath '/data/fenqubiao.dat' into table product partition (Brand='gyang'Factory='bfyc');”命令,就可以从“fenqubiao.dat”文件中按照预设分隔符加载分区数据了。
执行“show partitions xxx;”命令,可以看到名为“xxx”的表中存在哪些分区。查看分区表的方法以及删除的方法与上述内部表一致。如果要增加分区信息,可以执行“alter table product add partition(Brand='flck');”命令,来添加新的分区。
如果要删除分区,可 以 执 行“alter table product drop partition(Brand='flck');”命令来实现。
注意:当删除对应分区后,其元数据和数据文件被删除,但对应的目录依然存在。当然,这里仅仅使用了简单的例子进行说明。
上述类型的表也被称为受控表,其特点是表的创建和数据加载是两个过程,在加载数据时,数据实际上会被移动到对应的数据仓库目录中,并且对数据对访问都是直接在数据仓库目录中完成。当删除表时,表中的数据和元数据会被同时删除。
对于外部表来说,和上述类型的表存在很大的不同,其特点是指向在HDFS中已经存在的数据,可以预先创建分区。表的创建和数据加载属于同一个过程,两者可以同时完成,实际数据不会移动到数据仓库目录中,只是与外部数据建立一个链接。
当删除一个外部表时,也仅仅删除该链接。例如,事先创建名为“/waibu/data”的目录,执行“hadoop fs-put /tmp/wb.dat /waibu/data/”命令,将“wb.dat”文件上传到该目录中。执行“create external table tkk1 (key1 string,key2 int) ROW FORMAT DELIMITED FIELDS TERMINATED BY' ' location '/waibu/data';”命令,使用预先存在的文件,按照预设的分隔符创建名为“tkk1”的外部表,这实际上是和外部数据建立了一个连接。当执行“drop table tkk1”命令,表示仅仅删除表连接,但是实际数据并没有被删除。