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 11月 30 16:49 ./drwxr-xr-x 18 kite kite 4.0K 11月 30 17:44 ../drwxrwxr-x 3 kite kite 4.0K 11月 30 16:49 bin/drwxrwxr-x 2 kite kite 4.0K 11月 30 17:41 conf/drwxrwxr-x 4 kite kite 4.0K 11月 30 16:49 examples/drwxrwxr-x 7 kite kite 4.0K 11月 30 16:49 hcatalog/drwxrwxr-x 2 kite kite 4.0K 11月 30 16:49 jdbc/drwxrwxr-x 4 kite kite 12K 11月 30 17:55 lib/-rw-r--r-- 1 kite kite 29K 11月 29 2016 LICENSE-rw-r--r-- 1 kite kite 578 11月 29 2016 NOTICE-rw-r--r-- 1 kite kite 4.1K 11月 29 2016 README.txt-rw-r--r-- 1 kite kite 19K 11月 30 2016 RELEASE_NOTES.txtdrwxrwxr-x 4 kite kite 4.0K 11月 30 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的更多细节我会写在以后的博客中。
- hive快速上手
- hive中UDF、UDTF、UDAF快速上手
- 快速上手
- Eclipse快速上手指南
- Eclipse快速上手指南
- Pro*C快速上手
- Eclipse快速上手指南
- Eclipse快速上手指南
- 传真机快速上手
- 快速上手Cruisecontrol
- delphi之快速上手
- [AppFuse]快速上手
- JasperReports快速上手
- MyEclipse Struts 快速上手
- MyEclipse Struts 快速上手
- MyEclipse Struts 快速上手
- MyEclipse Struts 快速上手
- MyEclipse Struts 快速上手
- 过滤字母,只能输入数字的设置
- linux的crontab实现秒级别定时调用脚本
- APP加固技术历程及未来级别方案:虚机源码保护
- libevent 多线程实现高并发
- 算符优先文法的编程实现
- hive快速上手
- ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效
- js面试题解析
- java.lang.NoSuchMethodError异常可能出现的原因
- 去掉输入框选择框等在移动端聚焦时出现一闪的情况
- 有分段函数如下,求age(5)。age(n)=10 (n=1) age(n)=age(n-1)+2 n>1
- 大型网站技术架构(四)——网站的高性能架构
- Ubuntu 16.04,双显卡,GTX1060,安装 NVIDIA 显卡驱动
- iis运行网站项目无法加载或初始化请求的服务提供程序