Hbase Region Merge

Hbase Region Server 설정 파일 쪽을 보면  - hbase.hregion.max filesize 라는 설정이 있는데 CDH에서 설명을 보면 (HStoreFile 의 최대 크기로, 열 패밀리 HstoreFile 중 하나라도 이 값을 초과하면 HRegion이 두개로 분할 됩니다.) 라고 나와있다. 즉 테이블 사이즈가 저 사이즈를 초과하면 Region이 분할 되어 저장 되는 것 같다. Region의 수가 지속적으로 증가하는 터라 (이전 데이터는 지워 졌음에도 Region 카운트 수가 줄어 들지가 않는다.) 이걸 Merge해줘야 할 것 같아 간단하게 메모를 남긴다. 먼저 RegionServer에 접속 후, > hbase shell > merge_regions 'REGION ENCODENAME', 'REGION ENCODENAME' 여기서 REGION ENCODENAME은 hbase region server WEB UI에 가면 확인 가능하다. WEB UI 에서 TABLE을 클릭하면 리젼들 분할된 정보를 볼 수 있고, Table Regions의 Name부분 <테이블명,StartKey,??,ENCODENAME> ENCODENAME을 확인하여 명령어를 실행한다. * END Key -> StartKey 순서대로 머지 하도록 한다. 중간 것을 건너 뛰고 머지 할시 에러가 발생

Phoenix 라이브러리 - ERROR 2008 (INT10): Unable to find cached index metadata 발생 시

Phoenix 4.1 을 사용하고 있는데, 인덱스 테이블 오류로 인해 테이블을 drop 후 데이터를 upsert하는 도중 아래와 같이 오류가 발생 했고, 이어서 Hbase Region Server가 다운 되는 현상이 발생 했다. Region Server를 모두 재기동 후, Region Server는 모두 정상이었지만, 더이상 data upsert를 진행 할수 없었고, 로그를 확인 하던 도중 meta data 를 찾을수 없다는 로그를 발견하였다. 위의 상황과 똑같은 이슈가 올라와 있어 링크를 걸어 놓았다. https://issues.apache.org/jira/browse/PHOENIX-1005 장애가 나는 순서를 적어보면 1. 해당 테이블에 upsert data가 발생하고 있는 도중에 Drop index table이 발생하면 에러가 발생    이때  Cannot find row in hbase:meta for table  로그가 남는다. 2. meta data를 찾을수 없다는 로그와 함께 Region Server들이 shutdown 되는 현상이 발생한다. (Phoenix 쪽 failure policy 대로 region server에 shutdown 이 날아간다.) 3. Region Server 재기동 후 여전히 meta data 를 찾을수 없다면서 로그가 발생. (다시 다운되는 현상은 없지만 upsert data가 불가하다) 해결 방법  1. 버전 업 - 상위 버전에서 fix 되었다고는 하나. 안되는 것을 확인하였다. 2. Region server 재기동후 drop한 index를 생성후 region 서버 재기동  - 이경우 테스트를 통해 잘 작동하는 것을 확인하였다. * 주절주절 -  장애가 난 당시에 관련 레퍼런스들을 찾아보았으나 해결 방법이 딱히 없었다. 해결 방법이라곤 hbck를 이용하라는 것인데, 해도 복구가 되지 않았다. 해결 방법을 더 찾다 보면 새로 설치 하라는 말들이 많았는데, 결국 zook

[Spring Framework] Interceptor 구현 및 xml수정하기

이미지
* 세션을 유무에 따른 인터셉터 구현 로그인을 안한 사용자가 로그인 후 보일 페이지 또는 임의 주소를 입력하여 접근 하는 것을 막는 것. 1. Interceptor 클래스 파일 생성 import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class SessionInterceptor extends HandlerInterceptorAdapter{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if(request.getSession().getAttribute("LOGIN_USER") != null) //세션체크 return true; else{ response.sendRedirect("loginForm.do"); //로그인이동 return false; } //로그인 정보를 담은 세션을 가져와서 세션 정보가 있으면 패스~  //그렇지 않으면 loginForm.do로 이동 하라는 거! } //이 밑에 부분도 설정 할 수 있음. 자세한 설명은 다시 검색 해보기! @Override public void postHandle(HttpServletRequest request, HttpServlet

[Spring Framework] Redirect +a 궁금증! ver_0.1

현재 스프링을 다뤄 본지 얼마 안되서 거의 ModelAndView를 사용한 코드가 대다수이다. 그러다가 문득 Redirect를 시켜, 객체 값을 넘기고 싶다는 생각이 들었다. 안된다는 이야기가 많이 있던데... 뭐 찾아본 결과를 적어본다. 1. Redirect 하는 방법 //ModelAndView를 이용하여 Redirect시 mv = new ModelAndView("redirect:/testRedirect.do"); return mv; //Public 블라블라 시 @RequestMapping(value="/vlavla.do") public String joinvlavla( HttpServletRequest request, HttpServletResponse response) { return "redirect:/mvctest/joinvlatest.do" } * 또는 RedirectView를 사용하면 된다. 2. 값을 넘기고 싶다!!! - session을 이용해도 되고, 파라미터로 넘기면 되지만 또다른 편한 방법이 있다고 해서 기록한다. (소스를 분석 해볼 것!!) * 스프링 3.1 버전 특징인, Flash Attribute, Redirect Attribute를 사용하면 간편하다고 한다. http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-ann-redirect-attributes http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-flash-attributes 음.. 그니깐 두 컨트롤러 사이에 뭐.. redirect 시 값을 넘겨주는? 방법 중 하나랄까? 현재 기억은 나지 않지만, 둘중 하

nodejs install and start 1

이미지
* 예전 어쩌다[?]보니 node.js라는 javascript에 대해 들어보게 되었다. 이게 무언고 하니??? *  http://nodejs.org 1. node.js란? 서버 환경에서 돌아가는 자바스크립트이다. 대규모 네트워크 애플리케이션을 개발하기 위해 만들어 졌다. 이벤트를 기반으로 하는 비동기 방식으로 처리한다. 2. node.js의 장단점은? [장점] V8자바스크립트 엔진을 사용한다. C++확장이 가능하다. [단점] 자바스크립트이기 떄문에 속도가 느리다 (C/C++로 만든 것보다는 속도가 느림) 아직 개발이 불안정[?] 모듈이 많지가 않다. 3. node.js의 설치? http://nodejs.org 에 접속하여 각 운영체에 맞는 파일을 다운받고 실행 하면 된다. * 실행 결과 화면! (윈도우에서 설치후 사용 해본 것이다. mac이 더 편한듯 하다.) * 스레드 기반 동기방식 과 이벤트 기반 비동기 방식이란? 스레드 기반 동기방식 기존 네트워크 프로그램이 사용하는 방식으로, 스레드를 여러개 생성하여 동시에 일을 처리한다. 하지만, 스레드가 많이 생성 될수록 메모리를 많이 잡아 먹게 된다. 이벤트 기반 비동기 방식 스레드를 하나만 생성하여 사용하지만 이벤트 처리 방식이기 때문에 속도가 빠르다. 하지만, 어느 한쪽에 이상이 생겼을 경우 프로그램 전체에 영향을 미치는 단점이 존재한다. 주절주절:) 사실 나는 자바스크립트에 대한 많은 경험이 없다. 그냥 자바스크립트 하면 웹에서 동작하는 언어라고만 생각, 즉 클라이언트 측 언어라고 생각했다. 하지만 node.js는 자바스크립트인데 웹브라우저가 아닌, 서버 환경에서 동작한다고 한다. 처음에는 '그게 뭐?'란 생각이 들었지만, 계속 해서 공부하면서 좀 알게 된 듯 하다. 또한 공부를 하면서 이벤트 기반과 스레드 기

MYSQL PASSWORD() 이용하여 암호화 주의 할점 및 TIP

PASSWORD()함수를 이용하여 암호화 복호화를 할 수 있는데, 자꾸 안되서 이것저것 찾아본 결과 여러가지 사실을 알게 되었다. (하루 종일 삽질만 ㅋㅋㅋㅋ괜찮다 ㅋㅋㅋㅋ 다음에 실수 안하면 되니까~!) 우선 주의할 점 및 팁부터 적겠다. 1. password의 사이즈를 정할 때 암호화 했을때의 글자수를 생각해서 넉넉히 잡도록 한다. 예) password varchar(20) 으로 해놓고  암호화 하면 짤린다. 울뻔 했다.. 2. MYSQL 4.대와 MYSQL 5.대 주의 할 점~! OLD_PASSWORD(), PASSWORD() 4.1대의 PASSWORD()의 경우 16바이트 해시값을 생성 했었는데 이게 지금와서는 OLD_PASSWORD()로 바뀌었다. 4.1대  기존의 PASSWORD() -> OLD_PASSWORD()함수로 5.대의 경우 41바이트 해시값을 통해 생성하며, PASSWORD()로 사용한다. etc/my.cnf에 [mysqld] old_password=?? ?? ->0이면 password, old_password각각 함수에 맞게 생성 ?? ->1이면 password, old_password 동일하게 16바이트 해쉬값 생성 MYSQL에서 패스워드 암호화 하기 및 검색하기 예제)   Insert into `t_memberinfo` (   `id`,               `name`,               `email`,               `password`,               `reg_date` )values ('test','test임','jihye@example.com',  PASSWORD('test') , SYSDATE()) 예제) select * from t_memberinfo where password=  PASSWOR

DB 쿼리문 간략 메모

가끔 쓰긴 하지만 때론 헷갈려서 구글링 하는 것중 하나! 바로 쿼리문 -_-; Select문은 기억이 나지만, Create와 Insert 등 헷갈리는 것이 몇 있다.  따라서 헷갈리는 것 몇가지를 기록 해두려고 한다. 1. Create  Create Table `테이블명`(                               `필드명` varchar(??) NOT NULL,                               `필드명` varchar(??) NOT NULL,                               `필드명` int NOT NULL,                               `reg_Date` datetime NOT NULL,                               PRIMARY KEY(`필드명`) ) * MySql 몇 버전 이상부터는 varchar가 Byte가 아닌, 글자수를 뜻한다고 한다. 참고 할 것! 2. Insert Insert Into `테이블명`( `필드명`, `필드명`, `필드명`, `필드명` ) values (' ', ' ', ' ', ' ') * `'기호 구분해서 쓸것! 마지막 필드명에는 ,기호 붙이지 말것! (mac에서 SQL프로그램 사용시 작동함) 3. Update update 테이블명 SET 해당컬럼명='값', 해당컬럼명='값' WHERE 컬럼명='값' 예) update t_memberinfo set name='누굴까' where id='admin' 4. Delete delete from테이블명 where 해당컬럼명='값' 예) delete from t_memberinfo  where id='test'