大数据学习[04]:Hive安装配置

来源:互联网 发布:mysql 连接127.0.0.1 编辑:程序博客网 时间:2024/06/06 13:10

hive

摘要:hive的安装,可能遇到问题及解决;提及一些hive元数据;提及了一下内外部表。

前置

linux集群系统配置:[1] 大数据学习前夕[01]:系统-网络-SSH
hadoop集群环境:[2] 大数据学习[02]:hadoop安装配置
安装mysql并配置好用户(这个必须要安装与配置的):[3]大数据学习前夕[04]:Mysql安装[Hive]

下载

[hadoop@hadoop01 ~]$ wget http://www-eu.apache.org/dist/hive/hive-1.2.2/apache-hive-1.2.2-bin.tar.gz

解压

[hadoop@hadoop01 ~]$ tar vxzf apache-hive-1.2.1-bin.tar.gz

配置

[hadoop@hadoop01 conf]$ cp hive-env.sh.template hive-env.sh
#增加hadoop_home:export HADOOP_HOME=/home/hadoop/hadoop

修改hive-site.xml

[hadoop@hadoop01 conf]$ vim hive-site.xml
<configuration>    <property>        <name>hive.metastore.uris</name>        <value>thrift://hadoop01:9083</value>    </property>     <property>        <name>hive.metastore.warehouse.dir</name>        <value>/user/hive/warehouse</value>    </property>    <property>        <name>javax.jdo.option.ConnectionURL</name>        <value>jdbc:mysql://hadoop01:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8</value>    </property>    <property>        <name>javax.jdo.option.ConnectionDriverName</name>        <value>com.mysql.jdbc.Driver</value>    </property>    <property>        <name>javax.jdo.option.ConnectionUserName</name>        <value>root</value>    </property>    <property>        <name>javax.jdo.option.ConnectionPassword</name>        <value>AAAaaa111</value>    </property></configuration>

配置一下HIVE的环境变量

[hadoop@hadoop01 conf]$ sudo vim /etc/profile[hadoop@hadoop01 conf]$ source /etc/profile

lib目录下增加一个mysql-connector-java-5.1.6.jar驱动;

复制

scp -r apache-hive-1.2.1-bin hadoop@hadoop02:~/scp -r apache-hive-1.2.1-bin hadoop@hadoop03:~/

启动hive

启动方法1:hive --service metastore &启动方法2:nohup hive --service metastore -v &

启动报错:
hive
这个因为数据库中有root@hadoop01没有密码引起的,把没有密码的删除了就可以了。
解决方法:把mysql里root用户没有密码全删除了,参见大数据学习前夕[04]:Mysql安装[Hive]。

创建表

在命令行输入hive就打印相应日志,接着就进入hive shell界面。
创建一张伪表dual

CREATE TABLE IF NOT EXISTS `dual` (  `name` string)

创建一个文件/home/hadoop/dual,在里面写一些字符串;为dual的插入作准备;

hive> load data local inpath '/home/hadoop/dual' into table dual;

可以看到数据加载入其中了,里面的基本操作命令与mysql差多,不过,HSQL没有insert into…value这样的方法,一般都是采用文件加载,或从别的表查询来更新的。

构造自己的插入方法

创建测试表student

CREATE TABLE student(`student_id` string,`student_name` string) COMMENT 'This is the student table' partitioned by(`born` string,`sex` int)ROW FORMAT DELIMITEDFIELDS TERMINATED BY ',' stored AS ORC;

编写自己的插入SQL

INSERT OVERWRITE TABLE student05 PARTITION (born = '2015-07-08',sex = 0)SELECT 'dlmu_01' as student_id,'happyprince' as student_nameFROM duallimit 1;

可能会遇到的问题

上面的创建表有可能会出现:Specified key was too long; max key length is 767 bytes 这样的错误; 文章hive创建表错误[ Specified key was too long]具体处理解决方法:
第一步:查看数据库的字符

mysql> show variables like '%char%';mysql>alter database 库名 character set latin1;

再操作创建表,查看是否还是报错,如果还是报同样的错误,接着第二步;
第二步:直接把数据库给删了
第三步:配置了mydql文件:把字符集都设置成了latin1;

[root@hadoop01 ~]# vi /etc/my.cnf[mysqld]character-set-server=latin1lower_case_table_names=1datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockuser=mysql# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid[client]default-character-set=latin1[mysql]default-character-set=latin1

第四步:重启MYSQL; 重启HIVE;
这个是mysql的字符集问题,还未来得及深入研究,先这样处理,有知道好方法的请指教!

hive元数据

进入mysql,打开hive数据库,show tables;
hive
看几个表:
version表

mysql> select * from version;+--------+----------------+-----------------------------------------+| VER_ID | SCHEMA_VERSION | VERSION_COMMENT                         |+--------+----------------+-----------------------------------------+|      1 | 1.2.0          | Set by MetaStore hadoop@192.168.137.101 |+--------+----------------+-----------------------------------------+VER_ID:ID主键;SCHEMA_VERSION :Hive版本;VERSION_COMMENT:版本说明有时数据异常了,会修改这个表的内容,所以当hive由于版本问题启动不了时,可以来这里看看。

数据库表[DBS,DATABASE_PARAMS]
mysql> select * from dbs;

[一起学Hive]之十四-Hive的元数据表结构详解说明得比较全;

  • Hive表和视图相关的元数据表
    主要有TBLS、TABLE_PARAMS、TBL_PRIVS,这三张表通过TBL_ID关联。
  • Hive文件存储信息相关的元数据表
    主要涉及SDS、SD_PARAMS、SERDES、SERDE_PARAMS
    由于HDFS支持的文件格式很多,而建Hive表时候也可以指定各种文件格式,Hive在将HQL解析成MapReduce时候,需要知道去哪里,使用哪种格式去读写HDFS文件,而这些信息就保存在这几张表中。
  • Hive表字段相关的元数据表
    主要涉及COLUMNS_V2
  • Hive表分区相关的元数据表
    主要涉及PARTITIONS、PARTITION_KEYS、PARTITION_KEY_VALS、PARTITION_PARAMS
    等等。。。

hive内部表与外部表

内部表:数据与元数据都要管。创建时,会把数据移动hive数据仓库指定的位置,删除时会把数据与记录的位置一起删;
外部表:只管元数据,不管数据;创建时,要指定一个数据路径,hive不会管你的数据在哪里,也不会移动它,只是记录路径,删除时,也只是删除路径,数据不管。

参考引用

[1] 大数据学习前夕[01]:系统-网络-SSH
[2] 大数据学习[02]:hadoop安装配置
[3]大数据学习前夕[04]:Mysql安装[Hive]
[4][一起学Hive]之十四-Hive的元数据表结构详解

【作者:happyprince, http://blog.csdn.net/ld326/article/details/78023101】

原创粉丝点击