您的位置:首页 > 运维架构 > 网站架构

第9周 Hive体系架构、安装与HiveQL,应用案例

2014-01-15 10:36 281 查看
[b]Hadoop流[/b]

##wordcount的例子
bin/hadoop jar contrib/streaming/hadoop-0.20.2-streaming.jar -input input -output output -mapper /bin/cat -reducer /usr/bin/wc
注意,命令一定要写完整的路径

[b]Hive 简介[/b]

数据仓库工具。可以把Hadoop下的原始结构化数据变成Hive中的表
支持一种与SQL几乎完全相同的语言HiveQL。除了不支持更新、索引和事务,几乎SQL的其它特征都能支持
可以看成是从SQL到Map-Reduce的映射器
提供shell、JDBC/ODBC、Thrift、Web等接口

Hive简介
起源自facebook由Jeff Hammerbacher领导的团队
构建在Hadoop上的数据仓库框架
设计目的是让SQL技能良好,但Java技能较弱的分析师可以查询海量数据
2008年facebook把hive项目贡献给Apache

Hive安装
内嵌模式:元数据保持在内嵌的Derby模式,只允许一个会话连接
本地独立模式:在本地安装Mysql,把元数据放到Mysql内
远程模式:元数据放置在远程的Mysql数据库

[b]Hive安装:内嵌模式[/b]

1.下载 http://apache.dataguru.cn/hive/hive-0.8.1/hive-0.8.1.tar.gz 2.安装
(1)上传hive安装包到机器上,使用root用户登陆:
tar -xvf hive-0.8.1.tar.gz
(2)将解压的hive分别移动并改名为/usr/local/hive
rm -rf /usr/local/hive mv hive-0.8.1 /usr/local/hive

内嵌模式
3.配置hive
(1)修改/usr/local/hive/bin/hive-config.sh
在文件末尾加入
export JAVA_HOME=/usr/local/jdk export HIVE_HOME=/usr/local/hive export HADOOP_HOME=/usr/local/hadoop
(2) 根据hive-default.xml复制hive-site.xml
cp /usr/local/hive/conf/hive-default.xml /usr/local/hive/conf/hive-site.xml
(3)配置hive-site.xml,主要配置项如下:
hive.metastore.warehouse.dir:(HDFS上的)数据目录
hive.exec.scratchdir:(HDFS上的)临时文件目录
hive.metastore.warehouse.dir默认值是/user/hive/warehouse
hive.exec.scratchdir默认值是/tmp/hive-${user.name}

内嵌模式
以上是默认值,暂时不改。
(4)改变 /usr/local/hive的目录所有者为hadoop
chown -R hadoop:hadoop /usr/local/hive
(5)配置hive的log4j:
cp /usr/loca/hive/conf/hive-log4j.properties.template /usr/loca/hive/conf/hive-log4j.properties
修改/usr/loca/hive/conf/hive-log4j.properties将org.apache.hadoop.metrics.jvm.EventCounter改为org.apache.hadoop.log.metrics.EventCounter
(6)启动hive
使用hadoop用户登陆,执行/usr/local/hive/bin/hive

[b]Hive安装:独立模式[/b]

安装Mysql并启动服务
在Mysql中为hive建立账号,并授予足够的权限,例如hive账号,授予all privileges
用上述账号登陆mysql,然后创建数据库,比如名叫hive,用于存放hive的元数据
在本地安装mysql客户端
配置hive-site.xml文件,指出使用本地Mysql数据库,已经连接协议,账号、口令等
把mysql-connector-java-x.x.x.jar复制到hive的lib目录下
启动hive能进入shell表示安装成功

[b]Hive安装:远程模式[/b]

在本地模式的基础上修改hive-site.xml文件,设置hive.metastore.local为false,并指向远程mysql数据库即可

[b]Hive shell[/b]

执行HiveQL(大约相当于SQL 92标准)
查看或临时设置Hive参数,只对当前会话有效
创建函数
导入jar包

[b]JDBC/ODBC接口[/b]

用户可以像连接传统关系数据库一样使用JDBC或ODBC连接Hive
目前还不成熟

JDBC的具体连接过程
1.使用jdbc的方式连接Hive,首先做的事情就是需要启动hive的Thrift Server,否则连接hive的时候会报connection refused的错误。
启动命令如下:
hive --service hiveserver
2.新建java项目,然后将hive/lib下的所有jar包和hadoop的核心jar包hadoop-0.20.2-core.jar添加到项目的类路径上。

样板代码
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");
String dropSql="drop table pokes";
String createSql="create table pokes (foo int,bar string)";
String insertSql="load data local inpath '/home/zhangxin/hive/kv1.txt' overwrite into table pokes";
String querySql="select bar from pokes limit 5";
Connection connection=DriverManager.getConnection("jdbc:hive://localhost:10000/default", "", "");
Statement statement=connection.createStatement();
statement.execute(dropSql);
statement.execute(createSql);
statement.execute(insertSql);
ResultSet rs=statement.executeQuery(querySql);
while(rs.next())
{
System.out.println(rs.getString("bar"));
} }

[b]Web接口[/b]

假设hive部署在10.20.151.7机器上,conf/hive-default.xml文件都是默认值,那么我们直接在浏览器中输入:http://10.20.151.7:9999/hwi/ 就可以访问了

Hive的数据放在哪儿?
数据在HDFS的warehouse目录下,一个表对应一个子目录
桶与reduce
本地的/tmp目录存放日志和执行计划
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: