1.上传tar包
2.解压
tar -zxvf hive-1.2.1.tar.gz
3.安装mysql数据库
推荐yum 在线安装
4.配置hive
(a)配置HIVE_HOME环境变量
vi conf/hive-env.sh
配置其中的$hadoop_home
(b)配置元数据库信息
vi hive-site.xml
添加如下内容:
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<description>password to use against metastore database</description>
</property>
</configuration>
5.安装hive和mysq完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下
如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)
mysql -uroot -p
#(执行下面的语句 *.*:所有库下的所有表 %:任何IP地址或主机都可以连接)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;
6. Jline包版本不一致的问题,需要拷贝hive的lib目录中jline.2.12.jar的jar包替换掉hadoop中的
/home/hadoop/app/hadoop-2.6.4/share/hadoop/yarn/lib/jline-0.9.94.jar
启动hive
bin/hive
----------------------------------------------------------------------------------------------------
Hive几种使用方式:
1.Hive交互shell bin/hive
2.Hive JDBC服务(参考java jdbc连接mysql)
3.hive启动为一个服务器,来对外提供服务
bin/hiveserver2
nohup bin/hiveserver2 1>/var/log/hiveserver.log 2>/var/log/hiveserver.err &
启动成功后,可以在别的节点上用beeline去连接
bin/beeline -u jdbc:hive2://mini1:10000 -n root
或者
bin/beeline
! connect jdbc:hive2://mini1:10000
4.Hive命令
hive -e ‘sql’
bin/hive -e 'select * from t_test'
1、hive 建立一张表 跟已经存在的结构化的数据文件产生映射关系
映射成功之后,就可以通过写sql来分析这结构化的数据 避免了写mr程序的麻烦
2、数据库 ---》 /user/hive/warehouse 下的一个文件夹对应
表 ---》 数据库文件夹下面的子文件夹 /user/hive/warehouse/itcast.db/t_t1
表的数据位置目前不能随便存放 一定要在指定的数据库表的文件夹下面
建立表的时候 可能还需要指定分隔符 否则有可能映射不成功
3、建表的时候一定要根据结构化数据文件的分隔符类型 指定分隔符
建表的字段个数和字段类型 要跟结构化数据中的个数类型一致
分隔符一般使用内置的来指定 ROW FORMAT DELIMITED 分割字段 还是分割集合 等等
4、分区表字段不能够在表中已经存在
分区字段是一个虚拟的字段 不存放任何数据
分区字段的数据来自于装载分区表数据的时候指定的
分区表的字段 在hdfs上的效果就是在 建立表的文件夹下面又创建了子文件
这样的目的把数据的划分更加细致 减少了查询时候全表扫描的成本 只需要按照指定的分区扫描数据并显示结果即可
5、分桶表 创建之前 需要开启分桶功能
分桶表(分簇表)创建的时候 分桶字段必须是表中已经存储(存在)的字段
也就是说你要按照表中那个字段进行分开
针对分桶表的数据导入:load data方式不能够导成分桶表的数据 没有分桶效果
原因在于load 本质上相当于 hive 去帮我们执行 hadoop fs -put
分桶表的数据 采用 insert+select 插入的数据来自于查询结果(查询时候执行了mr程序)
对应mr当中的partitioner
默认分桶规则 按照你指定的分桶字段clustered by哈希值 & 分桶的个数 set mapreduce.job.reduces=?
分桶表也是把表所映射的结构话数据文件分成更细致的部分 但是更多的是用在join查询提高效率之上
只需要把jion的字段在各自表当中进行分桶操作即可