hive概念

hive概念

hive的兼容性

hive日志

启动hive

hive中除了保存真正的数据以外还要额外保存用来描述库、表、数据的数据,称为hive的元数据。这些元数据又存放在何处呢?

其实就是存放在metastore中

如果不修改配置hive默认使用内置的derby数据库存储元数据。

derby是apache开发的基于java的文件型数据库。

可以检查之前执行命令的目录,会发现其中产生了一个metastore.db的文件,这就是derby产生的用来保存元数据的数据库文件。

derby数据库仅仅用来进行测试,真正使用时会有很多限制。

最明显的问题是不能支持并发。

经测试可以发现,在同一目录下使用无法同时开启hive,不同目录下可以同时开启hive但是会各自产生metastore.db文件造成数据无法共同访问。

所以真正生产环境中我们是不会使用默认的derby数据库保存hive的元数据的。
hive目前支持derby和mysql来存储元数据。
配置hive使用mysql保存元数据信息:
删除hdfs中的/user/hive
hadoop fs -rmr /user/hive
复制hive/conf/hive-default.xml.template为hive-site.xml
cp hive-default.xml.template hive-site.xml
在中进行配置

            <property>
              <name>javax.jdo.option.ConnectionURLname>
              <value>jdbc:mysql://hadoop01:3306/hive?createDatabaseIfNotExist=truevalue>
              <description>JDBC connect string for a JDBC metastoredescription>
            property>

            <property>
              <name>javax.jdo.option.ConnectionDriverNamename>
              <value>com.mysql.jdbc.Drivervalue>
              <description>Driver class name for a JDBC metastoredescription>
            property>

            <property>
              <name>javax.jdo.option.ConnectionUserNamename>
              <value>rootvalue>
              <description>username to use against metastore databasedescription>
            property>

            <property>
              <name>javax.jdo.option.ConnectionPasswordname>
              <value>rootvalue>
              <description>password to use against metastore databasedescription>
            property>

手动创建hive元数据库,注意此库必须是latin1,否则会出现奇怪问题!所以推荐手动创建!并且创建库之前不能有任意的hive操作,否则自动创建出来的库表将使用mysql默认的字符集,仍然报错!

另一种方法是修改mysql的配置文件,让mysql默认编码集就是latin1,这样hive自动创建的元数据库就是latin1的了,但是这已修改将会影响整个mysql数据库,如果mysql中有其他库,这种方式并不好。
create database hive character set latin1;
将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下

如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)
mysql -uroot -p
(执行下面的语句 .:所有库下的所有表 %:任何IP地址或主机都可以连接)

            GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
            FLUSH PRIVILEGES;

再进入hive命令行,试着创建库表发现没有问题。

测试发现开启多个连接没有问题。

连接mysql,发现多了一个hive库。其中保存有hive的元数据。DBS-数据库的元数据信息,TBLS-表信息。COLUMNS_V2表中字段信息,SDS-表对应hdfs目录

外部运行hivesql

hive中查询只输出查询结果,不输出报错信息

hive -S -e 'select * from xsmd'

hive创建表

create table test(year String,day int,minute int) row format delimited fields terminated by '\t';

意思是行之间使用'\t'作为换行符,字段间使用制表符分割

hive从本地load数据

load data local inpath '/etc/hosts/test.txt' overwrite into table test;

hive仓库默认存储的位置是/usr/hive/warehouse下,我们可以修改hive.metastore.warehouse.dir来改变存储位置

我们可以查看我们导入的文件:

ls /usr/hive/warehouse

这句话没太理解,暂时放在这里

hive概念_第1张图片
hive概念_第2张图片
hive概念_第3张图片
hive概念_第4张图片
hive概念_第5张图片

你可能感兴趣的:(大数据)