自己动手搭建一个简单的基于Hadoop的离线分析系统之三——hive

本文介绍了如何使用hive搭建离线分析系统,包括数据库设计、SQL脚本、shell脚本的修改,以及对北京市、上海市、天津市、重庆市各区/县房租的平均价格进行统计分析。系统采用外部表存储数据,利用MapReduce进行查询,适用于批量数据统计。文章总结了系统的应用和潜在的改进方向。
摘要由CSDN通过智能技术生成

自己动手搭建一个简单的基于Hadoop的离线分析系统之三——hive

在上一篇《自己动手搭建一个简单的基于Hadoop的离线分析系统之二——HDFS》文章中介绍了整个系统的数据存储,这一篇文章从hive入手,介绍整个离线分析系统的数据分析。

一、数据库设计

  首先需要明确的是,hive利用HDFS存储数据,利用MapReduce查询数据,虽然他具有sql数据库的外表,但应用场景完全不同,最大的不同点是,hive并不是一个类似于MySQL的关系型数据库,他不支持外键,因此hive只适合用来做批量数据统计分析,hive中常用的表模型有:
 table:普通表,在HDFS中表现所属数据库目录下一个文件夹;
 external table:外部表,与table类似,不过其数据存放位置可以在任意指定路径(本地/集群),且删除表不会对源数据造成影响;
 partition:分区表,在HDFS中表现为table目录下的子目录,其中分区所依赖的字段不再作为该表的键;
 bucket:分桶表,在HDFS中表现为同一个表目录下根据hash散列之后的多个文件,类似于MapReduce中的Partitioner,各个桶中的数据交由不同的reduce处理和汇总。
虽然所有信息来源于不同的地区,但是这些文件都采用同一种结构来保存数据,因此本系统使用的是外部表,并将集群中dump_path目录下的所有文件中的数据汇总到一张表上进行显示。

二、sql脚本

--切换数据库
use ${hiveconf:database_name};
--创建表并导入数据
create external table if not exists ${hiveconf:table_name}(
province string,
city string,
country string,
price int,
size int,
number int,
detail_address string,
title string)
row format delimited fields terminated by '\t'
location "${hiveconf:localdata_path}";

三、修改后的shell脚本

#! /bin/bash

#set java env
export JAVA_HOME=/usr/local/jdk1.7.0_80
#export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=$PATH:$JAVA_HOME/bin

#set hadoop env
export HADOOP_HOME=/home/liang/apps/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

#set hive env
export HIVE_HOME=/home/liang/apps/hive-1.2.1
export PATH=$PATH:$HIVE_HOME/bin

#源数据存放路径以及错误日志
data_file="/home/liang/simple_log_analysis/srcdata/"
areas=('sh' 'tj' 'bj' 'cq')
error_log="/home/liang/simple_log_analysis/errorlog.txt"
code_file="/home/liang/simple_log_analysis/pachong.py"
fail_dump_path="/home/liang/simple_log_analysis/failed_dump/"

#爬取数据并存储
for area in ${areas[@]}
do 
	#python3 $code_file -h
	date '+%c' >> $error_log
	python3 $code_file -a $area -p $data_file 2>>$error_log
	if [ $? -eq 0 ]
	then
		echo "爬取信息成功"
	else
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值