初识Hive
什么是Hive?
Hive是基于Hadoop的数据仓库解决方案
将结构化的数据文件映射为数据库表
提供类sql的查询语言HQL(Hive Query Language)
Hive让更多的人使用Hadoop
Hive成为Apache顶级项目
Hive始于2007年的Facebook
Hive的优势和特点:
提供了一个简单的优化模型
HQL类SQL语法,简化MapReduce开发
支持在不同的计算框架上运行
支持在HDFS和HBase上临时查询数据
支持用户自定义函数、格式
成熟的JDBC和ODBC驱动程序,用于ETL和BI
稳定可靠(真实生产环境)的批处理
有庞大活跃的社区
MapReduce的执行效率更快,但代码较多。Hive的开发效率更快,语句简单,但执行速度很慢。
在Linux系统中安装和配置Hive
先将Hive解压安装。
我们可以在Hive的文件夹中新建一个仓库目录,命令是mkdir warehouse。
然后进入/etc/profile文件中配置Hive的环境变量,在文件的最后加上以下两条命令,上面一条是HIVE_HOME的绝对路径,下面一条是hive服务的通道。
我们需要在Hive文件夹中的conf目录下新建一个hive-site.xml文件,并在这个空文件里面加上以下配置。
<configuration>
<!--自己定义仓库的位置-->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/root/software/hive/warehouse</value>
</property>
<!--<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>-->
<!--hadoop100为主机名,改成自己的主机名或者localhost或者ip地址即可-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop100:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!--value中写连接的用户名-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!--value中写连接密码-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123</value>
</property>
<!--启动本地模式。对数据量比较小的操作,就可以在本地执行,这样要比提交任务到集群进行Reduce效率要快很多-->
<property>
<name>hive.exec.mode.local.auto</name>
<value>true</value>
</property>
<!--通过参数hive.cli.print.header可以控制在命令行cli中是否显示表的列名-->
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
</configuration>
然后进入conf文件夹中的hive-env.sh文件,到文件的最后,在里面配置Hadoop的路径,hive的conf路径以及hive的jar包路径。
将jdbc的jar包放在hive的lib目录下。
然后启动Hadoop服务,输入命名start-all.sh。
输入schematool -initSchema -dbType mysql命令进行初始化。
如果成功了,我们可以进入mysql里面,并且会在mysql中看到hive的数据库。
Hive数据类型
原始类型
Hive的数据类型类似于SQL的数据类型
类型 | 示例 |
---|---|
TINYINT | 10Y |
SMALLINT | 10S |
INT | 10 |
BIGINT | 100L |
FLOAT | 1.342 |
DOUBLE | 1.234 |
DECIMAL | 3.14 |
BINARY | 1010 |
BOOLEAN | TRUE |
STRING | ‘BOOK’ or “BOOK” |
CHAR | ‘YES’ or “YES” |
VARCHAR | ‘BOOK’ or “BOOK” |
DATE | ‘2013-01-31’ |
TIMESTAMP | ‘2013-01-31 00:13:00.345’ |
复杂数据类型
ARRAY:存储的数据为相同类型
MAP:具有相同类型的键值对
STRUCT:封装了一组字段
类型 | 格式 | 定义 | 示例 |
---|---|---|---|
ARRAY | [‘Apple’,’Orange’,’Mongo’] | ARRAY<string> | a[0]=‘Apple’ |
MAP | {‘A’:’Apple’,’O’:’Orange’} | MAP<string,string> | b[‘A’]=‘Apple’ |
STRUCT | {‘Apple’,2} | STRUCT<fruit:string,weight:int> | c.weight=2 |