91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Apache Pig和Solr問題筆記(一)

發布時間:2020-07-09 11:59:09 來源:網絡 閱讀:1027 作者:葬月仙帝 欄目:大數據

記錄下最近兩天散仙在工作中遇到的有關Pig0.12.0和Solr4.10.2一些問題總共有3個如下

1問題一 如何Pig中使用ASCII和十六進制hexadecimal的分隔符進行加載和切分數據

注意關于這個問題在Pig中會反應到2個場景中
第一 在Pig加載load數據時候 。
第二 在Pig處理split或則正則截取數據的時候。

先稍微說下為啥使用十六進制的字段分隔符而不是我們常見的空格逗號冒號分號#號等這些字符雖然也可以使用但是如果我們數據中有和這些符號沖突的數據那么在解析時就會發生一些出人意料的Bug所以為了保險起見選用肉眼不可讀的十六進制的數據是一個不錯的選擇當然這也是針對場景來說的看情況決定。

關于詳細的ASCII和十六進制二進制八進制十進制的文檔介紹請參考維基百科全書。

下面繼續回到正題本例中我們的數據格式是這樣存儲的

Java代碼 Apache Pig和Solr問題筆記(一) Apache Pig和Solr問題筆記(一)Apache Pig和Solr問題筆記(一)

  1. 每行一條記錄,UTF-8編碼   

  2. 每條記錄都包括字段名和字段內容   

  3. 字段之間用ascii碼1分隔   

  4. 字段名與內容之間用ascii碼2分隔  

每行一條記錄,UTF-8編碼
每條記錄都包括字段名和字段內容
字段之間用ascii碼1分隔
字段名與內容之間用ascii碼2分隔



一個在eclipse中的小例子如下

Java代碼 Apache Pig和Solr問題筆記(一) Apache Pig和Solr問題筆記(一)Apache Pig和Solr問題筆記(一)

  1. public static void main(String[] args) {   

  2.     //注意\1和\2在我們的IDE中NotePad++中Linux的終端設備的界面中都會呈現不同的   

  3.     //顯示方式大家可以在維基百科中詳細了解下   

  4.     //數據示例   

  5.     String s="prod_cate_disp_id019";   

  6.     //split規則   

  7.     String ss[]=s.split("\2");   

  8.     for(String st:ss){   

  9.         System.out.println(st);   

  10.     }   

  11. }  

	public static void main(String[] args) {
		//注意\1和\2在我們的IDE中NotePad++中Linux的終端設備的界面中都會呈現不同的
		//顯示方式大家可以在維基百科中詳細了解下
		//數據示例
		String s="prod_cate_disp_id019";
		//split規則
		String ss[]=s.split("\2");
		for(String st:ss){
			System.out.println(st);
		}
	}




關于load函數加載時支持的分隔符類型大家可以參考官網的文檔
下面看在Pig腳本的代碼

Java代碼 Apache Pig和Solr問題筆記(一) Apache Pig和Solr問題筆記(一)Apache Pig和Solr問題筆記(一)

  1. --Hadoop技術交流群415886155  

  2. /*Pig支持的分隔符包括  

  3. 1,任意字符串  

  4. 2,任意轉義字符  

  5. 3dec的字符\\u001 或者 \\u002  

  6. 4十六進行字符 \\x0A  \\x0B  

  7. */  

  8. --注意這個load時的分隔符代表ASCII的1作為Pig里面的dec直接解析方式   

  9. a = load '/tmp/dongliang/20150401/20150301/tmp_search_keywords_cate_stat/' using PigStorage('\\u001') ;   

  10.   

  11. /**  

  12.  

  13. 注意下面的分割符^B這個符號是脫元字符只會在終端設備上  

  14. 顯示這個符號代表ASCII的2  

  15. */  

  16. a = foreach a generate   REGEX_EXTRACT ($0'(.*)^B(.*)'2) as time ,   

  17.                          REGEX_EXTRACT ($1'(.*)^B(.*)'2) as kw ,   

  18.                          REGEX_EXTRACT ($2'(.*)^B(.*)'2) as ic ,   

  19.                          REGEX_EXTRACT ($3'(.*)^B(.*)'2) as cid,   

  20.                          REGEX_EXTRACT ($4'(.*)^B(.*)'2) as cname,   

  21.                          REGEX_EXTRACT ($5'(.*)^B(.*)'2) as pname,   

  22.                          REGEX_EXTRACT ($6'(.*)^B(.*)'2) as snt,   

  23.                          REGEX_EXTRACT ($7'(.*)^B(.*)'2) as cnt,   

  24.                          REGEX_EXTRACT ($8'(.*)^B(.*)'2) as fnt,   

  25.                          REGEX_EXTRACT ($9'(.*)^B(.*)'2) as ant,   

  26.                          REGEX_EXTRACT ($10'(.*)^B(.*)'2) as pnt ;   

  27.   

  28. --獲取字符串長度   

  29. a = foreach a generate SIZE(cid) as len;   

  30. --按長度分組   

  31. b = group a by len;   

  32. --統計各個長度下的數量   

  33. c = foreach b generate group, COUNT($1);   

  34. --輸出打印   

  35. dump c;  

--Hadoop技術交流群415886155
/*Pig支持的分隔符包括
1,任意字符串
2,任意轉義字符
3dec的字符\\u001 或者 \\u002
4十六進行字符 \\x0A  \\x0B
*/
--注意這個load時的分隔符代表ASCII的1作為Pig里面的dec直接解析方式
a = load '/tmp/dongliang/20150401/20150301/tmp_search_keywords_cate_stat/' using PigStorage('\\u001') ;

/**

注意下面的分割符^B這個符號是脫元字符只會在終端設備上
顯示這個符號代表ASCII的2
*/
a = foreach a generate   REGEX_EXTRACT ($0, '(.*)^B(.*)', 2) as time ,
                         REGEX_EXTRACT ($1, '(.*)^B(.*)', 2) as kw ,
                         REGEX_EXTRACT ($2, '(.*)^B(.*)', 2) as ic ,
                         REGEX_EXTRACT ($3, '(.*)^B(.*)', 2) as cid,
                         REGEX_EXTRACT ($4, '(.*)^B(.*)', 2) as cname,
                         REGEX_EXTRACT ($5, '(.*)^B(.*)', 2) as pname,
                         REGEX_EXTRACT ($6, '(.*)^B(.*)', 2) as snt,
                         REGEX_EXTRACT ($7, '(.*)^B(.*)', 2) as cnt,
                         REGEX_EXTRACT ($8, '(.*)^B(.*)', 2) as fnt,
                         REGEX_EXTRACT ($9, '(.*)^B(.*)', 2) as ant,
                         REGEX_EXTRACT ($10, '(.*)^B(.*)', 2) as pnt ;

--獲取字符串長度
a = foreach a generate SIZE(cid) as len;
--按長度分組
b = group a by len;
--統計各個長度下的數量
c = foreach b generate group, COUNT($1);
--輸出打印
dump c;




2問題二如何在Apache Solr中查詢某個不分詞的field的長度有多少個記錄

Solr里面并沒有直接提供這樣類似JAVA里的lenth這樣的函數或者Pig里面的SIZE這樣的函數那么我們應該如何查詢呢

Solr雖然不直接支持這樣的查詢但是我們可以通過正則查詢來變相的實現這個目的用法如下
1查詢固定長度 cid:/.{6}/ 只過濾長度為6的記錄
2查詢范圍長度 cid:/.{6,9}/ 只過濾長度6到9的記錄
3查詢最少多少長度以上的cid:/.{6}.*/ 長度最少為6的



3問題三在使用Pig+MapReduce向Solr中批量添加索引時發現無任何錯誤異常但是索引里卻沒任何數據?

這是一個比較詭異的問題本來散仙覺得應該是程序出問題了但是后來發現同樣的代碼向另外一個collection里添加數據就很正常查看solr的log發現里面打印的一些信息如下


Java代碼 Apache Pig和Solr問題筆記(一) Apache Pig和Solr問題筆記(一)Apache Pig和Solr問題筆記(一)

  1. INFO  - 2015-04-01 21:08:36.097; org.apache.solr.update.DirectUpdateHandler2; start commit{,optimize=false,openSearcher=true,waitSearcher=true,expungeDeletes=false,softCommit=false,prepareCommit=false}   

  2. INFO  - 2015-04-01 21:08:36.098; org.apache.solr.update.DirectUpdateHandler2; No uncommitted changes. Skipping IW.commit.   

  3. INFO  - 2015-04-01 21:08:36.101; org.apache.solr.core.SolrCore; SolrIndexSearcher has not changed - not re-opening: org.apache.solr.search.SolrIndexSearcher   

  4. INFO  - 2015-04-01 21:08:36.102; org.apache.solr.update.DirectUpdateHandler2; end_commit_flush  

INFO  - 2015-04-01 21:08:36.097; org.apache.solr.update.DirectUpdateHandler2; start commit{,optimize=false,openSearcher=true,waitSearcher=true,expungeDeletes=false,softCommit=false,prepareCommit=false}
INFO  - 2015-04-01 21:08:36.098; org.apache.solr.update.DirectUpdateHandler2; No uncommitted changes. Skipping IW.commit.
INFO  - 2015-04-01 21:08:36.101; org.apache.solr.core.SolrCore; SolrIndexSearcher has not changed - not re-opening: org.apache.solr.search.SolrIndexSearcher
INFO  - 2015-04-01 21:08:36.102; org.apache.solr.update.DirectUpdateHandler2; end_commit_flush




解釋下上面的信息的意思大概就是說在數據索引完了但是沒有發現有commit的數據所以跳過commit這一點在程序跑的時候是非常奇怪的因為數據源HDFS里最少有110萬的數據怎么會沒有數據呢 然后散仙通過谷歌搜索發現也有人發現類似的奇怪情況無任何異常的情況下重建索引成功卻在索引里沒有看見任何數據而且最為疑惑的是這幾個網上已經有的案例竟然沒有一個有解決方案。

沒辦法了只好再次查看程序這一次散仙把中間處理好需要建索引的數據給打印出來看一下到底什么情況結果打印出來的都是一行行空數據原來在使用正則截取數據時原來的分隔符失效了所以導致截取不到數據這下問題基本定位了solr索引里沒有數據肯定是因為本來就沒有數據提交導致的那個奇怪的log發生結果在散仙把這個bug修復之后再次重建索引發現這次果然成功了在Solr中也能正常查詢到數據。如果你也發生了類似的情況請首先確保你能正確的獲取到數據不論是從遠程讀取的還是解析wordexcel或者txt里面的數據都要首先確定能夠正確的把數據解析出來然后如果還是沒建成功可根據solr的log或者拋出的異常提示進行修復 。

Apache Pig和Solr問題筆記(一) 


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

陆丰市| 日土县| 万全县| 金阳县| 桃园县| 天水市| 通河县| 阿坝| 大方县| 邵东县| 依安县| 正蓝旗| 顺平县| 阳新县| 尚志市| 长宁县| 五莲县| 布尔津县| 常德市| 墨脱县| 扶余县| 石景山区| 新郑市| 扶风县| 成安县| 大丰市| 平远县| 陕西省| 墨竹工卡县| 云龙县| 衡南县| 德安县| 盐城市| 莫力| 江油市| 罗山县| 克山县| 景宁| 正安县| 上饶县| 高平市|