hive快速上手

本篇博客和大家一起在本地搭建一个hive环境,并进行一些简单的hive操作。

加入了启动hiveserver2并使用beeline客户端连接的步骤,去掉了直接使用hive cli的部分。

hive允许以类似SQL的语法来操作hadoop中的数据,简单来讲,hive的default数据库对应hadoop的/user/hive/warehouse目录,这个根目录下的每个文件夹分别对应hive的数据表,表中的数据对应文件夹内的文件中的数据。这些对应关系都作为hive的metadata保存在了hive的metastore中,一般情况下,hive使用mysql数据库作为metastore。

hive环境搭建

下面开始搭建一个hive环境。

hadoop环境

hive依赖hadoop,所以你必须保证本地的hdfs的namenode和datanode都已经启动。关于hadoop环境搭建请参考hadoop环境搭建 。

另外,使用hive之前需要保证hdfs中存在/tmp/user/hive/warehouse这两个目录,并具有GroupWrite权限。可以通过下面的命令来完成

创建文件夹

$ hadoop fs -mkdir /tmp
$ hadoop fs -mkdir /user
$ hadoop fs -mkdir /user/hive
$ hadoop fs -mkdir /user/hive/warehouse

赋权限

hadoop fs -chmod g+w   /tmp
hadoop fs -chmod g+w   /user/hive/warehouse

hadoop的命令与linux命令极为相似,想详细了解linux权限的话可以参考linux中文件/文件夹的权限

mysql环境

hive需要使用mysql中的一个数据库作为metastore数据库,所以在mysql中新建一个空的数据库来备用,我本地新建的数据库名叫hive。

mysql> create database hive default character set utf8;
mysql> grant all to hive.* to hiveuser@'localhost' identified by hivepassword;

hive环境

下载hive

我本地使用的是hive2.1.1版本,下载地址是https://archive.apache.org/dist/hive/hive-2.1.1/apache-hive-2.1.1-bin.tar.gz,如果你想下载其他版本,可以访问https://archive.apache.org/dist/hive/下载你想要的版本。

下载完成后解压,然后进入hive的根目录,查看一下目录结构

$ ls -l
总用量 108K
drwxrwxr-x  9 kite kite 4.0K 1130 16:49 ./
drwxr-xr-x 18 kite kite 4.0K 1130 17:44 ../
drwxrwxr-x  3 kite kite 4.0K 1130 16:49 bin/
drwxrwxr-x  2 kite kite 4.0K 1130 17:41 conf/
drwxrwxr-x  4 kite kite 4.0K 1130 16:49 examples/
drwxrwxr-x  7 kite kite 4.0K 1130 16:49 hcatalog/
drwxrwxr-x  2 kite kite 4.0K 1130 16:49 jdbc/
drwxrwxr-x  4 kite kite  12K 1130 17:55 lib/
-rw-r--r--  1 kite kite  29K 1129  2016 LICENSE
-rw-r--r--  1 kite kite  578 1129  2016 NOTICE
-rw-r--r--  1 kite kite 4.1K 1129  2016 README.txt
-rw-r--r--  1 kite kite  19K 1130  2016 RELEASE_NOTES.txt
drwxrwxr-x  4 kite kite 4.0K 1130 16:49 scripts/
配置环境变量

为了方便操作,配置一下hive的环境变量

export HIVE_HOME=/usr/local/bin/apache-hive-2.1.1-bin
export PATH=$HIVE_HOME/bin:$PATH

将HIVE_HOME修改为你本机的目录。

加入mysql驱动

从https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.45.tar.gz下载mysql的驱动,并放入$HIVE_HOME/lib目录下。

配置hive

在$HIVE_HOME/conf目录下新建一个名叫hive-site.xml的文件,并加入以下配置



<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURLname>
        <value>jdbc:mysql://127.0.0.1:3306/hivevalue>
    property>
    <property>
        <name>javax.jdo.option.ConnectionDriverNamename>
        <value>com.mysql.jdbc.Drivervalue>
    property>
    <property>
        <name>javax.jdo.option.ConnectionUserNamename>
        <value>hiveuservalue>
    property>
    <property>
        <name>javax.jdo.option.ConnectionPasswordname>
        <value>hivepasswordvalue>
    property>

    <property>
        <name>mapreduce.cluster.local.dirname>
        <value>/usr/local/bin/hadoop-2.8.1/tmp/mapred/localvalue>
    property>
configuration>

上面四个property是mysql metastore的连接配置,需要修改为你本地mysql的连接信息,最后一个运行mapreduce job时需要的,请修改为你本地的一个地址。

初始化hive

上面的信息配置好了以后,就可以初始化hive的metadata了。在初始化之前,mysql中的hive数据库还是空的。使用下面的命令来初始化hive

schematool -dbType mysql -initSchema

schematool$HIVE_HOME/bin目录下的一个命令,由于该目录已经加入了$PATH中,所以可以直接使用。

启动hiveserver2

直接使用hive cli的话,限制比较多,官方推荐使用hiveserver2+beeline的方式。hiveserver2在$HIVE_HOME/bin下面,直接运行此命令机能启动

配置并启动beeline

在使用beeline连接hiveserver2时需要配置一下hadoop配置文件中的core-site.xml文件,加入以下内容

<property>
    <name>hadoop.proxyuser.<username>.groupsname>
    <value>*value>
property>
<property>
    <name>hadoop.proxyuser.<username>.hostsname>
    <value>*value>
property>

将上面的替换成你当前linux用户的名字,在terminal中运行whoami可以查看你自己的名字。

修改后,需要重启hdfs的namenode和datanode。

然后,以上面的名字的身份运行beeline命令

# $HIVE_HOME/bin/beeline
Beeline version 2.3.2 by Apache Hive
beeline> 

此时进入了beeline的交互式shell中。然后使用!connect连接本地的hiveserver2

beeline> !connect jdbc:hive2://127.0.0.1:10000
Connecting to jdbc:hive2://127.0.0.1:10000
Enter username for jdbc:hive2://127.0.0.1:10000: 
Enter password for jdbc:hive2://127.0.0.1:10000: 
......
Connected to: Apache Hive (version 2.3.2)
Driver: Hive JDBC (version 2.3.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://127.0.0.1:10000> 

当提示输入用户名和密码时,直接回车即可。此时显示已经连接上了本地的hiveserver2。

新建表

使用下面的命令来新建一张表

0: jdbc:hive2://127.0.0.1:10000> create table testT1 (id int, name string);

查看hive中的表

0: jdbc:hive2://127.0.0.1:10000> show tables;
testt1

查看hadoop中的对应文件夹

kite@kite-ThinkPad:local$ hadoop fs -ls /user/hive/warehouse
Found 1 items
drwxrwxr-x   - kite supergroup          0 2017-12-01 10:25 /user/hive/warehouse/testt1

可以看出来,在hdfs的/user/hive/warehouse/目录下多了一个同名的文件夹来表示这是一个表。

写入数据

使用下面的命令来向hive写入3条数据

0: jdbc:hive2://127.0.0.1:10000> insert into table testT1 values (1,'foo'),(2,'bar'),(3,'hello');

查询数据

写入数据之后,接下来使用select语句来查询一下刚刚写入的数据

0: jdbc:hive2://127.0.0.1:10000> select * from testt1;
+------------+--------------+
| testt1.id  | testt1.name  |
+------------+--------------+
| 1          | foo          |
| 2          | bar          |
| 3          | hello        |
+------------+--------------+
3 rows selected (0.444 seconds)

查看hdfs中的存储

$ hadoop fs -ls /user/hive/warehouse/testt1
Found 1 items
-rwxrwxr-x   1 kite supergroup         20 2017-12-01 10:29 /user/hive/warehouse/testt1/000000_0

hdfs中的/user/hive/warehouse/testt1目录中多了一个文件,下面看下文件中的内容

$ hadoop fs -cat /user/hive/warehouse/testt1/000000_0
1  foo
2  bar
3  hello

hdfs中文件内容的分隔符并不是tab,我为了方便显示修改成了tab

本篇博客的目的在于快速上手,关于hive的更多细节我会写在以后的博客中。

你可能感兴趣的:(hadoop生态圈,hive,hiveserver2,beeline)