1. 程式人生 > >Hbase在Scrapy中的應用

Hbase在Scrapy中的應用

網上很多教程都是使用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的步驟就已經完成了。