大資料爬坑收錄
爬出過的坑
大資料運維過程就是一個踩坑的過程。如下分享一些踩過的坑,以供參考。
Hive
* hive的udf使用全名如select mydatabase.myfun(id) from mytable * hive.hadoop.supports.splittable.combineinputformat引數為true時在textfile的gzip壓縮下可以合併檔案。 * hive中export HIVE_OPTS=1G可以控制beeline的記憶體。 * filesinkoperator在寫bucketfile時,如果相關安裝目錄許可權異常可能無法載入lib*.so檔案從而導致寫檔案時丟擲filesystem closed異常 java.lang.unsupporttedopeationException: Currently the writer can only accept ByteArrayWritable 通常是rc表的serde設定問題。可使用lazyBinaryCOlumnSerde或者ColumnarSerde * 不經過回收站的刪除表 drop table mytable purge. * select count(distinct id) from mytable只有一個reduce,可以考慮改為 select count(*)from select distinct id from mytable * beeline出現operation cancelled的的原因有: 1) 客戶端full gc 2) 服務端fullgc 3)客戶端服務端網路斷開 4) 服務端縣城執行耗時超過客戶端的sockettimeout時間,出發客戶端主動關閉 * hivesql處理完後的資料的avgsize小於16M的情況下,會觸發mr的merge操作。 * hive的sql對hdfs的操作很重。單個load操作,可能觸發20次的操作。對效能影響大 * 在執行beeline時新增--verbose=true引數可列印更多資訊 * 執行sql時,hive.metastore.client.socketTimeout出現連線資料庫timeout,如果是表分割槽過多,可以考慮後設資料中手動刪除表: select *from tbls where TBL_NAME="tableToDelete" (取出表的"id") delete from partition_key_values where part_id in select part_id from partitions where tbl_id = "id" delete from partition_params where partid in select part_id from partitions where tbl_id = "id" delete from partition where tbl_id = "id"* 執行union all的操作可能導致stackoverflow * 處理資料時cant be cast的異常同城是資料異常導致
Spark
* driver節點需要配置所有hbase程式的hostname和ip對應關係,否則可能出現無法解析節點導致訪問異常 creating new stage failed due to exception * spark讀取parquet表時,每個檔案都需要和hdfs互動,先訪問到備namenode情況下對效能影響較大 * spark或者hbasetoken的使用者需要有hbase:meta表的exec許可權 * hivecontext不能重複建立 * spark的beeline則需要透過spark_driver_memory來設定 * 多個欄位的group by 易引發oom * spark寫hdfs的應用應保證可重入 * kafka單挑訊息過大可能引發classnotfoundexception : kafka.common.failedtosendmessag或者sockettimeoutexception can't find leader offset for set 可考慮調整"socket.request.max.bytes"socket.receive.buffer.bytes, socket.send.buffer.bytes, replica.socket.receive.buffer.bytes * spark應用打包時,不應包含除應用的包之前的jar包 * Thriftserver的預設handler執行緒是500* spark的單個task不能支援2G以上的 * 值為空的配置或者boolean型別(true或者false)時,單詞拼錯的情況下可能導致driver啟動異常 * 執行union all的操作可能導致stackoverflow * 在eventlog指定的目錄寫滿時(hdfs單個目錄的檔案數限制在104萬),可能導致spark應用無法提交 * 執行structed Streaming 丟擲異常 java.lang.classNotFoundException : kafka.DefaultSource,是由於缺少jar包,spark-sql-kafka-*_*.jar導致serviceloader載入時,找不到kafkasource,從而引發異常 * Spark應用開發需要匯入import org.apache.spark.sql.functions._ 以及import spark.implicits._ 否則在編譯/執行時可能丟擲各種異常(如: value $ is not a member of StringContext ) * 開源Spark在hdp的yarn叢集中執行原生頁面的executor頁面無法開啟,需要將HADOOP_CONF_DIR/YARN_CONF_DIR下的yarn-site.xml檔案中的yarn.timeline-service.enabled引數設定為false,可參考* 開源Spark在hdp的yarn叢集中執行找不到executorLauncher類, 可參考* Spark的安全配置(principal和keytab檔案)可以透過如下方式傳入: 1) --principal和--keytab的方式傳入 2)在spark-defaults.conf配置檔案中配置spark.yarn.principal和spark.yarn.keytab 3) 在提交命令列時,傳入--properties-file指定配置檔案,並配置spark.yarn.principal和spark.yarn.keytab * Structed Streaming基於eventtime的訊息,需要該欄位是timestamp型別,格式應當是"yyyy-mm-dd HH:mm:ss" 如果設定微微“yyyymmdd HH:mm:ss” 可能導致接收到資料後無法完成後續處理,從而無法得到結果。 * Structed streaming 如果是從kafka消費資料,應用在多個writestream時,每個writestream分別從kafka獲取訊息 * Structed Streaming 應用在UI頁面顯示不連續的問題可參考()* 安全場景下提交Spark應用丟擲如下異常: org.apache.hadoop.yarn.exceptions.YarnException: Failed to submit application_1524902307937_0021 to YARN : Failed to renew token: Kind: HDFS_DELEGATION_TOKEN, Service: ha-hdfs:paasjq, Ident: (HDFS_DELEGATION_TOKEN token 69 for spark) 此異常是rm在handlesubmitApplication時從nn中獲取token失敗,導致應用提交異常。可重啟yarn規避該問題 * Structed Streaming 應用執行時,丟擲異常 “Exception in thread "main" java.lang.NoSuchMethodError: net.jpountz.lz4.LZ4BlockInputStream.<init>(Ljava/io/InputStream;Z)V at org.apache.spark.io.LZ4CompressionCodec.compressedInputStream(CompressionCodec.scala:122)”原因是應用在執行時對資料解碼(反序列化)時,使用了預設的lz4解壓縮演算法,在spark-core中依賴的lz4版本是1.4,而kafka-client中依賴的lz4版本是1.3版本,在生成解壓器時,版本不相容異常。 解決方法可參考網上修改原始碼解決,也可透過設定"spark.io.compression.codec","snappy"或其他壓縮演算法規避。鑑於修改原始碼重新打包替換較為繁瑣,建議設定其他壓縮演算法規避。 * Sparkstreaming應用在jobgenerator階段丟擲如下異常:“Error generating jobs for time”會呼叫到reprotError方法,進而設定error=e,將導致streamingContext.awaitTermination方法退出,進而結束應用 * SparkStreaming應用在job異常時,jobScheduler的handleJobCompletion方法,呼叫reportError方法,進而設定error=e,將導致streamingContext.awaitTermination方法退出,進而結束streaming應用。 * spark應用在遇到磁碟異常的情況下,預設會將task的retry同樣傳送到該container程式內執行,連續失敗後,將導致task失敗次數超限進而退出。在1.*版本可以透過設定spark.scheduler.executorTaskBlacklistTime禁止task的在一定時間內重新分配在之前執行異常的container內。在2.*版本中可透過設定spark.blacklist.enabled開啟黑名單機制並配置相關引數即可(可參考)* 編譯高版本Spark原始碼(2.*以上版本),丟擲異常“Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.2:compile (scala-compile-first)”,需要將本地scala版本從2.10版本調整至2.11版本
Flink
* flink開發過程中需要匯入org.apache.flink.streaming.api.scala._ 否則可能執行時某些轉換異常
Yarn
* Yarn透過配置獲取叢集總資源(cpu/mem/網路/io)資訊(與實際無關) * Yarn叢集的資源狀態(cpu/mem使用)和主機的cpu/mem消耗無直接關係(Yarn只負責分配資源給應用,不* 管應用如何使用) * yarn透過app申請資源,根據使用者,以及剩餘資源判斷是否接受和執行app * Yarn根據配置的粒度以及app的申請分配資源 * Yarn只負責分配資源給應用,不管應用如何使用 * yarn監控container程式的memory來判斷container使用資源是否超限 * Yarn排程策略考慮vcore和不考慮vcore的策略 * score的概念只是用來劃分粒度,控制叢集能啟動的container數目 * Yarn只負責分配資源給應用(container),無法管控container如何使用資源(Yarn管理記憶體的使用,但無法直接cpu。cpu可透過cgroup控制)
Kafka
* 某些groupid的consumer無法消費資料,而其它groupid的consumer可以消費,可能是Kafka內部的consumer_offset的topic出現異常 * 消費kafka小時時,consumer端一直丟擲如下異常“NetworkClient: Bootstrap broker ***:6667 disconnected”異常,此時服務端丟擲異常如下:“ERROR Closing socket for *****:6667-******:53026 because of error (kafka.network.Processor)kafka.network.InvalidRequestException: Error getting request for apiKey: 3 and apiVersion: 2”,通常出現改現象端原因是消費端和kafka服務端端版本不匹配 。如客戶端使用0.10.1.10服務端時0.10.0.1. * 安全叢集下消費kafka訊息 Error while fetching metadata for correlation Id ** [UNKNOWN_TOPIC_OR_PARTITION] 原因可能是使用的使用者沒有想過topic的讀取許可權 * 客戶端訪問kafka丟擲如下異常:“Couldn't find leader offsets for Set([topictest,1]))”,該異常是在獲取leader後衝leader獲取offset失敗,通常是kafka叢集不穩定(如長時間gc,網路異常等)導致,可參考調整如下引數:KAFKA_HEAP_OPTS、socket.request.max.bytes、socket.receive.buffer.bytes、socket.send.buffer.bytes、replica.socket.receive.buffer.bytes這些引數值的大小(例如配置KAFKA_HEAP_OPTS值為“-Xmx4G -XX:MaxDirectMemorySize=128m”)
HDFS
* hdfs datanode節點掛在磁碟資料或者規格不一致的情況下,hdfs的讀寫效能相差可能很大從而影響某些sql或者其他操作的效能 * HDFS效能可透過檢視檢視平均wait和processing時間來檢視hdfs是否存在效能瓶頸
Zookeeper相關
* zookeeper單獨掛盤或者調整-Dzookeeper.snapCount=3000減少zk寫入資料時間 * rm啟動異常時丟擲無法載入某個app檔案,需要再zk上刪除該app資訊 * 元件與zk連線出現異常(經常性斷鏈),可透過增大zksessiontimeout設定來提高服務可靠性
Hbase
* hbase沒有指定startkey endkey時,會全表掃描(rpc server kerberos principal name for service ***),效能較差 * rs節點的hostname和ip的一對多關係會引發rs個數的顯示和真實的個數不一致 * 在處理hbase表資料時,出現如下異常“hbaserowkey can't be null error while processing *******”,說明有value為空,此時可透過select* from tablename a where a.rowkey is null or a.rowkey=""* 透過hive查詢相關表時,出現查詢失敗(許可權不足異常),部分region查詢成功,可能是部分節點的nscd/sssd服務異常。
codis/redis
* 客戶端訪問codis-proxy時,丟擲異常“ERR router is not online” 表示此時codis-proxy已經完成在zk上註冊zNode但是還未能完成上線,但無法提供服務。如果是在sparkstreaming應用中,該異常將導致executor退出,應用結束。 應用層需要再此場景下catch異常並處理(等待/丟棄)。
Others
* 應用出現讀檔案掛死,發訊息無返回,應用執行忙,各種timeout(connect,socket,read)等,需要考慮排查網路定保,full gc,死鎖,cpu異常,cpu節能,磁碟慢的硬體原因 * unknow compression method等型別的異常通常是檔案損壞導致。 * impala和hive使用不同的parquet來,二者的parquet格式的表互相讀取可能引發型別轉換異常 * hue需要reset操作才能使某些配置生效或者變更生效 * 出現Distributed filesyste can't be cast to filesystem的情況下,一般都是classloader載入異常。 * /usr/lib64下的so檔案替換可能引發jvm啟動異常 * 儲存leveldb資料的磁碟異常,目錄許可權異常可能導致nm啟動異常 * nscd服務服務異常時處理方法: nscd -i password nscd -i group nscp -i services nscd -i hosts service nscd/sssd restart * 執行shell指令碼時,丟擲異常, line 73: syntax error: unexpected end of file導致指令碼執行
作者:WestC
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2144/viewspace-2818616/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Webpack資料收錄Web
- Docker資源收錄Docker
- 不踩坑的Python爬蟲:如何在一個月內學會爬取大規模資料Python爬蟲
- 大資料 SQL Boy 脫坑指南大資料SQL
- 【爬坑】一次OOM爬坑之旅OOM
- 大資料基礎Hadoop 3.1.1 的高可用HA安裝~踩坑記錄大資料Hadoop
- 大資料學習目錄大資料
- 大資料實驗記錄大資料
- eMarketer:收穫大資料的果實很難大資料
- [收錄] ECShop 教學網站收錄網站
- 【從零開始學爬蟲】採集收視率排行資料爬蟲
- 大資料爬蟲專案實戰教程大資料爬蟲
- 爬蟲在大資料時代的應用爬蟲大資料
- vuepress爬坑之旅Vue
- cordova 爬坑指南
- 大資料日知錄 02 大資料常用演算法與資料結構大資料演算法資料結構
- SpringBoot2.x Data JPA 多資料來源爬坑Spring Boot
- 帶你入坑大資料(三) --- MapReduce介紹大資料
- python爬蟲利用代理IP分析大資料Python爬蟲大資料
- sqlserver收縮資料庫、收縮資料檔案的操作SQLServer資料庫
- 關於electron+vue 安裝並打包的爬坑記錄Vue
- 基於 Laravel 框架的 phpunit 單元測試爬坑記錄Laravel框架PHP
- 房產資料爬取、智慧財產權資料爬取、企業工商資料爬取、抖音直播間資料python爬蟲爬取Python爬蟲
- Oracle DBLink跨資料庫訪問SQL server資料同步 踩坑實錄Oracle資料庫SQLServer
- 第五屆中國雲端計算大會學習收穫(大資料)大資料
- JavaScript正則爬坑JavaScript
- git 爬坑小結Git
- Electron 打包爬坑指南
- 一個月入門Python爬蟲,輕鬆爬取大規模資料Python爬蟲
- 大快搜尋的大資料一體化開發框架下的大資料爬蟲安裝教程大資料框架爬蟲
- 大資料,大資料,大資料大資料
- 教你大資料必修三大技能 快快記錄下來大資料
- 資料檔案收縮
- 資料庫圈周盤點:資料文化需要更多投資;DB-Engines收錄5個國產圖資料庫資料庫
- Yaf 命令列模式爬坑命令列模式
- iview admin 使用爬坑View
- React-Native爬坑React
- 用 BeautifulSoup 爬資料