Hbase在Scrapy中的應用
阿新 • • 發佈:2018-11-27
網上很多教程都是使用Scrapy存資料到MongoDB,Mysql或者直接存入Excel中的,很少有存入到Hbase裡面的
前言
為什麼沒有像大多數網上那樣將資料存入到MongoDB,Mysql中呢,因為專案中使用到Hbase加上阿里雲的推薦引擎系統,
Hbase是Hadoop的一個子專案,要想用到Hbase軟體的服務,需要進行Hadoop跟zoopeer的環境的安裝。這裡就不對Hbase與Hadoop的環境搭載進行深入的探索了。
Hbase在Scrapy中的應用
1 這裡不推薦使用原生的Python連線Hbase的庫,推薦使用HappyBase
HappyBase 是 FaceBook 員工開發的操作 HBase 的 Python 庫,其基於 Python Thrift,但使用方式比 Thrift 簡單、簡潔許多,已被廣泛應用
(一) HappyBase的安裝
pip install happybase
(二) 在伺服器端(安裝Hbase軟體的機器)啟動hbase thrift服務
nohup hbase thrift -p 9090 start &
nohup是一個當遠端連線伺服器的視窗關閉時,伺服器端的命令還在執行的命令,具體可以直接搜一下
(三)在Scrapy中的settings進行配置host和table
HBASE_HOST = '192.168.22.15'
HBASE_TABLE = 'test'
這裡的hbase_table 即表名
(四)在pipelines.py中編寫Hbase入庫的Pipeline
class NovelHBasePipeline(object):
def __init__(self):
host = settings['HBASE_HOST']
table_name = settings['HBASE_TABLE']
connection = happybase.Connection(host)
table = connection.table(table_name)
self.table = table
def process_item(self, item, spider):
newsTitle = item['newsTitle']
newsSource= item['newsSource']
newsURL = item['newsUrl']
self.table.put(md5(newsTitle + newsSource).hexdigest(),
{'cf1:newsTitle ': newsTitle , 'cf1:newsSource': newsSource, 'cf1:newsUrl': newsUrl})
return item
(五)在setting.py檔案中配置Pipeline
ITEM_PIPELINES = {
'newsspider.pipelines.NewsspiderPipeline': 500,
'newsspider.pipelines.NewsHBasePipeline': 1
}
總體上,Scrapy存資料到Hbase的步驟就已經完成了。