hive的安装和配置

来源:互联网 发布:美国购物节网络星期一 编辑:程序博客网 时间:2024/06/06 10:03

首先下载hive的安装包apache-hive-1.2.1-bin.tar.gz,解压到相应的目录下sudo tar -zxvf  apache-hive-1.2.1-bin.tar.gz,然后更改文件接名称

sudo mv  解压后的文件夹名  hive文件夹名;

进入文件夹进行配置,cd  hive文件夹名

1.把hive的所在目录写入到相应用户的~/.bashrc文件(或者针对所有用户起作用的/etc/profile中)中,具体如下:

export HIVE_HOME=/usr/local/hive121

export PATH=$PATH:/$HIVE_HOME/bin (使得hive/bin下的可执行文件hive可以在任意目录下执行)

然后保存,用命令行source ~/.bashrc(source /etc/profile)使文件生效。

2.对hive/conf文件加下的hive-site.xml和hive-env.sh以及hive-log4j.properties文件进行配置。

hive-env.sh文件

使用sudo cp hive-env.sh.template hive-env.sh

然后打开hive-env.sh,对其进行编辑

sudo gedit hive-env.sh

export HADOOP_HOME=/usr/local/hadoop (系统中相应的hadoop的安装目录)

export HIVE_CONF_DIR=/usr/local/hive121/conf

 export HIVE_AUX_JARS_PATH=/usr/local/hive121/lib

保存source hive-env.sh使文件生效

然后打开hive-site.xml对其进行编辑

sudo gedit hive-site.xml(编辑项目相对较多)

__________________________________________________________________________________

<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/home/hadoop/hive/warehouse</value>
    <description>location of default database for the warehouse</description>
  </property>

用于存储hive中表数据的目录(本地或hdfs)

注:Hive的数据分为表数据和元数据,表数据是hive中表格(table)具有的数据;而元数据是用来存储表的名字,

表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

hive中的表数据会存储在HDFS上,而元数据因为要经常改动所以会存储在derby或者mysql数据库中。

又因为内嵌的derby数据库只能允许一个会话连接,只适合简单的测试。为了支持多用户多回话,则需要一个独

立的元数据库,因此会使用mysql作为hive元数据的存储介质。

____________________________________________________________________________________

<property>
    <name>hive.exec.scratchdir</name>
    <value>/tmp/hive</value>
    <description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/&lt;username&gt; is created, with ${hive.scratch.dir.permission}.</description>
  </property>

(本地或hdfs路径)用于存储不同map/reduce阶段的执行计划和这些阶段的执行结果。

_____________________________________________________________________________________

<property>
    <name>hive.querylog.location</name>
    <value>/tmp/hive/${user.name}</value>
    <description>Location of Hive run time structured log file</description>

用于存储hive相关日志的目录

_____________________________________________________________________________________

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

设置hive元数据的存储,这里是选择mysql作为存储数据库。hive为相应的mysql数据库中的数据库。

同时在mysql数据库中建立相应的数据库,并设置数据库的character 为latin1

$mysql -u root -p password

mysql>create user 'hive' identified by 'hive';(前一个hive是用户名后一个hive是密码,后面的属性设置中会用到,可以改为自己的)

mysql>grant all privileges on *.* to 'hive'@'%' with grant option;(hive为相应的hive数据库)

mysql>flush privileges;

mysql>alter database hive character set latin1;(不然后面在hive中执行命令show tables时汇报错)

——————————————————————————————————————————————————

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

相应的连接数据库的驱动名字,同时要把相应的驱动复制到hive121/lib文件夹下(mysql-connector-java-5.1.19-bin.jar)

可以将java语言描述的对database进行的操作转化为mysql可以理解的语句。经验证明connector与mysql的版本号不一致也可以运行。

——————————————————————————————————————————————————

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

上面创建的mysql数据库中的user

——————————————————————————————————————————————————

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

连接mysql数据库的相应的密码

——————————————————————————————————————————————————

至此hive-site.xml文件配置完成

然后是hive-log4j.propertites文件的配置

sudo cp  hive-log4j.propertites.template hive-log4j.propertites

sudo geidt  hive-log4j.propertites

______________________________________________________________________________________

hive.log.dir=/tmp/hive/${user.name}

hive中相应日志的存放路径,此处要和hive-site.xml文件中的hive.querylog.location属性相同

hive.log.file=hive.log

相应的日志文件的名称,可以自行更改,一般不动就可以(hive运行后会在hive.log后面加上日期区分每天的日志文件)

———————————————————————————————————————————————————

hive-log4j.propertites文件修改完成,保存退出即可

至此hive可以实现将表数据存储在本地,将元数据存储在mysql相应的数据库中。

执行hive可以运行hive;

在hive中用create table sch (line string);创建表

show tables;查看存在的表

describe tablename;查看表信息

drop table tablename;删除存在的表

在相应的mysql数据库中,use hive; show tables;

select * from TBL;可以查看hive中的相应的表信息(表名和owner)。

hive中的hive-site.xml文件中的相应属性的解析:http://blog.csdn.net/chaoping315/article/details/8500407

若要将hive的表数据存储到hdfs上面,可以在hdfs上创建相应的文件夹,如:

$hadoop dfs -mkdir /user/hadoop/hive

$hadoop dfs -mkdir /user/hadoop/hive/warehouse

$hadoop dfs -mkdir /user/hadoop/hive/scratchdir

$hadoop dfs -chmod -R 777  /user/hadoop/hive/(更改hive目录下所有文件及文件夹的权限)

然后更改hive-site.xml文件中的第一项和第二项的地址;

hive.metastore.warehouse.dir=hdfs://localhost:9000/user/hadoop/hive/warehouse

hive.exec.scratchdir=hdfs://localhost:9000/user/hadoop/hive/scratchdir

重新启动hive,然后用以下命令建表: create table student(id int,name string)row format delimited fields terminated by '\t\ ;

hive> create table student(id int,name string) row format delimited fields terminated by '\t';
OK
Time taken: 0.089 seconds

查看表:show tables;

hive> show tables;
OK
student
Time taken: 0.028 seconds, Fetched: 1 row(s)

然后用命令导入指定路径下的文件:load data local inpath '/usr/local/hive121/student.txt' overwrite into table student;

hive> load data local inpath '/usr/local/hive121/student.txt' overwrite into table student;
Loading data to table default.student
Table default.student stats: [numFiles=1, numRows=0, totalSize=41, rawDataSize=0]
OK
Time taken: 0.304 seconds

查看表:

hive> select * from student;
OK
1    xiaoming
2    xiaohong
3    gang
4    jun
5    mei
Time taken: 0.194 seconds, Fetched: 5 row(s)

此时在hdfs文件系统上的相应文件加下应该有相应的表文件夹和文件txt,查看的:

hive> dfs -ls -R /user/hadoop/hive/warehouse/;
drwxrwxrwx   - hadoop supergroup          0 2016-05-20 21:08 /user/hadoop/hive/warehouse/student
-rwxrwxrwx   1 hadoop supergroup         41 2016-05-20 21:08 /user/hadoop/hive/warehouse/student/student.txt
hive>






0 0
原创粉丝点击