实验环境
centos 7; pyspark 2.4.3;
在访问Hive数据仓库之前,需要我们配置hadoop中一些组件,使得我们可以顺利 访问hdfs,hive(可以通过hadoop -h
, hive
进行测试是否配置成功)。其实hive只是用作数据查询,类似于sql语句,利用hive查询数据时需要借助hadoop中的核心组件MapReduce和Hdfs,它使用MapReduce中的map和reduce方法进行数据处理,而查询的数据来自于hdfs。
hadoop 中涉及到许多组件,东西蛮多的,我最近也在学习这一块。本来是想边学边整理写个系统性博客教程,后来发现已经有了一个比较完善的学习教程了。这里推荐给学习大数据的同学,厦门大学数据库实验室。在慕课网课网易课堂有相关视频,而且还是免费的,老师讲的都是一些基础性东西,很容易懂。
相关代码及解释
为了便于理解,先截张图看下集群上数据的存储格式:
下面的程序如上图所示,设定起始时间,终止时间,利用时间戳来筛选数据。
from pyspark.sql import HiveContext
from pyspark import SparkContext
sc = SparkContext(appName='readHiveDns')
hive_context = HiveContext(sc)
# return start_time and end_time from front
start_time = 1560676040
end_time = 1560676049
hive_context.sql('use xidian')
sql_hive = " SELECT dns_qry_name as dns FROM dns " \
"WHERE {0} <= unix_tstamp and unix_tstamp <= {1} " \
"LIMIT 100".format(start_time, end_time)
readDns = hive_context.sql(sql_hive)
# 将筛选的数据转换为list格式,下面这一步将会从hdfs中拿去数据进行转换
rows = readDns.collect()
saveFilePath = '/usr/readHive1.txt'
f = open(saveFilePath, 'w')
for row in rows:
f.write(row[0] + '\n')
f.close()
通过上面的程序,便可以将从hive里读取的数据存储在本地的文本中。打开终端,输入下面命令查看:
[root@web ~]# cat /usr/readHive1.txt
cn.unionpay.com.wscdns.com
tools.3g.qq.com
is1-ssl.mzstatic.com
sc.xidian.edu.cn
zhizi.qq.com
data.bilibili.com
WWW.JD.COM
www.jd.com
login.live.com
www.sina.com.cn
thepiratebay.org
www.taobao.com
p.qlogo.cn
cpro.baidustatic.com
annalect.com.cn
欢迎关注我的微信公众号,谈风月之余谈技术