主頁 > 資料庫 > Hadoop卡在減少67%上(只有大資料)。

Hadoop卡在減少67%上(只有大資料)。

2021-10-22 07:34:09 資料庫

我是Hadoop和Linux的初學者。

問題所在

  • 當輸入的資料很大時,Hadoop reduce卡住了(或移動得很慢)。
  • 當輸入的資料很大時(例如600k行或6M行),Hadoop reduce卡住了(或移動得非常非常慢),盡管Map和Reduce函式相當簡單,2021-08-08 22:53:12,350 INFO mapreduce.Job: map 100% reduce 67%.
  • 在Linux的系統監視器中,我可以看到當reduce達到67%的時候,只有一個CPU保持100%的運行,其余的都在睡覺:)請看這個圖片
  • 成功運行的內容

  • 我用小的輸入資料(600行)快速成功地運行了MapReduce作業,沒有任何問題map 100% reduce 100%, 2021-08-08 19:44:13,350 INFO mapreduce.Job: map 100% reduce 100%
  • Mapper (Python)

    #!/usr/bin/env python3import sys
    from itertools import islice
    from operator import itemgetter
    
    def read_inputfile)。
        # read file except first line.
        for line in islice(file, 1, None):
            # 將該行分割成單詞yield line.split(' , ')
    
    def main(separator=' ') 。
        
        # 輸入來自STDIN(標準輸入)。
        data = read_input(sys.stdin)
        
        for words in data:
            
            # 對于每一行我們只取需要的列。
            data_row = list( itemgetter(*[1, 2, 4, 5, 6, 9, 10, 18] ( words))
            data_row[7] = data_row[7].replace('
    ', '')
    
            # 從第一列中抽取年份和月份號碼來創建# key that will send to reducer[/span].
            date = data_row[0].split(' '/span>)[0].split('-'/span>)
            key = str(date[0])   '_'   str(date[1] )
            
            # value that will send to reducer[/span].
            value = ','.join(data_row)
            
            # print here will send the output pair (key, value)
            print('%s%s%s' % (key, separator, value)
            
    if __name__ == "__main__"/span>:
        main()
    

    Reducer (Python)

    #!/usr/bin/env python3from itertools import groupby
    from operator import itemgetter
    import sys
    import pandas as pd
    import numpy as np
    import time
    
    def read_mapper_outputfile)。
        for line in file:
            yielddef main(separator=' ') 。
        
        all_rows_2015 = []
        all_rows_2016 = []
        
        start_time = time.time()
        
        names = ['tpep_pickup_datetime', 'tpep_dropoff_datetime', 'traffic_distance', 
                 'pickup_longitude'/span>, 'pickup_latitude'/span>, 'dropoff_longitude'/span>, 
                 'dropoff_latitude', 'total_amount']
        df = pd.DataFrame(columns=names)
        
        # 輸入來自STDIN(標準輸入)。
        data = read_mapper_output(sys.stdin)
        for words in data:
    
            # get key & value from Mapper
            key, value = words.split(separator)
            row = value.split(',')
    
            # 將屬于2015年的資料與屬于2016年的資料進行分割if key  in '2015_01 2015_02 2015_03': 
                all_rows_2015.append(row)
                if len(all_rows_2015) >=10:
                    df=df.append(pd.DataFrame(all_rows_2015, columns=names))
                    all_rows_2015 = []
            elif key in '2016_01 2016_02 2016_03':
                all_rows_2016.append(row)
                if len(all_rows_2016) >=10:
                    df=df.append(pd.DataFrame(all_rows_2016, columns=names))
                    all_rows_2016 = []
        
        print(df.to_string())
        print("-- %s seconds ---" % (time.time() - start_time)
    
    if __name__ == "__main__"/span>:
        main()
    

    更多資訊

    我在安裝在VMware上的Hadoop v3.2.1上使用Linux,在Python中運行MapReduce作業。

    數字的Reduce作業:

    行數。 ??< <
    輸入資料大小減少作業時間
    ~98 Kb 600行
    600行? ~0.1秒 ~0.1秒 良好
    良好





    ~953 Kb
    ~953 Kb 6,000行
    6,000行 ~1秒 ~1秒 良好
    良好





    ~9.5 Mb
    9.5 Mb 60,000行
    60,000行 ~52秒 ~52秒





    ~94 Mb
    ~94 Mb 60萬行
    60萬行? ~5647 sec (~94 min) 非常慢
    非常慢?
    ~11 Gb ~11 Gb? 76,000,000行 76,000,000行impossible

    目標是在 ~76M 行的輸入資料上運行,如果還有這個問題,那是不可能的。

    uj5u.com熱心網友回復:

    "當減少到67%時,只有一個CPU保持100%的運行,其余的都在睡覺"--你有偏差。一個鍵的值遠遠多于其他鍵的值。

    uj5u.com熱心網友回復:

    我在這里看到了一些問題。

  • 在reduce階段,你沒有做任何總結,只是適合2015Q1和2015Q2 - reduce應該用于總結,比如按鍵分組或基于鍵做一些計算。

    如果您只需要過濾資料,請在地圖階段進行過濾以節省周期(假設您對所有資料進行了計費):

  • 你在資料框架內的 RAM 中存盤了很多東西。由于你不知道鍵有多大,你正在經歷trashing。這與重鍵相結合,將使您的行程在一段時間后對每個 DataFrame.append 進行頁面錯誤處理。

  • 有一些修復方法:

  • 你真的需要一個減少階段嗎?由于你只是在過濾2015年和2016年的前三個月,你可以在地圖階段做這個。如果你稍后需要還原,這將使程序進行得更快一些,因為還原階段需要的資料更少。

    def main(separator=' '/span>)。
    
        # 輸入來自STDIN(標準輸入)。
        data = read_input(sys.stdin)
    
        for words in data:
    
            # 對于每一行我們只取需要的列。
            data_row = list( itemgetter(*[1, 2, 4, 5, 6, 9, 10, 18] ( words))
    
            # 首先找出你是否在過濾這個資料# 從第一列中抽取年份和月號來創建# key that will send to reducer[/span]。
            date = data_row[0].split(' '/span>)[0].split('-'/span>)
    
            # 篩選出if (date[1]  in [1,2, 3]) and (date[0] in[2015, 2016] )。)
    
               # 我們保留這個資料。計算key并清理data_row[7]
    
               key = str(date[0])   '_'   str(date[1] )
               data_row[7] = data_row[7].replace('
    ', '')
    
               # value that will send to reducer[/span]。
               value = ','.join(data_row)
    
               # print here will send the output pair (key, value)
               print('%s%s%s' % (key, separator, value)
    
  • 在還原程序中,盡量不要在記憶體中存盤資料。因為你正在過濾,所以一旦有了結果,就立即列印()。如果你的源資料沒有被排序,reduce將作為一種方式,將來自同一個月的所有資料放在一起。

  • 你的 reduce 階段有一個錯誤:你正在失去 number_of_records_per_key modulo 10,因為你沒有將結果追加到資料框架中。不要追加到資料框架中,并盡快列印結果。

  • 轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/330233.html

    標籤:

    上一篇:如何在ggplot2中為每條geom_line添加標簽和點?

    下一篇:Ionic使模型中的一個欄位的型別成為其他兩個模型的選擇

    標籤雲
    其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

    熱門瀏覽
    • GPU虛擬機創建時間深度優化

      **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

      uj5u.com 2020-09-10 06:09:13 more
    • 可編程網卡芯片在滴滴云網路的應用實踐

      **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

      uj5u.com 2020-09-10 06:10:21 more
    • 滴滴資料通道服務演進之路

      **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

      uj5u.com 2020-09-10 06:11:05 more
    • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

      **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

      uj5u.com 2020-09-10 06:11:29 more
    • MPP (Massively Parallel Processing)大規模并行處理

      1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

      uj5u.com 2020-09-10 06:11:41 more
    • 滴滴資料倉庫指標體系建設實踐

      **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

      uj5u.com 2020-09-10 06:12:52 more
    • 單表千萬行資料庫 LIKE 搜索優化手記

      我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

      uj5u.com 2020-09-10 06:13:25 more
    • 滴滴Ceph分布式存盤系統優化之鎖優化

      **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

      uj5u.com 2020-09-10 06:14:51 more
    • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

      之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

      uj5u.com 2020-09-10 06:14:59 more
    • 爬蟲日志監控 -- Elastc Stack(ELK)部署

      傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

      uj5u.com 2020-09-10 06:15:05 more
    最新发布
    • day02-2-商鋪查詢快取

      功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

      uj5u.com 2023-04-20 08:33:24 more
    • MySQL中binlog備份腳本分享

      關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

      uj5u.com 2023-04-20 08:28:06 more
    • day02-短信登錄

      功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

      uj5u.com 2023-04-20 08:27:27 more
    • 快取與資料庫雙寫一致性幾種策略分析

      本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

      uj5u.com 2023-04-20 08:26:48 more
    • sql陳述句優化

      問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

      uj5u.com 2023-04-20 08:26:35 more
    • 云時代,MySQL到ClickHouse資料同步產品對比推薦

      ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

      uj5u.com 2023-04-20 08:26:29 more
    • sql陳述句優化

      問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

      uj5u.com 2023-04-20 08:25:13 more
    • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

      Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

      uj5u.com 2023-04-20 08:24:54 more
    • day02-2-商鋪查詢快取

      功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

      uj5u.com 2023-04-20 08:24:03 more
    • day02-短信登錄

      功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

      uj5u.com 2023-04-20 08:23:11 more