`
nanjingjiangbiao_T
  • 浏览: 2572622 次
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Hive资料整理系列 二 Hive安装及mysql做元数据库 --cloudera版本 .

 
阅读更多
Debian 上安装:

Java代码收藏代码
  1. $sudoapt-getinstallhadoop-hive

redhat/centos 上安装:

Java代码收藏代码
  1. $sudoyuminstallhadoop-hive

启动hive 控制台:

Java代码收藏代码
  1. $hive
  2. hive>

okay,可以使用hive 了 你可以参照hive 的wiki 里的介绍(很全面)玩一玩hive 的操作

http://wiki.apache.org/hadoop/Hive

玩了会儿了,该干正事了。

hive 默认带的是derby 数据库来存放创建的表信息(只存放表结构,内容放到hdfs里)

derby毕竟是嵌入式数据库,作正式应用不安全。幸好hive支持mysql,于是安装mysql

我用的是centos 安装自然很简单:

Java代码收藏代码
  1. yuminstallmysql-server

启动mysql:

/etc/init.d/mysqld start

为hadoop/hive 创建mysql用户:

Java代码收藏代码
  1. mysql
  2. mysql>CREATEUSER'hadoop'@'centos1'IDENTIFIEDBY'hadoop';
  3. mysql>GRANTALLPRIVILEGESON*.*TO'hadoop'@'centos1'WITHGRANTOPTION;
  4. mysql>exit

测试是否成功:

Java代码收藏代码
  1. su-hadoop
Java代码收藏代码
  1. mysql-hcentos1-uhadoop-p

okay 现在我们成功安装了hive 下面我们修改hive 的配置让hive使用mysql
如果你用的cloudera 的话:

vi /etc/hive/conf/hive-site.xml

然后改成这样:
Java代码收藏代码
  1. <property>
  2. <name>hive.metastore.local</name>
  3. <value>true</value>
  4. </property>
  5. <property>
  6. <name>javax.jdo.option.ConnectionURL</name>
  7. <value>jdbc:mysql://centos1:3306/hive?createDatabaseIfNotExist=true</value>
  8. </property>
  9. <property>
  10. <name>javax.jdo.option.ConnectionDriverName</name>
  11. <value>com.mysql.jdbc.Driver</value>
  12. </property>
  13. <property>
  14. <name>javax.jdo.option.ConnectionUserName</name>
  15. <value>hadoop</value>
  16. </property>
  17. <property>
  18. <name>javax.jdo.option.ConnectionPassword</name>
  19. <value>hadoop</value>
  20. </property>

okay, 现在启动 hive:

$hive

用的就是mysql 数据库存放表结构了。

你会惊奇地发现之前玩的那些表都没了,就让它们长眠在derby里吧!

集群搭建完毕,于是乎实际应用来了。

由于scribe 用的时间不长,产生的日志量还少,我们需要对过去三个月的cookie访问数据进行一个分析。

怎么办? 写个java程序吧数据库里的数据导进来(scribe之前 ,还是吧所有日志写到数据库中的,可想而知查询得多慢)

导出了15G的数据(3各月cookie访问记录)

下面就有个不能满足的需求了:要求把分析结果放回到mysql 数据库中方便管理人员查看

你懂的, linux控制台操作的hive 是不可能把结果数据放进mysql的(就我的能力而言。)只能打印到控制台或者写入文件

于是乎想到了hive 是有jdbc 客户端的

首先启动hive server:

Java代码收藏代码
  1. hive--servicehiveserver50031(端口号)

好了服务启动了,等待客户端连接并执行客户端代码。

hive 支持多种客户端,jdbc odbc php python 等等 想了解的可以去wiki 看看。

okay 用eclipse 写hive 吧~ 这回熟悉了吧

在eclipse 中创建一个新的javaproject

把hive/lib 下的所有jar copy到项目的lib目录下 另外再加一个mysql-connector-5.*.*.jar 用来把数据写入mysql

废话不说 ,贴代码:

Java代码收藏代码
  1. packagecom.hive;
  2. importjava.sql.SQLException;
  3. importjava.sql.Connection;
  4. importjava.sql.ResultSet;
  5. importjava.sql.Statement;
  6. importjava.sql.DriverManager;
  7. publicclassHiveJdbcClient{
  8. privatestaticStringdriverName="org.apache.hadoop.hive.jdbc.HiveDriver";
  9. /**
  10. *@paramargs
  11. *@throwsSQLException
  12. */
  13. publicstaticvoidmain(String[]args)throwsSQLException{
  14. try{
  15. Class.forName(driverName);
  16. }catch(ClassNotFoundExceptione){
  17. //TODOAuto-generatedcatchblock
  18. e.printStackTrace();
  19. System.exit(1);
  20. }
  21. Connectioncon=DriverManager.getConnection(
  22. "jdbc:hive://192.168.3.201:50031/defalt","hadoop",
  23. "masterninja");
  24. Statementstmt=con.createStatement();
  25. ResultSetres=stmt
  26. .executeQuery("selectcookie_id,COUNT(cookie_id)countfromcookie_infowhereuid=5779665groupbycookie_idORDERBYcountDESClimit20");
  27. while(res.next()){
  28. System.out.println(res.getString(1)+""+res.getInt(2));
  29. }
  30. }
  31. }

我这里只是把结果集打印出来了 没有写入mysql (贴的只是测试代码)

写好后运行就成。如果您公司的服务器与外网是隔离的(我们公司就是)

就把程序打个jar 上传到服务器集群中的一台上(起码能访问到hiveserver 的)

运行java -jar XXX.jar

你会发现hive server 的那台机器开始在linux控制台打印了...

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics