實驗環境
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
歡迎關注我的微信公衆號,談風月之餘談技術