달력

012019  이전 다음

  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  

https://www.dremio.com/tuning-parquet/


Parquet 파일 하나는 1 이상의 Row group이 있고 Row group column 별로 저장 되어있다.


Row Group 크기를 크게하면 column 데이터가 연속적으로 저장이 되는 부분이 커져 연산 속도나 압축 효율이 좋아진다.


하지만 disk block 크기까지 고려한다면….


A: 커다란 Parquet file 커다란 row group
앞에서도 얘기한것 처럼 연산 속도나 압축 효율은 증가하겠지만,
하나의 Parquet 파일/Row group이 두개 disk block에 걸쳐 있을 확률이 높기 때문에 추가적인 disk I/O가 발생한다.

B: 그렇다고 작은 Parquet file 작은 Row group 한다면...
두개의 disk block 걸칠 경우는 적겠지만 Parquet columnar storage 장점이 줄어든다. (row-based 저장하는것과 비슷해질듯)

C: 가장 이상적인 방식은 1개의 Parquet file 1개의 Row group 1개의 disk block 있으면 가장 좋다. (이상적!!)



But how does the block size of the disk come into play?

"come into play"

This mitigates the number of block crossings, but reduces the efficacy of Parquet’s columnar storage format.

mitigates, efficacy




https://blog.usejournal.com/sorting-and-parquet-3a382893cde5


SELECT * FROM Customers WHERE Country=’Mexico’;

쿼리를 실행하기 위해서는 모든 데이터를 읽으면서 Country Mexico 데이터를 추출하는 작업을 해야한다.
만약 Country가 Mexico 고객이 전체 고객 1 %밖에 되지 않는다고 하더라도 전체 데이터를 읽어야 한다. OMG!!


Predicate pushdown이란 query engine에서 storage layer 조건을 적용하여 읽어들일 양을 줄이는것을 의미한다.


Parquet Row group 메타데이터를 이용하여 predicate pushdown 동작한다.

Eg: integer column 경우 min/max 값을 메타데이터에 저장한다.
string column 경우 Row group 내 distinct 값을 메타데이터에 저장한다.
(아래에도 나오지만 40,000개가 한계라고 한다. vcnc에서 관련 작업을 어떻게 해결했는지 나온다.)


근데 어떤 column 정렬해야하나요?
각자 환경에 따라 다르므로 실행되는 쿼리들을 모두 기록하여 자주 사용되는 필터(where) 어떤건지 파악
해당 column sort해서 저장하는것을 권고한다.



Predicate pushdown means that the query engine is able to push the condition right into the storage layer and thus reduce the amount of data that is read.

and thus. and then 하고 비슷하면서도 뭔가 다른것 같다.

Another idea is to keep a record of all the queries that are run into a log and then analyze the queries to understand which column is filtered on the most.
"column is filtered on the most"



https://blog.cloudera.com/blog/2017/12/faster-performance-for-selective-queries/


적절한 파티션 분리는 조회시 꽤나 유용하게 사용된다.
예로 일별로 파티션 데이터가 2년정도 쌓였는데 이때 최근 7 데이터를 조회하고 싶다면 730 파티션 중에서 7개만 조회하면 된다. 100x 효율 개이득!!

하지만 파티션이 너무 많으면 메타 데이터 관리가 부담이 될수 있으므로 적절하게 지정해야한다.

그리고 모든 것을 파티션으로 해결하는것은 불가능하므로 몇가지 유용한 분할 스키마 방식이 있다.


Parquet 파일에는 최대/최소 같은 정보가 담긴 메타 데이터가 있다.
Impala 2.9 부터는 필드의 min_value, max_value 필드를 읽어 조회시 파일 읽을 건너뛴.
Hive / Spark 파일을 경우에 Impala deprecated min, max 필드만 읽는. (현재 회사에서 사용하는건 Impala 2.11)


※ Parquet row group dictionary filter 대해 이해를 돕기 위한 친절한 그림.. 보세요!!


Parquet Row Group Skipping via Min/Max Statistics 테이블 생성시 Sort BY 했을때와 했을때의 차이를 보여줌


Parquet Row Group Skipping via Dictionary Filtering 
Impala 자동으로 dictionary filtering 적용한다.
하나의 parquet 파일  column distinct value 갯수 40,000개를 넘으면 예외

Min/Max 범위가 매우 커서 그다지 효과적이지 않을때 dictionary filtering 이용하여 해당값이 존재하는 파일인지 체크하여
읽어드릴 파일 갯수를 줄일수 있다.


앞에 설명이 되어있어서

쌩짜로 만들어진 테이블과 partition 으로 만든 테이블, partition clustering으로 만든 테이블의 비교한 표는 재미지게 볼 수 있다.



This approach significantly speeds up selective queries by further eliminating data beyond what static partitioning alone can do

This means that when the min/max skipping may not be effective due to the min/max range being too large, dictionary filtering can check for the existence of values without reading any of the rows in the file.



VCNC 기술 블로그 글을 보고 호기심이 생겨 찾아보았습니다.

http://engineering.vcnc.co.kr/2018/05/parquet-and-spark/


현재 Spark로 parquet 파일 쓰고 Hive, Impala로 조회하는 부분이 있는데 테스트 하면서 현재 상황에 맞게 수정 해봐야겠다.

Posted by 오산돌구

이번 포스트는 직독직해를 한게 아니라 내용중에 제가 필요한 부분만 적어보았습니다.
요새 고민하는게 있습니다.
무언가 배울때 생각하면서 배워야한다는점. 무조건 배우려고 하는건 아닌것같아요 : )
이게 내가 능력도 안되는데 마냥 하고싶은건가, 해야되는건가, 하면 좋은건가! 뭐 이런 생각들이요 ㅎㅎ

잘못 썼거나 추가하면 좋은 글이 있다면 알려주시면 감사하겠습니다.

Kernel Coding style

1. indentation
탭은 8글자, identation도 8글자
누군가는 8글자가 너무 오른쪽으로 치우지게 하는것 아니냐고 불평할수도 있다.
깊이 {, }가 3 이상일때 그렇게 되는데 해주고 싶은 말은, 프로그램을 고쳐라.
(depth가 3 이상인건 잘못됐다는뜻;; 난 여차하면 4이상인데.....후덜덜)

한줄에 여러 문장을 쓰지마라


또한 한번에 여러개의 변수에 할당을 하지마라

2. Breaking long lines and Strings
깊이가 깊은게 아니라 출력하려는 문장이 길경우(80칸이 넘어갈경우 )
긴 문장을 뜻이 되게 잘 나누어서 코딩한다


3. Placing Braces and Spaces
K&R에 따르면
if, switch, for, while, do의 문장의 경우 brace는 같은 줄에서 연다

그러나 함수의 경우에는 다음줄에 연다

문장이 하나만 있으면 brace 할 필요가 없다
예외) 다른조건에서 brace를 사용하면 한 문장이 있어도 brace를 사용

3.1 spaces
if, switch, case, for, while, do 다음에는 공백추가
sizeof, typeof, alignof, __attribute__같은것 뒤에는 공백 없음

(, ) 안쪽에는 공백을 넣지 않는것이 좋다. (;; 이거 내가 항상 하는건데.....)
s = sizeof( struct file )  // x  bad style

binary and ternary 연산자는 양옆에 공백
unary 연사자는 공백 없음

4. Naming
헝가리안 표기법은 쓰지마라
tmp, foo는 ......어후;; shotting offense와 같은거다. (치고빠지기 뭐 그런건가?;; 유지보수는 신경안쓰는..)

5. Typedefs
typedef가 마냥 좋은건 아니라고~!!!!


.........

14. Allocation memory
커널에서 메모리 할당하라고 제공하는 function : kmalloc(), kzalloc(), kcalloc(), vmalloc(), vzalloc()


......


16. Function return values and names
리턴값을 이용하여 함수의 성공여부를 판단하는데
두가지 방법이 있다.
err-code(-Exxx = failure, 0 = success)방법이 있고,
boolean (0 = failure, non-zero = success)방법이 있다.

두가지가 섞여서 사용하게되면 헷갈릴수가 있으므로
다음과 같은 규칙이 있다.

    함수명이 어떤 액션을 취하면  err-code방식
    소개하는 함수명이면 boolean 방식

예를들어 add_work() 의 경우 err-code, pci_dev_present()의 경우 boolean 방식을 사용한다.



출처 : http://www.kernel.org/doc/Documentation/CodingStyle


Posted by 오산돌구
1. 영어 공부중임을 잊지 말라_ 늘 본인이 영어 공부 중이라는 사실을 명심하자.

2. 연습만이 살 길이다_ 영어 공부에 왕도는 없다. 연습 하는 과정에서 자연스럽게 습득하는 것이다. 연습량과 실력은 비례한다.

3. 실수를 두려워하지 말라_ 실수로부터 배우는 것이 많다. 실수가 두려워 말을 안 하는 것보다 실수를 통해 부족한 부분을 보완해 가는 것이 좋다.

4. 영어로 생각하라_ 늘 머릿속에서 영어로 문장을 말하는 연습을 하라. 또한 영어 단어를 떠올리는것도 잊어선 안 된다.

5. 처음부터 욕심내지 말라_ 간단한 표현을 놔두고 어려운 영어 표현을 쓰면 부담만 커진다.

6. 독서하라_ 항상 영어 책을 곁에 두고 읽으면서 문장과 가까워져라.

7. 문맥을 잡아라_ 처음부터 끝까지 모든 것을 이해하려고 집착하기 보다는 앞뒤 문맥을 통해 의미를 이해하는 연습을 하라.

8. 규칙을 잊어라_ 언어란 결국 의사소통이다. 문법에 얽매이기 보다는 자연스럽게 익히는 것이 좋다.

9. 영영사전을 펼쳐라_ 영영사전은 영어표현의 보고다. 단어의 뜻뿐만 아니라 파생 단어도 함께 익힐 수 있기에 초급자들에게 특히 주효하다. 다양한 예문을 살피는 것이 좋다.

10. 상상하라_ 생활 속에서 특정상황이나 주제에 관해 자신의 생각을 영어로 표현하도록 연습한다. 혼자서 원어민 발음을 따라하거나 거울을 보면서 연습하는 것도 좋다.

출처  :  http://news.nate.com/view/20091105n01853

Posted by 오산돌구
제가 영어를 공부하고자 시작하였습니다. 
종종 오역이 있을 수 있습니다. 꾸준히 노력해서 줄여야겠지요...
시간이 지나 양질의 번역글을 많이 썼으면 좋겠네요 : )
잘못된 부분은 지적해주시면 인신공격빼고는 모두 달게 받겠습니다 : )


여러분이 얻으려고한 정보를 찾지 못했을때 구글의 Advanced Search기능을 사용해보세요
'고급 검색'이라고 두려워 할것없어요 사용하기 매우 쉽습니다. 기본 검색보다 더 정확한 검색을 하기위해서는 기능을 선택하거나 제외해야합니다.
구글 검색창오른쪽에 있는 Advanced Search를 클릭하세요

Date, usage rights, numeric range, and more,”이거나 +표시를 클릭하면 더 많은 선택창이 보여집니다.
그리고 맨 마지막에는 다양한 컴퓨터 OS나 대학같은 특별한 검색을 포함한 구글의  topic-specific searches가 링크되어 있습니다.


위에는 회색글씨로 “Use the form below and your advanced search will appear here,” 라는 문구가 있는데 여기에 Advanced Search를통해 만들어낸 쿼리문을 보여줍니다.

Note: 이 기능은 오래된 브라우저나
          여러분이 자바스크립트 사용안하는 고급보안기능 설정했다면 작동안할수있습니다.

고급검색기능기존 검색 예시기존 검색 결과창
 모든 단어 포함 tap dance ] 변화없음
 문구 정확하게 포함 tap dance ] 단어 양쪽에 따옴표를 붙인다
여러단어중 적어도 하나포함 tap OR ballet ] 단어 사이에 OR을 붙인다.
단어 제외 tap dance ] [ tap dance ] 단어 앞에 - 기호 붙인다


이제부터는 앞에서 말했던“Date, usage rights, numeric range, and more” 에 대해서 설명하겠습니다.


1. 출력 결과 갯수 정하기

한번에 10개 이상의 출력결과물을 보고싶다면, Results per page 박스에서 선택해주면 됩니다. 결과물이 로딩될때 인터넷연결이 느릴경우에만 차이를 느낄수 있습니다. 50개의 결과를 보기 위해서는

(검사후에는 URL에 &num=50이라는 글씨가 포함되어있는것 빼고는 어떤 영향도 끼치지 않습니다.)


2. 언어

언어상자에는 페이지에 출력되는 결과물의 언어를 제한 할수있습니다. 예를들면 스페인의 에스파냐에있는 호텔을 추천받고싶을때는 다음과 같이 하면 됩니다.


(이것도 역시 검사후에는 URL에 &lr=lang_es가 포함됩니다. 언어를 변경했다고 상단에 보여지는 검색창의 언어가 변하지 않습니다)


3. 파일 형식

파일 형식에서는 특정 파일 형식을 지정하거나 제외시킬수 있습니다. 

File FormatSuffixDescription
Adobe Acrobat PDF .pdf A publishing format commonly used for product manuals and documents of all sorts.
Adobe PostScript .ps A printing format often used for academic papers.
Microsoft Word .doc A common word processing format.
Microsoft Excel .xls A format for spreadsheets.
Microsoft Powerpoint .ppt A format for presentations and slides.
Rich Text Format .rtf A format used to exchange documents between Microsoft Word and other formats.

자산괸리가 쓰여진 질좋은 PDF 문서를 찾는다고 하면 다음과 같이 하면 됩니다.


4. 도메인
특정 웹사이트나 도메인의 글을 검색하거나 제외시킬때 사용한다. 아래 그림은 스탠포드대학 사이트에서 구글창설자 Larry Page 와 Sergey Brin에 대해서 찾으려고 하는것입니다.

다음은 봉사단체의 정보를 얻기위해 도메인이 ".org"이고 "volunteering"검색어를 검색하는 그림입니다.
5. 날짜
크롤러나, 인덱스가 3달, 6달, 12달 업데이트가된 페이지가 나오게 할수도 있습니다. 
유명한 페이지는 자주 크롤링되고, 인덱싱이 된다. 글자 교정하는것도 페이지 변경된것으로 여깁니다.

최근 미국 여성의 40%가 폐경기로부터 낫기위해 호르몬 치료를 사용하는데 장점과 단점에대해서 과학자들이 쓴
최신 글을 찾고 싶을때 아래 그림과 같이 합니다.

날짜를 선택해도 “your advanced search will appear here”박스에는 아무런 변화가 없습니다. 하지만 3달을 선택하고 검색을 하면 url에 &as_qdr=m3;가 포함되서 보여지게 됩니다.
일년 또는  한달전의 사이트의 모습이나 현재 접근이 안되는 사이트를 보고싶을때는 Wayback Machine 을 방문하세요(이거 좀 괜찮네요 98년도 naverㅋㅋㅋ)

6. 사용자 권한

Usage RightsDescription
not filtered by license standard, unfiltered Google results
free to use or share results you can copy or redistribute
free to use or share, even commercially results you can copy or redistribute for profit
free to use share or modify results you can copy or adapt, as well as redistribute
free to use, share or modify, even commercially results you can copy or adapt, as well as redistribute, for profit
야채 조리법을 찾으려고 한다면, 우리는 구글에서 "“free to use, share or modify, even commercially”권한으로 페이지를 찾을수 있습니다.

권한조정을 한다고 맨위에있는 박스에 있는것에는 변하는것이 없습다. 하지만 URL이 복잡하게 변하게된다.

궁금하다면 다양하게 설정하면서 URL을 체크해보세요

7 .......뭔소리지........ㅠㅠ

8 지역

특정 나라나 어느지역의 페이지를 요청하는 방법입니다. 결과는 그 나라에 해당하는 URL이 보이거나, 대부분 끝에 ".com"으로 끝나는 도메인이 있습니다.

South Africa의 president clinton or senator clinton에 대해서 찾으려고 한다면 다음과 같습니다.

지역을 선택했다고 위에있는 박스에는 변화가 없습니다. 하지만 결과가 나오면 URL에 &cr=countryZA;가 나오는데

여기서 ZA는 South Africa코드 및 인터넷 도메인 입니다.

9. 숫자 범위

이것은 특정 숫자 범위가 있는 페이지를 찾고자 할때 사용합니다. 

쌍둥이에에게 50에서 1000달러 사이의 오토바이를(;;;;;문화를 모르니...허허)사준다고 할때 다음과 같이 검색합니다.

10. 안전검색

포르노사이트같은 유해사이트, 결과물이 삭제된것을 여과해주는것을 말합니다. 구글이 자동으로 공격적이 사이트를 막아줄수 없다는것은 알아야합니다. (뭥미...;;) 예를들어 유방암에 대해서 안전검색을 끈상태로 검색을 하게되면, 원치도 않는 자극적인 가슴 사진이 있는 사이트가 나타날수도 있습니다.

11. 특정 페이지 검색

 고급검색창에서 특정페이지 검색은 웹의 URL로 특정페이지의 페이지를 찾는것과 비슷합니다.
Consumer Report의 페이지와 비슷한 페이지를 찾기 위해서 처음 특정페이지 검색창(Find pages similar to the page)을 채워 놓고, Search버튼을 클릭합니다.


다른 고급 검색과는 다르게 특정 페이지 검색은 질의문이 조합되지 않는다.  그래서 Search버튼이 따로 있는것이다.

쉽게 특정 페이지 검색을 실행하려면 구글툴바를 설치하면 된다.

Advanced Search 형식대신에 검색창에 주소를 입력함으로써 링크뿐만 아니라 다음과 같은 결과를 얻어낼수있다.

  • Google’s cache of the site
  • Web pages that are similar to the site
  • Web pages that link to the site
  • All Web pages from the site that Google has crawled, listed in PageRank order
  • Web pages that contain the URL

예를 들어  훌륭한 레퍼런스 사이트 www.refdesk.com에 대해서 찾고자 할때 검색창에 www.refdesk.com을 입력하면 된다.




고급검색, advanced search 이런거 . . .통일해야하는데 다음부터는 그대로 영어로 써야겠다....
아놔.....오늘도 좌절을 해본다.....: ) 근데 재밌다.

원문 :
http://www.googleguide.com/sharpening-queries.html

Posted by 오산돌구
제가 영어를 공부하고자 시작하였습니다.
종종 오역이 있을 수 있습니다. 꾸준히 노력해서 줄여야겠지요...
시간이 지나 양질의 번역글을 많이 썼으면 좋겠네요 : )
잘못된 부분은 지적해주시면 인신공격빼고는 모두 달게 받겠습니다 : )

이 페이지는 구글이 어떻게 어떻게 색인을 만들고 쿼리를 가공하여 문서를 보여주는것이 어떻게 하는지 궁금하지 않는 독자는 넘어가도 된다.

구글은 수천개의 저렴한 컴퓨터를 분산시켜서 일을합니다. 그래서 빠르게 병렬처리를 할수있는것이죠 : )
병렬 처리는 많은 계산들을 동시에 수행하는것을 말하고, 데이터 처리속도를 크게 높일수있습니다.
구글만의 세가지 기술은 다음과 같습니다.
  • 구글봇 - 웹 크롤러는 웹페이지를 찾고 내용을 가져옵니다.
  • 색인기 - 모든 페이지의 단어를 정렬하고, 색인된 단어를 커다란 데이타베이스에 저장을 합니다.
  • 쿼리 처리기 - 사용자가 입력한 쿼리와 색인를 비교해서 가장 관련있는 문서들을 추천해줍니다.

각각의 기술들을 좀더 자세히 알아보겠습니다.

1. 구글봇, 구글의 웹 크롤러
구글봇은 웹페이지를 받기위해 웹서버에게 요청을하고, 모든 페이지를 다운로드한뒤 색인기에게 전달하는 역할을 합니다.

수많은 컴퓨터의 구글봇이 웹페이지를 받기 위해 요청을하고 사용자가 웹브라우저로 볼 수있는 속도보다 더 빨리 페이지를 가져옵니다. 사실 수천개의 다른페이지를 동시에 요청할 수있지만 웹서버의 과부하를 막기위해 구글봇의 능력보다 천천히 웹서버에 요청을 합니다.

구글봇이 페이지를 찾는방법은 두가지가 있습니다. www.google.com/addurl.html에서 URL을 추가하거나 크롤링을 통해 링크를찾는것입니다.

그런데 스패머가 부당한 방법을통해 자동으로 URL을 등록하는 로봇을 만들경우가 있습니다.
그래서 아래와 같이 불규칙한 글씨를 보여줘서 확인을 하고있습니다.


그리고 페이지를 가져올때 구글봇이 페이지를 가져올때 페이지에 있는 링크도 가져옵니다.

가져온 링크 데이타는 순서대로 큐에 추가됩니다. 모든페이지의 링크를 가져올때 구글봇은 광범위한 웹을 도달할수있는 링크 목록을 만듭니다. 이것을 deep crawling이라 합니다.(이해 못했음) 

구글봇이 동시에 천개의 페이지에 요청을 하면 'visit soon'큐에 있는 URL과 계속 관찰하고 있고 이미 만들어진 구글의 색인과 비교를 한다. 구글봇이 같은 페이지를 또 가져오는것을 방지하기위해 큐데이터에서 중복된것은 제거한다. 또한 구글봇은 페이지를 어느정도 간격으로 방문할지 결정한다. 이것은 변하지 않은 페이지를 다시 색인함으로써 자원을 낭비한다고 생각할수 있지만, 다른 한편으로는 구글이 최신의 결과를 보여주는것을 원하는 것입니다.

현재 색인데이타를 유지하기 위해 자주 변하는 웹페이지를 지속적으로 크롤을 합니다.

매일나오는 신문페이지나, 주식 시세 페이지는 다운을 받으면 됩니다. (기존의 색인데이타는 유지하면서 새로운것만 추가한다는말같음) 이것을 fresh crawls라고 합니다.

이 두개의 크롤링 방법으로 구글은 효과적으로 자원을 사용하고 합리적으로 색인데이타를 관리 합니다.


2. 구글 색인기
구글봇이 페이지 전체 텍스트를 구글 색인기에게 보내면 받은 데이터로 색인작업및 저장하는 역할을 합니다.
성능을 높이기 위해 Stop words라고불리는 단어를 무시하게 했습니다.
is, on, or, of, how, why, 한자리숫자, 한자리 등을 말합니다. 마침표, 쉼표, 여러개의 띄어쓰기도 무시합니다.
마지막으로 성능을 높이기위해 모든 문자는 소문자로 바꿉니다.


3. 구글 쿼리 처리기

여러 부분으로 구성되었는데 첫번째로 페이지랭크라는 구글의 웹페이지의 점수를 매기는 기술이 있습니다.

그리고 성능향상을 위해 자동으로 저장된 데이터 간의 관계를 학습하는 기술도 있습니다.  [ex)spelling-correcting system]

단순히 하나의 검색어와 전체 웹텍스트를 색인한것을 매칭한것을 보여주는것입니다.

사용자는 구글색인한 HTML 코드뿐아니라 페이지의 텍스트도 구글에서 제공하는 Google’s Advanced Search FormUsing Search Operators (Advanced Operators)을 이용해서 검색할 수 있습니다.



Posted by 오산돌구