hive快速上手

来源:互联网 发布:windows 10 superfetch 编辑:程序博客网 时间:2024/06/06 02:46

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

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   /tmphadoop fs -chmod g+w   /user/hive/warehouse

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

mysql环境

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

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总用量 108Kdrwxrwxr-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.txtdrwxrwxr-x  4 kite kite 4.0K 1130 16:49 scripts/
配置环境变量

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

export HIVE_HOME=/usr/local/bin/apache-hive-2.1.1-binexport 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的文件,并加入以下配置

<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration>    <property>        <name>javax.jdo.option.ConnectionURL</name>        <value>jdbc:mysql://127.0.0.1:3306/hive</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>root</value>    </property>    <property>        <name>mapreduce.cluster.local.dir</name>        <value>/usr/local/bin/hadoop-2.8.1/tmp/mapred/local</value>    </property></configuration>

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

初始化hive

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

schematool -dbType mysql -initSchema

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

运行hive客户端

初始化成功后,就可以使用hive的客户端来操作hadoop中的数据了。直接使用hive命令即可进入hive的交互模式。

$ hiveSLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/usr/local/bin/apache-hive-2.1.1-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: Found binding in [jar:file:/usr/local/bin/hadoop-2.8.1/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]Logging initialized using configuration in jar:file:/usr/local/bin/apache-hive-2.1.1-bin/lib/hive-common-2.1.1.jar!/hive-log4j2.properties Async: truehive>

中间我删掉了一些hive打印出来的调试信息。
每一个hive命令都要以分号’;’结尾,否则hive认为你的输入还没有结束。
输入quit;退出hive的交互模式。

新建表

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

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

查看hive中的表

hive> show tables;testt1

查看hadoop中的对应文件夹

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

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

写入数据

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

hive> insert into table testT1 values (1,'foo'),(2,'bar'),(3,'hello');

查询数据

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

hive> select * from testt1;1   foo2   bar3   hello

查看hdfs中的存储

$ hadoop fs -ls /user/hive/warehouse/testt1Found 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_01  foo2  bar3  hello

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

这一切都是hive自动完成的。从这些简单的操作应该可以看出来hive的核心价值了。

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

原创粉丝点击