虛擬機器時間不同步
yum配置不通:
vi /etc/resolv.conf
更改dns
hadoop:hadoop的根目錄下的logs資料夾下的以.log結尾的檔案
檔案組成:hadoop-使用者名稱-啟動節點-主機名.log
找到掛掉的節點名稱和對應主機,開啟日誌找錯
namenode消失:檢視日誌,發現上面提示namenode的id資訊和datanode的id資訊不一致
解決方案:
1.找到hdfs-site.xml中配置的dfs.namenode.name.dir和dfs.datanode.data.dir的路徑
進入路徑下可以看到current資料夾,進入資料夾,找到version檔案,開啟可以看到clusterid
比較namenode和datanode的id資訊,更改一致並重啟hadoop服務
2.1方案解決不了的情況下,或者報錯不是id的問題,首先把
dfs.namenode.name.dir和dfs.datanode.data.dir的路徑下的檔案全部刪除
namenode重新格式化
莫名其妙的少了某乙個節點,檢視日誌,沒有報錯,重啟服務
特殊點:如果直接start服務,報該節點已存在,jps檢視,還是沒有,那執行stop命令
首先關掉所有節點,jps檢視一下,如果發現沒有被stop掉的程序,根據程序前的埠號
強制kill掉,確保整個機器jps只有乙個jps,再重新啟動
hive:
冷門錯誤:/tmp/mysql.sock.lock檔案阻止mysql啟動,自動關閉mysql
解決方案:刪除mysql.sock.lock檔案,重新啟動mysql
拒接連線:mysql或者hadoop服務沒有啟動或少啟動了什麼,檢查主機配置,重啟mysql和hadooop服務
zookeeper:
啟動zookeeper之後發現沒有對應程序,重新啟動提示已經存在(提示語句後跟了乙個埠號)
證明服務卡在該埠,kill這個埠號,重新啟動
zookeeper啟動之後jps發現該程序,但是檢視zookeeper狀態的時候,
發現提示error contacting service. it is probably not running.
1.啟動慢,等一下就好了
2.檢視zookeeper日誌,發現有乙個節點連線失敗,檢視/etc/hosts檔案,確定zoo.cfg
下的配置的主機名和/etc/hosts檔案下的配置相同
3.檢視zoo.cfg是否配置正確,比如:server.1=centos128:2888:3888兩個埠之間的:
檢視日誌發現unable to load database on disk
解決方案;zookeeper根目錄下的data/version-2資料夾下有內容錯誤,刪除該資料夾下的所有檔案
重啟zookeeper服務
zookeeper啟動正常,檢視zookeeper狀態提示單例模式,檢查hadoop服務是否啟動完全
zookeeper埠號被占用,檢視zookeeper的預設埠號2181是否有程序,如果有,kill掉,重啟服務(有風險)
hbase:
啟動主節點之後發現子節點沒有被一起啟動,檢視hbase根目錄下的conf/regionservers檔案,檢查
主機名是否和/etc/hosts檔案對應,是否把子節點的主機名寫入,是否把localhost刪掉
大問題:啟動一切正常,子節點的hregionserver堅持十秒消失
原因:各個主機之間的時間有偏差
解決方案:
1.如果偏差不是很大,在hbase-site.xml中新增hbase.master.maxclockskew屬性並賦值
2.如果偏差比較大(裝系統的時候指定時區沒有指定好),更改核對各個系統時間
注意:時間不是只有時分秒的,還有年月日的,日期不對時間對有什麼用!?
啟動hbase的時候,因為regionservers的存在,所以只需要在hadoop的namenode存在的節點
啟動hbase就可以了,在當前節點會啟動hregionserver和hmaster,子節點只會自動啟動hregionserver
如果分開啟動,會出現三個hmaster,識別不了主節點
hbase shell啟動報server is not running
檢視日誌,safe mode發現節點在安全模式下,關閉安全模式,重啟shell
rz上傳檔案直接跳過 – 檔案已存在
– ***型別轉化失敗,看一下要轉換的資料格式型別是否正確
– 原始檔有空行,從hive角度看不出來,找原始檔,有n個空行
初始化函式失敗(failed: execution error,
return code 1 from org.apache.hadoop.hive.ql.exec.functiontask) –
1.導包路徑重複(包名和類名),包或者類的名字錯誤,更改包名或類名重試
2.自定義的函式名字(關鍵字)
3.類裡面內容有錯
4.類沒有繼承udf
5.create function (直接建立函式,不是臨時的 temporary) –
增加temporary選項,重新看錯
order by 是對hive表裡面的資料進行排序,
因為hive是基於mapreduce的,
所以,排序是依賴
reduce裡面的自動排序,不需要我們進行操作
但是:
因為是基於reduce的排序規則的
所以,order by進行全排序的時候
只會指定乙個reduce
當資料太大的時候,慢!!!
當mapred的模式被設定成strict
將會嚴格按照mapreduce的輸出規則執行:
每個map輸出的資料的行數必須被指定
也就是用limit控制一次輸出多少行,一共輸出幾次
相比較與讓乙個reduce接收n個資料,
這樣reduce接收到的資料就變成了:
n*map
該模式下需要使用limit,然而
limit需要where語句
如果表有分割槽,那麼
查詢時候的條件,必須指定分割槽
sort by是基於每個reduce的排序
當只有乙個reduce的時候,sort by和order by功能相同
如果有多個reduce,那麼sort by只會對每個不同的reduce
進行一次排序,那麼如果讀取全部資料的話,除了運氣好的情況之外
最後的結果是階段性排序的(多個reduce結合的,
每個reduce是有序的,但是不同reduce之間是無序的)
distribute by是控制map端輸出到reduce之後如何進行劃分的
按照指定的字段將資料劃分到reduce中去
和group by類似,只負責控制reduce的資料處理劃分
想要排序,在劃分reduce之後用sort by對每個reduce排序
cluster by是distribute by和sort by的特定形式:
引數相同
select * from invites1 cluster by foo ==
select * from invites1 distribute by foo sort by foo
分桶:
對每乙個資料取hash值,除以總桶數(近似於隨機的),得到的餘數就是
這個資料所在的桶的位置
目的:
盡量保證資料均分,防止資料傾斜
優勢(為什麼要劃分桶):
做抽樣,基於上面的保證資料均分
那麼我們就可以認為每個桶裡面的
對應的資料都是對等的
so:
想查出一類記錄一共有多少條的時候
只需要查乙個桶裡面的所以該類記錄*桶的數量
就可以近似得到該類的資料的總數量
select * from users1 tablesample(bucket 1 out of 2 on id)
tablesample是乙個抽樣演算法,第乙個引數:從哪個桶裡開始取值
第二個引數:決定抽取bucket的數量(桶的總數/引數)
規範:第二個引數一定是桶的2n倍
hive 類sql語句
原理:mapreduce
so:
把寫的語句轉換成mapreduce去想
test1: 14,兩兩相等
id name
age
reduce.tasks=4
select * from test1 group by name
group by 就是把相同name的合併到一起,不同的name分開顯示
對應到mapreduce:
把相同name的合併到一起:reduce聚合過程
輸出:輸出全部reduce的
jdk.toolsgroupid>
jdk.toolsartifactid>
1.7version>
systemscope>
$/lib/tools.jarsystempath>
dependency>
操作大資料集
1 語法 insert into table column column subquery 2 說明 您可以使用insert語句向乙個表中新增行,其中的值來自於查詢結果集。插入子句的列列表中列及其資料型別的數量必須與子查詢中的值和資料型別相匹配。3 例句 insert into empl3 sele...
大資料學習之路3 集群常見錯誤
1.不恰當的format 導致namenode上生成了clusterid.跟datanode上記錄的clusterid不一致,導致datanode無法向namenode註冊。解決辦法 將datanode所在機器的資料目錄刪除,重啟datanode的時候會自動建立。2.不恰當的複製 把datanode...
Pytorch 讀取大資料集
記錄一下pytorch讀取大型資料集的要點 pytorch 讀取大資料集的一般方法 class mydataset data.dataset def init self,root filepath self.root root init 中讀取檔案路徑而非檔案本體 self.imgs list se...