2865 0

第55课:hive实战 [推广有奖]

  • 1关注
  • 8粉丝

硕士生

34%

还不是VIP/贵宾

-

威望
0
论坛币
305 个
通用积分
0
学术水平
5 点
热心指数
14 点
信用等级
2 点
经验
23002 点
帖子
73
精华
0
在线时间
135 小时
注册时间
2016-2-27
最后登录
2016-9-11

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

一、hive 的历史价值

1)hive是hadoop上的killApplication,hive是hadoop上的数据仓库,hive同时兼具有数据仓库中的存储引擎和查询引擎的作用,而sparksql是一个更加出色和高级的查询引擎。所以在现在企业级应用中,sparksql+hive成为了业界使用大数据最为高效和流行的趋势。

2)hive是facebook推出的。只要是为了不懂java代码编码的人员也能通过sql来驾驭hadoop集群进行分布式数据的多维度分析,甚至可以通过web界面来直接操作hive(通过hive来驾驭hadoop),这对于市场营销人员,系统管理员,数据分析至关重要。

3)hive 的核心把hive 自己的sql语言即hql语言翻译为mapreduce代码,然后交给hadoop集群执行,也就是说hive本身是一个单机版的软件!!!

4)由于是通过写hql来完成业务需求的,所以相对于编写mapreduce而已非常的方便简易和灵活,能够非常轻易的满足业务的需求和多变的场景。

5)Hive几乎存在一切使用大数据的公司中!


二、Hive的本质到是什么?

1)Hive是分布式数据仓库,同时又是查询引擎,所以Spark SQL取代只是Hive查询引擎,在企业实际生产环境下Hive + Spark SQL是目前最为经典的数据分析组合;

2)Hive本身就是一个简单单机版本的软件,主要负责:

a)把HQL翻译成Mapper(s)-Reducer-Mapper(s)的代码; 并且可能产生很多MapReduce的Job;

b)把生产的MapReduce代码及相关资源打包成为Jar并发布到Hadoop集群中且进行运行(这一切都是自动的)。


三、hive 的架构设计

1)Hive的架构图

OU}NCOF4C0](N%Y(H2~~UXL.png

2)Hive中的数据只是元数据,所谓元数据就是hive要操作数据的描述信息,该metastore默认存储在derby中,但是derby不能被生成环境下的多用户去使用,所以生产环境下一般最常用的是mysql来存储hive 的元数据。

3)Hive要操作的数据是由hive 的配置文件决定的。在生产环境下该数据位于hdfs 上(其实也就是hdfs上的普通文件而已,只不过是按照hive的方式组织一下)。

4)从hive的角度来看,数据就是一张张的table,我们的操作就是基于sql来多维度的查询table。

5)人们一直努力用hive来取代传统的数据仓库,但是以失败告终。因为hive太慢啦!!!所以业界目前趋势上黄金组合是hive(数据仓库的存储引擎)+sparksql(分析查询引擎)。

6)Hql会被hive解释,优化并生成查询计划,一般情况下查询计划会被转化为mapreduce任务。

7)但是形如select * from table不会转化成为mapreduce 任务。

8)Hive 有索引吗? 没有!!!


四、Hive的安装实战

Hive只在一个节点上安装即可

1)上传tar包

2)解压

  1. [root@yarn tools]# mkdir -p /usr/local/hive
  2. [root@yarn tools]# tar -zxf apache-hive-1.2.1-bin.tar.gz -C/usr/local/hive/
  3. [root@yarn tools]# cd /usr/local/hive/
复制代码

3)更名

  1. [root@yarn hive]# # mv apache-hive-1.2.1-bin apache-hive-1.2.1
复制代码

4)配置mysql 5.6

1)

  1. rpm-qa | grep mysql
复制代码

B@EQX3`X{C7_H]08B)TH4L4.png

2)卸载

  1. [root@yarnhive]# rpm -e apr-util-mysql-1.3.9-3.el6_0.1.x86_64--nodeps // --nodep 强制卸载
  2. [root@yarn hive]# rpm -e mysql-libs-5.1.71-1.el6.x86_64 –nodeps
复制代码

3)安装mysql

  1. [root@yarn hive]# yum install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm -y
  2. [root@yarn hive]#yum install mysql mysql-devel mysql-servermysql-utilities
复制代码

4)启动mysql

  1. [root@yarn hive]#/etc/init.d/mysqldstart
复制代码

HINYU6H}3))E(Z$YE`[$`4K.png

  1. [root@yarn hive]# mysql -uroot -p //默认密码是空 回车就可以进去
复制代码

IN@YW~4L[O44IFOEQU(MET6.png

5)修改mysql的密码(注意:删除匿名用户,允许用户远程连接)

  1. [root@yarn hive]# /usr/bin/mysql_secure_installation
复制代码

`]Y8(UQVD)T3YHP2G}JU.png

点击回车

N)I_IMU28JF@]BI$(MC211K.png

设置新密码

N`4]{$C43JR0AP`QA~LUFVC.png

6)登录mysql 用自己设置的新密码

  1. mysql –uroot -p
复制代码

G91LNYE]NSQ`(TEM_BO(8{B.png

7)查看数据库

  1. Show databases;
复制代码

ILY3Q@X4[K1ZXD$DSL4VCQ7.png

8)修改mysql的用户登录权限,允许远程连接

  1. mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'citicbank' WITH GRANTOPTION;
  2. mysql> FLUSH PRIVILEGES;
  3. mysql> select user,host frommysql.user;
复制代码

5V{][XV81Z{~@O8PS2V{K4O.png

9)用Navicat for MySQL 测试下远程连接


五、配置Hive

1)修改 hive-site.xml

  1. mv hive-default.xml.template hive-site.xml
复制代码

修改hive-site.xml(删除所有内容,只留一个<property></property>)
添加如下内容:

  1. <property>
  2. <name>javax.jdo.option.ConnectionURL</name>
  3. <value>jdbc:mysql://10.0.0.158:3306/hive?createDatabaseIfNotExist=true</value> //也可以用主机名
  4. <description>JDBC connect string for a JDBC metastore</description>
  5. </property>
  6. <property>
  7. <name>javax.jdo.option.ConnectionDriverName</name>
  8. <value>com.mysql.jdbc.Driver</value>
  9. <description>Driver class name for a JDBC metastore</description>
  10. </property>
  11. <property>
  12. <name>javax.jdo.option.ConnectionUserName</name>
  13. <value>root</value>
  14. <description>username to use against metastore database</description>
  15. </property>
  16. <property>
  17. <name>javax.jdo.option.ConnectionPassword</name>
  18. <value>citicbank</value> // 用户授权密码
  19. <description>password to use against metastore database</description>
  20. </property>
复制代码

2)修改hive-env.sh

  1. [root@yarn hive]# mv hive-env.sh.template hive-env.sh
  2. [root@yarn conf]# vim hive-env.sh
复制代码

在最后一行添加以下内容

  1. export HIVE_HOME=/usr/local/hive/apache-hive-1.2.1/
  2. export HIVE_CONF_DIR=/usr/local/hive/apache-hive-1.2.1/conf
复制代码

3)修改hive-config.sh

  1. [root@yarn conf]# vim ../bin/hive-config.sh
复制代码

在最后一行添加以下内容

  1. export HADOOP_HOME=/usr/local/hadoop/hadoop-2.6.0-cdh5.5.1/
  2. export SPARK_HOME=/usr/local/spark/spark-1.6.0-bin-hadoop2.6/
  3. exportJAVA_HOME=/usr/local/jdk1.8.0_60/
复制代码

4)下载驱动包(mysql-connector-java-5.1.35.tar.gz) 放入usr/local/hive/apache-hive-1.2.1/lib/


六、启动hive

1)先启动hadoop的hdfs 和yarn,mysql在启动hive。启动成功如下图所示

U[KVP{_[1IQ(LH2[R(UAZ1E.png

2)创建表

Hive的表有两种基本类型:一种内部表(这种表数据属于Hive本身,言外之意是如果原来的数据在HDFS的其它地方,此时数据会通过HDFS移动到Hive数据仓库所在的目录,如果删除Hive中的该表的话数据和元数据均会被删除)另外一种属于外部表(这种表数据不属于Hive数据仓库,元数据中会表达具体数据在哪里,使用的时候和内部表的使用是一样的,只是如果通过Hive去删除的话,此时删除的只是元数据,本没有删除数据本身);

  1. hive> create table a1(a string,b int);
  2. OK
  3. Time taken: 1.875 seconds
  4. hive> create table a2(a string,b int);
  5. OK
  6. Time taken: 0.088 seconds
复制代码

3)查看表

  1. Show tables;
复制代码

七、使用hive 操作搜索引擎数据实战

1)将搜狗实验室的数据放入到hdfs 中

  1. hadoop dfs -mkdir  /library/sogou
  2. hadoop dfs -put  ./sogouQ3.txt  /library/sogou
复制代码

2)在hive 中创建表

  1. create table sogouQ3(ID STRING,WEBSESSION STRING,WORDSTRING,S_SEQ INT,C_SEQ INT,WEBSIT STRING) ROW FORMAT DELIMITED FIELDSTERMINATED BY '\t' LINES TERMINATED BY '\n';
复制代码

3)将sogouQ3.txt 加载到表sogouQ3 中

  1. LOAD DATA INPATH 'library/sogou/sogouQ3.txt' INTO TABLEsogouQ3
复制代码

4)在hive 中查询表sogouQ3

  1. select count(*) from sogouQ3
  2. select count(*) from SOGOUQ2 where S_SEQ=1 and C_SEQ=1and  WEBSITE like '%baidu%';
复制代码

5)创建外部表

  1. CREATE EXTERNAL TABLE SOGOUQ2(ID STRING,WEBSESSIONSTRING,WORD STRING,S_SEQ INT,C_SEQ INT,WEBSIT STRING) ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE LOCATION '/library/sogou/sogouQ2EXTERNAL';
复制代码

将数据放入hdfs 中

  1. hadoop dfs -put ./sogouQ1.txt  /library/sogouQ1external
复制代码

查询记录的总条数

  1. select count(*) from SogouQ1 where s_seq = 1 and c_seq=1
复制代码

找出排名前5位的内容

  1. select word,count(word) as countword  from sogouQ1 group by word  order by countword desc limit 5;
复制代码

6)tdDate.txit 字段描述:分别为日期、年月、年、月、日、周几、第几周、季度、旬、半月。

tbstock.txt 字段描述:订单号,交易的位置, 交易的日期

tbStockdetail.txt 字段描述:订单号、行号、货品、、“”、数量、金额        

在hvie中创建3张表

  1. CREATE TABLE tbDate(dateIDstring,theyearmonth string,theyear string,themonth string,thedatestring,theweek string,theweeks string,thequot string,thetendaystring,thehalfmonth string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINESTERMINATED BY '\n' ;
  2. CREATE TABLE tbStock(ordernumber STRING,locationid string,dateIDstring) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
  3. CREATE TABLE tbStockDetail(ordernumber STRING,rownum int,itemidstring,qty int,price int ,amount int) ROW FORMAT DELIMITED FIELDS TERMINATED BY',' LINES TERMINATED BY '\n' ;
复制代码

将数据load到tbDate表中

  1. load data local inpath '/home/hadoop/tbDate.txt'  into table tbDate;
复制代码

将数据load 到tbStock表中

  1. hadoop dfs -put  tbStock.txt  /library
  2. load data inpath 'library/tbstock.txt' into table tbStock
复制代码

在HDFS上如果直接把数据放入Hive数据仓库的话,会把数据直接剪切过去

将数据load 到tbStockDetail表中

  1. load data local inpath '/home/hadoop/tbStockDetail.txt'  into table tbStockDetail;
复制代码

统计季度销售前10

  1. select c.theyear,c.thequot,sum(b.amount) assumofamount from tbStock a,tbStockDetail b,tbDate c wherea.ordernumber=b.ordernumber and a.dateid=c.dateid group by c.theyear,c.thequotorder by sumofamount desc limit 10;
复制代码

统计销售额大于20000

  1. select a.ordernumber,sum(b.amount) assumofamount from tbStock a,tbStockDetail b where a.ordernumber=b.ordernumbergroup by a.ordernumber having sumofamount>200000;
复制代码

年度最畅销的商品

  1. select distinct  e.theyear,e.itemid,f.maxofamount from (selectc.theyear,b.itemid,sum(b.amount) as sumofamount from tbStock a,tbStockDetailb,tbDate c where a.ordernumber=b.ordernumber and a.dateid=c.dateid group byc.theyear,b.itemid) e , (select d.theyear,max(d.sumofamount) as maxofamountfrom (select c.theyear,b.itemid,sum(b.amount) as sumofamount from tbStocka,tbStockDetail b,tbDate c where a.ordernumber=b.ordernumber anda.dateid=c.dateid group by c.theyear,b.itemid) d group by d.theyear) f wheree.theyear=f.theyear and e.sumofamount=f.maxofamount order by e.theyear;
复制代码




注:本学习笔记来自DT大数据梦工厂        微信公众号:DT_Spark        每晚8点YY永久直播频道:68917580


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Hive HIV Installation Application connection Spark scala DT_Spark 大数据

已有 1 人评分论坛币 收起 理由
daazx + 10 精彩帖子

总评分: 论坛币 + 10   查看全部评分

本帖被以下文库推荐

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-2 10:27