Hadoop学习(十二)——hive的安装与体验

6 篇文章 1 订阅

笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值,找寻数据的秘密,笔者认为,数据的价值不仅仅只体现在企业中,个人也可以体会到数据的魅力,用技术力量探索行为密码,让大数据助跑每一个人,欢迎直筒们关注我的公众号,大家一起讨论数据中的那些有趣的事情。

我的公众号为:livandata

Hive是大数据中常用的数据仓库(按照主题、面向历史的一个数据集,被称作是数据仓库),可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能。

数据仓库中还有一个建模的模型。

数据仓库的用途主要是做数据分析使用,常用的建模数据取数据也是可以的,数据仓库中的表大多为宽表(即数据的维度比较多,按照主题划分);

数据建模时表的结构主要有:星型、雪花型等样式,比如上图的事实表为:星型结构。

为什么要用Hive

操作接口采用类SQL的语法,提供快速开发的能力。

避免直接写MapReduce,减少开发人员的学习成本,扩展功能很方便。

Hive的特点:

1) 可扩展:

Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。

2) 延展性:

Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

3) 容错:

良好的容错性,节点出现问题SQL扔可完成执行。

Hive的架构为:

1)当在hive上创建一个database时,HIVE会在HDFS中创建一个database的目录,用来存放数据;

2HIVE的元数据放在另外的一个数据库中,主要借助mysql,存放多个HIVE库的元数据。

3)当在HIVEcreate一个table时,实践经验:创建的字段全用string,对应的表就会建立在HDFS中;

4Hive中有一个mr的模板库,会将sql转换成mr,提交给YARN,当建表时,对数据的切块方法,需要什么参数都创建好了。

5)在这之前,程序会将日志信息,清洗放入到HDFS中,整整齐齐的字段,类似于一张表。

整体的架构图为:

Hive的安装非常简单,可以安装多个,也可以安装一个。

HA环境下hadoopHive的安装使用过程可以借用如下网页的操作流程:https://www.cnblogs.com/dxxblog/p/8193967.html,流程相对完整:

安装

一:下载hive——地址:http://mirror.bit.edu.cn/apache/hive/

 这里以hive-2.1.1为例子,如图:

hive解压到/usr/local下:

[root@s100 local]# tar -zxvf apache-hive-2.1.1-bin.tar.gz -C /usr/local/
将文件重命名为hive文件:
[root@s100 local]# mv apache-hive-2.1.1-bin hive

修改环境变量/etc/profile

[root@s100 local]# vim /etc/profile
#hive
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin

执行source/etc.profile

执行hive--version

[root@s100 local]# hive --version

 hive的版本显现,安装成功!

配置

[root@s100 conf]# cd /usr/local/hive/conf/

修改hive-site.xml

这里没有,我们就以模板复制一个:

[root@s100 conf]# cp hive-default.xml.template hive-site.xml
[root@s100 conf]# vim hive-site.xml 

1.配置hive-site.xml(第5点的后面有一个单独的hive-site.xml配置文件,这个如果有疑问可以用后面的配置文件,更容易明白)

主要是mysql的连接信息(在文本的最开始位置):

<configuration>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>用户名(这4是新添加的,记住删除配置文件原有的哦!)
        <value>root</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>密码
        <value>123456</value>
    </property>
   <property>
        <name>javax.jdo.option.ConnectionURL</name>mysql
        <value>jdbc:mysql://192.168.1.68:3306/hive</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>mysql驱动程序
        <value>com.mysql.jdbc.Driver</value>
    </property>
        <!-- 到此结束代码 -->

</configuration>

此处的root即为连接mysqlhiveschema的名称;

2.复制mysql的驱动程序到hive/lib下面(这里已经拷贝好了):

[root@s100 lib]# ll mysql-connector-java-5.1.18-bin.jar 
-rw-r--r-- 1 root root 789885 1月   4 01:43 mysql-connector-java-5.1.18-bin.jar

3.mysqlhiveschema(在此之前需要创建mysql下的hive数据库):

[root@s100 bin]# pwd
/usr/local/hive/bin
[root@s100 bin]# schematool -dbType mysql -initSchema

4.执行hive命令

[root@localhost hive]# hive

成功进入hive界面,hive配置完成

5.查询mysqlhive这个库是在 schematool-dbType mysql -initSchema 之前创建的!)

[root@localhost ~]# mysql -uroot -p123456
mysql> use hive
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_hive            |
+---------------------------+
| AUX_TABLE                 |
| BUCKETING_COLS            |
| CDS                       |
| COLUMNS_V2                |
| COMPACTION_QUEUE          |
| COMPLETED_COMPACTIONS     |

备注(这里不计入正文不要重复配置hive-site.xml

配置文件hive-site.xml

这里不得不说一下,如果你的 schematool -dbType mysql -initSchema 并没有执行成功怎么办,小博主昨天在这卡了一天,最后根据伟大的百度和hive官方文档,直接写了一个hive-site.xml配置文本:

<configuration>
        <property>
                <name>javax.jdo.option.ConnectionURL</name>
                <value>jdbc:mysql://localhost:3306/hahive</value>(mysql地址localhost)
        </property>
        <property>
                <name>javax.jdo.option.ConnectionDriverName</name>(mysql的驱动)
                <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>123456</value>
        </property>
        <property>
                <name>hive.metastore.schema.verification</name>
                <value>false</value>
        </property>
</configuration>

那我们做这些事干什么的呢,下面小段测试大家感受一下

hive测试:

备注:这里是第二个配置文件的演示:所以数据库名称是hahive数据库!

1.需要知道现在的hadoop中的HDFS存了什么

[root@localhost conf]# hadoop fs -lsr /

2.进入hive并创建一个测试库和测试表

[root@localhost conf]# hive

 创建库:

1 hive> create database hive_1;
2 OK
3 Time taken: 1.432 seconds

 显示库:

1 hive> show databases;
2 OK
3 default
4 hive_1
5 Time taken: 1.25 seconds, Fetched: 2 row(s)

 创建库成功!

3.查询一下HDFS有什么变化

多了一个库hive_1

mysql下的hahive库有什么变化:

4.hive_1下创建一个表hive_01

1

2

3

4

5

6

7

8

9

10

11

hive> use hive_1;

OK

Time taken: 0.754 seconds

hive> create table hive_01 (id int,name string);

OK

Time taken: 2.447 seconds

hive> show tables;

OK

hive_01 (表创建成功)

Time taken: 0.31 seconds, Fetched: 2 row(s)

hive>

HDFS下的情况:

web端是什么样子的呢:

总的来说,hive其实就和mysql差不多呢!那么后面就不说了

不过中间可能会遇到各种奇葩问题,简单描述我遇到过的问题:

1) mysql安装报错:

开始用的rpm的安装包进行安装,中间涉及到ssl升级,依赖包安装等各种问题,不胜其烦,经百度之后果断更换安装方式,采用解压tar.gz的方式安装,成功解决,主要的安装步骤可参考如下(https://blog.csdn.net/javaloveiphone/article/details/74276506):

1、下载地址:MySQL-5.6.30-Linux-glibc2.5-x86_64.tar.gz

2、查看linux系统版本:

[mysql@localhost scripts]$ uname -a  
Linux localhost.localdomain 2.6.32-358.el6.x86_64 
#1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux  

3、解压缩下载的mysql包:

[root@localhost mysql]# tar -zxvf mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz -C /usr/local/

4、重命名解压包:

[root@localhost mysql]# mv mysql-5.6.30-linux-glibc2.5-x86_64 /usr/local/mysql

5、创建mysql用户:

[root@localhost mysql]# useradd mysql  

6、设置mysql用户密码:

[root@localhost mysql]# passwd mysql  

7、将mysql目录的权限授给mysql用户和mysql组:

[root@localhost local]# chown -R mysql:mysql /usr/local/mysql/ 

8、切换到mysql用户,执行安装:

[root@localhost ~]# su - mysql
[mysql@localhost scripts]$ /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

输出信息:

[mysql@localhost scripts]$ ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data  
……
The latest information about MySQL is available on the web at  
  http://www.mysql.com  
--defaults-file argument to mysqld_safe when starting the server  

注意,如果安装报错:scripts/mysql_install_db: /usr/bin/perl: bad interpreter:No such file or directory,切换到root用户,安装perl以及perl-devel,执行命令:

[root@master ~]# yum -y install perl perl-devel

9、切换到root用户,复制并修改配置文件,添加msql服务:

复制文件:

[root@master ~]# cd /usr/local/mysql/support-files/
[root@master support-files]# cp my-default.cnf /etc/my.cnf
[root@master support-files]# cp mysql.server /etc/init.d/mysql

修改文件中的两个变更值

basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data/

10、配置mysql的环境变量:

[root@master ~]# vi /etc/profile

添加如下内容:

export PATH=$PATH:/usr/local/mysql/bin

保存退出,执行:

[root@master ~]# source /etc/profile

11、切换到mysql用户,启用mysql:

[mysql@localhost ~]$ chkconfig --add mysql  
[mysql@localhost ~]$ chkconfig mysql on  
[mysql@localhost ~]$ service mysql start  
Starting MySQL.. SUCCESS!  

12、设置mysql的root用户密码:

[mysql@localhost ~]$ /usr/local/mysql/bin/mysqladmin -u root password '123456'

13、root用户登录mysql:

[mysql@localhost ~]$ mysql -uroot -p  
Enter password:   
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.  
mysql>  

注意:当执行quit退出再重新登录,可能报ERROR 1045 (28000): Accessdenied for user ‘root’@’localhost’ (using password: YES)异常,解决方法如下: 方法一: 
(1)关闭mysql

[mysql@localhost ~]$ service mysql stop

(2)屏蔽权限

[mysql@localhost ~]$ mysqld_safe --skip-grant-table

屏幕出现: Starting demo from …..

(3)新开起一个终端输入

[mysql@localhost ~]$ mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
mysql> FLUSH PRIVILEGES;//记得要这句话,否则如果关闭先前的终端,又会出现原来的错误
mysql>quit

方法二: 
(1)关闭mysql

[mysql@localhost ~]$  service mysql stop

(2)屏蔽权限

[mysql@localhost ~]$ mysqld_safe --skip-grant-table

屏幕出现: Starting demo from …..

(3)新开起一个终端输入

[mysql@localhost ~]$ mysql -u root mysql
mysql> delete from user where USER='';
mysql> FLUSH PRIVILEGES;//记得要这句话,否则如果关闭先前的终端,又会出现原来的错误
mysql>quit

14、分享:Linux终端操作MySQL常用命令

转载于:mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz安装

15、让远程客户端可以连接mysql服务器:

使用 mysql库 :

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

查看用户表 :

mysql> SELECT `Host`,`User` FROM user;

更新用户表 :

mysql> UPDATE user SET `Host` = '%' WHERE`User` = 'root' LIMIT 1;

注:host=localhost 那此用户就不具有远程访问权限,修改为%的意思是允许所有的ip远程访问,如果需要指定具体的某个ip就写上具体的ip即可

强制刷新权限 :

mysql> flush privileges;

或者通过授权的方式:

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

如果需要指定具体的某个ip就把%替换成具体的ip:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.194.20' IDENTIFIED BY '123456'  WITH GRANT OPTION; 

别忘记强制刷新权限 :

mysql> flush privileges;

补充,查看端口sql:

mysql>  show global variables like'port';  

注:如果还不通,请查看防火墙信息。

按照上面的步骤一次执行成功,不过在安装之前建议先将虚拟机做一下快照,因为一旦安装失败,再次安装mysql时会因上次安装的残留文件引发更为复杂的问题,为减少报错,重新安装时直接恢复快照较为便捷;

2)初始化mysqlhiveschema时会有:

A)state=42000,code=1061;依然使用的derby作为数据库

解决方案:https://blog.csdn.net/binyet/article/details/72871127

B)fail to get version等报错;没有找到mysql中的metastore

解决方案:https://blog.csdn.net/lovebyz/article/details/71698267

此时建议将hive-site.xml文件中的除连接mysql的四句保留外,其他的字段全部删除,避免不必要的错误;

3另外,我还遇到过“Name node is in safe mode”的问题:

一检查发现是master中的namenode没有正常启动,经排查没有启动的原因是:got premature end-of-file at txid 2; expected file to go upto 4;主要是指nn和standby nn的editlog不一致:

解决方案为:执行hdfs namenode -bootstrapStandby

参考文章为:https://blog.csdn.net/hongweigg/article/details/7185328

https://blog.csdn.net/linux_ja/article/details/51917928

4)最后一个问题即为hive连接到了standbynamenode上,主要原因是namenode中间有过一次停止,zknn2调整为active,此问题重启集群就可以。

参看文章为:https://blog.csdn.net/tototuzuoquan/article/details/73002687

上面问题搞定后,就可以正常启动hive了。

然后在hive中创建一些表信息:

然后对数据进行建表:

hive中建一个表,然后需要往表中添加一些记录(内容写在了tj.dat文件中,以“,”分割):

然后再在hive中查询数据:

此时会报错,是因为查询方式不对,但数据已经成功导入到表中了。

navicat中查看对应的mysql数据库为,其中就有hive的元数据表:

columns_v2中就有相应的信息:

在浏览器上查看运行结果显示的参考网址为:

https://blog.csdn.net/bingzige/article/details/51169098

Hive的数据存储:

Hive中的thrift将hive转换为一个服务器:

主要是启动hive下的一个hiveserver2

然后再找一个客户端,主要是在bin下的beeline客户端:

如何连接hive的服务器:

即可,此时查询结果会相应的变快。

至此,hive的安装就完成了,如有问题,欢迎沟通~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值