"빨리 밖으로 나와 나랑 놀자~"라고 외치는 날씨다. 외면할 수 없지. 그래서 자전거를 샀다. 한 15만원 정도면 사겠지 했는데 두 배 더 들었다. 워낙 비싼 자전거들이 많아서 "그 정도면 싸네~" 라고 할 사람도 있겠지만 나한테는 좀 비싸게 느껴진다.
In this blog, there are many things that I did and got or get to know, while I am developing applications. I write the articles to remember in mind and I hope they will be helpful for the visitors who read them.
2013년 9월 15일 일요일
내 자전거
"빨리 밖으로 나와 나랑 놀자~"라고 외치는 날씨다. 외면할 수 없지. 그래서 자전거를 샀다. 한 15만원 정도면 사겠지 했는데 두 배 더 들었다. 워낙 비싼 자전거들이 많아서 "그 정도면 싸네~" 라고 할 사람도 있겠지만 나한테는 좀 비싸게 느껴진다.
2013년 9월 3일 화요일
2013년 6월 8일 토요일
C++ Programming Language 4th Edition
2013년 5월 26일 일요일
HttpURLConnection에서 301, 302 오류 발생 시
public InputStream GetHTTPInputStream(URL url) throws Exception { int redirectedCount = 0; while( redirectedCount <= 1 ) // Redirection 1번 허용 { HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); httpConn.setConnectTimeout(10000); //< 연결 제한시간(단위 : msec, 0은 무한) httpConn.setReadTimeout(0); //< 읽기 제한시간(단위 : msec, 0은 무한) httpConn.setUseCaches(false); //< 캐시 사용 여부 설정(기본 설정: true) // URL을 요청하는 방법 설정 (GET|POST|HEAD|OPTIONS|PUT|DELETE|TRACE, 기본 설정: GET) httpConn.setRequestMethod("GET"); int resCode = httpConn.getResponseCode(); if( resCode == HttpsURLConnection.HTTP_OK ) { return httpConn.getInputStream(); } // Redirection 발생하는 경우 else if( resCode == HttpsURLConnection.HTTP_MOVED_TEMP || resCode == HttpsURLConnection.HTTP_MOVED_PERM ) { // Redirected URL 받아오기 String redirectedUrl = httpConn.getHeaderField("Location"); url = new URL(redirectedUrl); } // 이외의 오류는 Exception 처리 else throw new MalformedURLException("can not connect to the url [" + url.toString() + "] Code: " + resCode); ++redirectedCount; } }
2013년 4월 29일 월요일
Java Swing Example
Component 별로 Example이 잘 정리되어 있음.
2013년 4월 3일 수요일
Java enum의 실체
public enum ValueType { Unknown , Text , Number , DateTime ; }
switch
문에서 사용할 때는 차이가 있지만, 위 정의는 다음과 같이 동작하지 않나 싶다.
public class ValueType { public final static Unknown = new ValueType(); public final static Text = new ValueType(); public final static Number = new ValueType(); public final static DateTime = new ValueType(); }
public enum ValueType2 { Unknown("unknown") , Text("string") , Real("real") , DateTime("datetime") ; private final String _description; private ValueType(String description) { this._description = description; } public String getDescription() { return this._description; } }
public enum ValueType2 { Unknown , Text , Number , DateTime ; ... (후략) ... }
public enum ProgramSetting { Instance; //< 유일 객체 /// 속성 저장 멤버 private final HashMap<String, String> _properties; private ProgramSetting() { _properties = new private HashMap<String, String>(); } public String getProperty(String key) { ... } public void setProperty(String key, String value) { ... } ... }
... ProgramSetting.Instance.getProperty(...); ProgramSetting.Instance.setProperty(...); ...
2013년 3월 10일 일요일
Java enum Type
#define
을 이용하면 정의된 값으로 치환되기 때문에 디버깅할 때 힘들다.
이 때 enum을 이용하면, 정수로 변환되어 사용되긴 하지만 enum에서 정의한 단어 즉, 의미있는 단어가 그대로 나오기 때문에 직관적으로 알 수 있다.
someFunc(int valueType)
와 같이 정의했는데 인수로 들어가는 값이
0: Unknown, 1: String, 2: Number, 3: DateTime 이라고 해 보자. 인수를 정수형태로 받기 때문에 0 ~ 3 이외의 값을 입력받을 수 있다. 5가 입력되면 어떻게 처리한단 말인가...
enum ValueType { eUnknown = 0 , eString = 1 , eNnumber = 2 , eDateTime = 3 ; }
someFunc(ValueType valueType)
으로 정의하면 받을 수 있는 인수값이 enum에 정의한 값으로 제한된다. 즉, 형태와 값에 안전한 코드를 생성할 수 있다.
public enum ValueType { Unknown , String , Number , DateTime };
public enum ValueType { Unknown("unknown") , Text("string") , Integer("integer") , Real("real") , DateTime("datetime") ; private String _description; private ValueType(String description) { this._description = description; } public String getDescription() { return this._description; } }
ValueType.Text.getDescription()
와 같이 하면 지정된 enum 값에 할당된 값을 얻을 수 있다.
public enum ValueType { Unknown("unknown") , Text("string") , Integer("integer") , Real("real") , DateTime("datetime") ; private String _description; private ValueType(String description) { this._description = description; } public String getDescription() { return this._description; } public static ValueType getTypeFromString(String description) { for(ValueType valueType : ValueType.values()) { if( description.equalsIgnoreCase(valueType._description) ) return valueType; } return Unknown; } }
getTypeFromString()
을 이용하면,
설정파일에서 값을 읽어 바로 enum으로 변환하여 사용할 수 있다.
2013년 2월 17일 일요일
Expression Parser in Java #1
출처: Wikipedia |
for each token in expression { if token == 'number' token --> output queue if token == 'function' token --> stack if token == 'function argument separator' (e.g. a comma) { while( stack not empty and top of stack != '(' ) pop stack onto output queue if top of stack != '(' mismatched parentheses error. else pop '(' off stack, ignore it. } if token == 'operator' { while( stack not empty and stack top token == 'operator' ) { if token precedence < stack top token or (token == left-associative and precedence <= stack top token) pop stack onto output queue else break } token --> stack } if token == '(' token --> stack if token == ')' { while( stack not empty and stack top token != '(' ) pop stack onto output queue if stack is empty mismatched parentheses error. pop '(' off stack, ignore it. if top of stack == 'function' pop stack onto output queue } } while( stack not empty ) pop stack onto ouput queue
- 우선, 수식을 한땀 한땀 이태리 장인처럼 따서 Token을 추출할 무언가가 필요하다.
- 추출된 Token에 따라 처리할 내용이 달라지는 것을 보아 Token은 특정 형태를 가지고 있다.
- 형태는 수식에 사용되는 연산자(Operator), 숫자(Operand), 함수(Function)와 괄호, 쉼표 등이 있다.
- 연산자는 left-associative, right-associative의 형태를 가진다.
- 알고리즘을 구현하기 위하여 Stack 한개와 Queue 한개가 필요하며,
- 수행완료 후 결과는 Queue가 남는다.
- 수식을 계산을 위한 것이므로 이 Queue에는 계산 순서에 맞게 Token이 위치할 것이다.
- Queue와 Stack에는 Token이 들어 간다. 다양한 Token을 넣기 위한 인터페이스가 필요하다.
- 수행 중 괄호가 맞지 않는 경우 등 사용자 오류를 처리하기 윈한 Exception 클래스가 필요하다.
만들 애 이름 | 기능/역할 | 비고 |
---|---|---|
ExprParser | 수식파서 메인 클래스 | - |
ExprTokenizer | 수식을 잘 잘라서 Token을 뽑아 줄 클래스 | 1번 |
ExprTokenType | Token의 형태를 정의한 Enumeration. 연산자, 괄호, 함수, 피연산자 등을 정의. | 2번, 3번 |
OperatorAssoc | 연산자의 Associative 방법을 정의한 Enumeration | 4번 |
ExprToken | ExprTokenizer에서 Token을 이 객체로 추출 | 2번, 8번 |
OperatorToken | 연산자를 처리하기 위한 토큰 | 3번 |
FunctionToken | 함수를 위한 토큰 | 3번 |
ValueToken | 피연산자를 대변하기 위한 토큰 | 3번 |
EtcToken | 연산자, 함수, 피연산자 이외 것을 대변하기 위한 토큰. 예를 들어 괄호 같은 거~ | 3번 |
ParserException | 수식파싱 및 값 계산 중 발생할 수 있는 오류 처리 클래스 | 9번 |
만들 애 이름 | 기능/역할 |
---|---|
ExprTokenGallery | 연산자, 함수 형태의 Token을 자신을 표현할 문자와 함께 Key & Value 형태로 관리하는 클래스. |
Calculatable | 연산자나 함수의 실제 계산을 위한 인터페이스. Token을 정의한 클래스에 멤버로 넣어 쉽게 값을 계산할 수 있게 함. |
2013년 1월 29일 화요일
JDBC에서 LOAD DATA INFILE 오류발생
1,A,B
2,,C
3,D,
1,A,B
2,\N,\NC
3,D,\N
LOAD DATA INFILE 'data file path' REPLACE INTO TABLE_NAME FIELD TERMINATED BY ',' LINES TERMINATED BY '\n' (@V1, @V2, @V3) SET COL1 = NULLIF(@V1, '') , COL2 = NULLIF(@V2, '') , COL3 = NULLIF(@V3, '') ;
2013년 1월 28일 월요일
MySQL 재시작 방법
# service mysqld restart or # /etc/init.d/mysqld restart
# service mysqld [start | stop] or # /etc/init.d/mysqld [start | stop]
MySQL 한글이 안될 때
한글이 안 되는 경우
MySQL 사용 시 한글이 안 될 경우 세 부분을 의심해 보아야 한다.
1. MySQL 서버 characterset 설정.
2. 사용하고 있는 툴의 문자 인코딩 지원 종류.
3. 쿼리를 저장한 파일 혹은 데이터 파일의 문자 인코딩 방식.
한글을 사용하려면 문자 인코딩 방식을 euc-kr나 Unicode를 지원해야 한다. 요즘 쿼리 툴은 대부분 Unicode 중 utf-8을 지원하기 때문에 2번은 크게 문제가 되지 않는다. 물론 확인은 해 봐야 한다. 3번도 무료로 사용할 수 있는 Sublime Text 등을 이용하면 쉽게 확인할 수 있다. 문제는 1번이다.
MySQL을 설치하고 utf-8을 기본으로 제공해 주면 좋은데 그렇지가 않다. 다음은 설치 후 MySQL의 상태를 확인한 화면이다.
mysql> status -------------- mysql Ver 14.12 Distrib 5.0.95, for redhat-linux-gnu (x86_64) using readline 5.1 Connection id: 20 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.0.95 Source distribution Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: latin1 Conn. characterset: latin1 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 6 days 5 hours 2 min 54 sec Threads: 1 Questions: 41 Slow queries: 0 Opens: 13 Flush tables: 1 Open tables: 6 Queries per second avg: 0.000 -------------- mysql>
문자 인코딩 방식이 latin1이다. 이러니 한글이 안되지... utf-8으로 바꿔보자.
MySQL Characterset 바꾸기
문자셋을 바꾸려면 /etc/my.cnf 파일의 해당 부분에 다음 내용을 추가한다.
# vi /etc/my.cnf [mysqld] ... default-character-set=utf8 collation-server=utf8_unicode_ci character-set-server=utf8 character-set-client-handshake=FALSE ... [client] default-character-set=utf8 ...
그리고 나서 재시작. 다시 상태를 확인해 보면,
mysql> status -------------- mysql Ver 14.12 Distrib 5.0.95, for redhat-linux-gnu (x86_64) using readline 5.1 Connection id: 2 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.0.95 Source distribution Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 22 sec Threads: 1 Questions: 5 Slow queries: 0 Opens: 12 Flush tables: 1 Open tables: 6 Queries per second avg: 0.227 -------------- mysql>
이제 한글을 사용할 수 있다.
2013년 1월 19일 토요일
HDFS 셀 명령
[hadoop@alpha ~]$ hadoop fs -[command] [args] or [hadoop@alpha ~]$ hadoop dfs -[command] [args]
scheme://authority/path
URI | HDFS | Local FS |
---|---|---|
scheme | 문자열 "hdfs" | 문자열 "file" |
authority | hostname:post | (지정안함) |
path | Linux 파일경로와 동일하게 지정 | |
Exmaple | hdfs://alpha.centos:8020/data/README.txt | file:///opt/hadoop-1.0.4/README.txt |
명령어 | 설명 |
---|---|
cat | hadoop dfs -cat URI [URI ...] |
지정한 파일(들)을 화면에 표시한다. | |
chgrp | hadoop dfs -chgrp [-R] GROUP URI [URI ...] |
지정한 파일의 group을 변경한다. 단, 파일의 소유자이거나 슈퍼유저만 변경 가능하다. "-R" 옵션을 붙이면 하위 디렉토리들도 재귀적으로 그룹이 변경된다. | |
chmod | hadoop dfs -chmod [-R] MODE URI [URI ...] |
지정한 파일의 권한(Permission)을 변경한다. 파일의 소유자이거나 슈퍼유저만 변경 가능할 수 있으며, "-R" 옵션을 붙이면 하위 디렉토리들도 재귀적으로 권한이 변경된다. MODE는 Linux 명령의 chmod와 똑 같이 지정하면 된다. | |
chown | hadoop dfs -chown [-R] [OWNER][:[GROUP]] URI [URI ...] |
슈퍼유저만 사용할 수 있는 파일의 소유자를 변경하는 명령이다. "-R" 옵션을 붙이면 하위 디렉토리들도 재귀적으로 소유자가 변경된다. | |
copyFromLocal | hadoop dfs -copyFromLocal <localsrc> URI |
지정한 로컬 파일을 HDFS로 복사한다. | |
copyToLocal | hadoop dfs -copyToLocal [-ignorecrc] [-crc] URI <localdst> |
지정한 HDFS 내 파일을 로컬 파일로 복사한다. "-ignorecrc" 옵션을 지정하면 CRC 체크를 실패하더라도 복사해 온다. CRC도 복사해 오고 싶으면 "-crc" 옵션을 사용한다. | |
count | hadoop dfs -count [-q] <path> [path ...] |
지정한 디렉토리(들) 내에 있는 디렉토리 개수, 파일 개수, 파일 크기, 디렉토리 명을 순서대로 표시한다.
"-q" 옵션은 할당량(quota)에 대한 정보를 추가로 표시한다. QUOTA, REMAINING_QUATA, SPACE_QUOTA, REMAINING_SPACE_QUOTA 값들이 앞쪽에 붙여 나온다. (왜 이름이 count인지 모르겠다.) |
|
cp | hadoop dfs -cp URI [URI ...] <dest> |
지정한 파일(들)을 복사한다. 여러 파일이 지정된다면 <dest>는 디렉토리이어야 한다. | |
du | hadoop dfs -du [-s] [-h] URI [URI ...] |
지정한 디렉토리에 있는 파일과 디렉토리의 크기를 표시한다.
디렉토리의 경우 디렉토리 내 포함된 파일 및 서브 디렉토리의 크기를 모두 합한 값이 표시된다. -s 옵션은 표시된 파일의 총크기를 표시한다. -h 옵션은 사용자 친화적 형태로 크기를 표시한다. (67108864를 64.0m 표시) ※ 1.0.4에서 -s와 -h는 지원하지 않는 듯~ |
|
dus | hadoop dfs -dus <arg> |
지정한 디렉토리 내 파일, 서브 디렉토리의 크기를 모두 더한 값이 표시된다. | |
expunge | hadoop dfs -expunge |
휴지통을 비운다. 휴지통에 대한 자세한 내용은 HDFS Architecture Guide 참고. | |
get | hadoop dfs -get [-ignorecrc] [-crc] <src> <localdst> |
HDFS 내 지정된 파일을 로컬 파일로 복사한다. copyToLocal 명령과 유사하다. -ignorecrc 옵션은 CRC 체크를 실패하더라도 파일을 복사해 온다. 파일과 CRC를 복사하려면 "-crc" 옵션을 이용한다. |
|
getmerge | hadoop dfs -getmerge <src> <localdst> [addnl] |
지정한 HDFS의 디렉토리 내 모든 파일을 붙여 localdst에 저장한다. addnl을 지정하면 저장 시 파일 사이에 addnl에 지정한 문자(열)가 추가로 붙는다. | |
ls | hadoop dfs -ls URI [URI ...] |
지정한 HDFS 디렉토리(들)에 포함된 파일, 디렉토리 목록을 표시한다. Linux의 "ls -l" 명령과 비슷하다. | |
lsr | hadoop dfs -lsr URI [URI ...] |
ls의 recusive 버전. Linux의 "ls -Rl" 명령과 비슷하다. | |
mkdir | hadoop dfs -mkdir URI [URI ...] |
지정한 경로대로 디렉토리를 생성한다. "/data/text" 디렉토리를 생성하려고 할 때 "/data" 디렉토리가 없다면 생성 후 "/data/text"를 생성한다. Linux의 "mkdir -p ..."와 비슷하게 동작한다. | |
moveFromLocal | hadoop dfs -moveFromLocal <localsrc> <dst> |
복사 후 파일을 삭제하는 것을 제외하면 put 명령과 동일하다. | |
put | hadoop dfs -put <localsrc> ... <dst> |
로컬 PC 내 지정된 파일(들)을 HDFS로 복사한다. 여러 파일을 지정할 경우 <dst>은 디렉토리를 저징해야 한다. | |
rm | hadoop dfs -rm [-skipTrash] URI [URI ...] |
지정한 파일(들)을 지운다. 디렉토리를 지우려면 rmr 명령을 이용, 이 명령은 파일에만 가능하다. "-skipTrash" 옵션을 지정하면 휴지통에 넣지 않고 바로 삭제한다. |
|
rmr | hadoop dfs -rmr [-skipTrash] URI [URI ...] |
Recursive한 rm 버전이다. 디렉토리를 지정하면 포함된 모든 내용을 지우고 지정한 디렉토리도 지운다. "-skipTrash" 옵션을 지정하면 휴지통에 넣지 않고 바로 삭제한다. |
|
setrep | hadoop dfs -setrep Number [-R] <path> |
지정한 파일의 Replication Factor(복제 개수)를 변경한다. "-R" 옵션을 지정하면 recursive하게 동작한다. |
|
stat | hadoop dfs -stat URI [URI ...] |
지정한 디렉토리의 통계정보를 표시한다. 그런데 실제로 해보면 뭔가 좀 이상하다. | |
tail | hadoop dfs -tail [-f] URI |
지정한 파일의 마지막 1KB를 화면에 표시한다. "-f" 옵션은 Linux의 "tail -f ..."와 같다. | |
test | hadoop dfs -test -[ezd] URI |
"-e" 옵션: 지정한 파일이 존재한다면 0을 반환. "-z" 옵션: 파일 크기가 0이라면 0을 반환. "-d" 옵션: 지정한 파일이 디렉토리라면 0을 반환. |
|
text | hadoop dfs -text <src> |
지정한 파일을 텍스트 형태로 화면에 표시한다. zip과 텍스트 형태만 사용할 수 있다. | |
touchz | hadoop dfs -touchz URI [URI ...] |
크기가 0인 파일을 생성한다. |
[hadoop@alpha hadoop-1.0.4]$ ls -l 합계 7524 -rw-rw-r--. 1 hadoop hadoop 446999 2012-10-03 14:17 CHANGES.txt -rw-rw-r--. 1 hadoop hadoop 13366 2012-10-03 14:17 LICENSE.txt -rw-rw-r--. 1 hadoop hadoop 101 2012-10-03 14:17 NOTICE.txt -rw-rw-r--. 1 hadoop hadoop 1366 2012-10-03 14:17 README.txt . . . (중략) . . . drwxr-xr-x. 7 hadoop hadoop 4096 2013-01-11 21:47 docs -rw-rw-r--. 1 hadoop hadoop 6840 2012-10-03 14:17 hadoop-ant-1.0.4.jar -rw-rw-r--. 1 hadoop hadoop 410 2012-10-03 14:17 hadoop-client-1.0.4.jar -rw-rw-r--. 1 hadoop hadoop 3928530 2012-10-03 14:17 hadoop-core-1.0.4.jar -rw-rw-r--. 1 hadoop hadoop 142452 2012-10-03 14:17 hadoop-examples-1.0.4.jar -rw-rw-r--. 1 hadoop hadoop 413 2012-10-03 14:17 hadoop-minicluster-1.0.4.jar -rw-rw-r--. 1 hadoop hadoop 2656646 2012-10-03 14:17 hadoop-test-1.0.4.jar -rw-rw-r--. 1 hadoop hadoop 287807 2012-10-03 14:17 hadoop-tools-1.0.4.jar drwxr-xr-x. 2 hadoop hadoop 4096 2013-01-11 21:47 ivy . . . (중략) . . . drwxr-xr-x. 9 hadoop hadoop 4096 2012-10-03 14:17 webapps [hadoop@alpha hadoop-1.0.4]$ hadoop dfs -mkdir /data/text [hadoop@alpha hadoop-1.0.4]$ hadoop dfs -copyFromLocal *.txt /data/text [hadoop@alpha hadoop-1.0.4]$ hadoop dfs -ls /data/text Found 4 items -rw-r--r-- 3 hadoop supergroup 446999 2013-01-25 22:41 /data/text/CHANGES.txt -rw-r--r-- 3 hadoop supergroup 13366 2013-01-25 22:41 /data/text/LICENSE.txt -rw-r--r-- 3 hadoop supergroup 101 2013-01-25 22:41 /data/text/NOTICE.txt -rw-r--r-- 3 hadoop supergroup 1366 2013-01-25 22:41 /data/text/README.txt [hadoop@alpha hadoop-1.0.4]$ hadoop dfs -mkdir /data/bin [hadoop@alpha hadoop-1.0.4]$ hadoop dfs -copyFromLocal *.jar /data/bin [hadoop@alpha hadoop-1.0.4]$ hadoop dfs -ls /data/bin Found 7 items -rw-r--r-- 3 hadoop supergroup 6840 2013-01-25 23:21 /data/bin/hadoop-ant-1.0.4.jar -rw-r--r-- 3 hadoop supergroup 410 2013-01-25 23:21 /data/bin/hadoop-client-1.0.4.jar -rw-r--r-- 3 hadoop supergroup 3928530 2013-01-25 23:21 /data/bin/hadoop-core-1.0.4.jar -rw-r--r-- 3 hadoop supergroup 142452 2013-01-25 23:21 /data/bin/hadoop-examples-1.0.4.jar -rw-r--r-- 3 hadoop supergroup 413 2013-01-25 23:21 /data/bin/hadoop-minicluster-1.0.4.jar -rw-r--r-- 3 hadoop supergroup 2656646 2013-01-25 23:21 /data/bin/hadoop-test-1.0.4.jar -rw-r--r-- 3 hadoop supergroup 287807 2013-01-25 23:21 /data/bin/hadoop-tools-1.0.4.jar [hadoop@alpha hadoop-1.0.4]$ hadoop dfs -count /data/text 1 4 461832 hdfs://alpha.centos:8020/data/text [hadoop@alpha hadoop-1.0.4]$ hadoop dfs -count /data/bin 1 7 7023098 hdfs://alpha.centos:8020/data/bin [hadoop@alpha hadoop-1.0.4]$ hadoop dfs -count /data 3 11 7484930 hdfs://alpha.centos:8020/data [hadoop@alpha hadoop-1.0.4]$ hadoop dfs -count -q /data none inf none inf 3 11 7484930 hdfs://alpha.centos:8020/data [hadoop@alpha hadoop-1.0.4]$ hadoop dfs -cat /data/text/NOTICE.txt This product includes software developed by The Apache Software Foundation (http://www.apache.org/). [hadoop@alpha hadoop-1.0.4]$ hadoop dfs -chmod 666 /data/text/NOTICE.txt [hadoop@alpha hadoop-1.0.4]$ hadoop dfs -ls /data/text Found 4 items -rw-r--r-- 3 hadoop supergroup 446999 2013-01-25 22:41 /data/text/CHANGES.txt -rw-r--r-- 3 hadoop supergroup 13366 2013-01-25 22:41 /data/text/LICENSE.txt -rw-rw-rw- 3 hadoop supergroup 101 2013-01-25 22:41 /data/text/NOTICE.txt -rw-r--r-- 3 hadoop supergroup 1366 2013-01-25 22:41 /data/text/README.txt [hadoop@alpha hadoop-1.0.4]$ hadoop dfs -du /data 7023098 hdfs://alpha.centos:8020/data/bin 461832 hdfs://alpha.centos:8020/data/text [hadoop@alpha hadoop-1.0.4]$ hadoop dfs -dus /data hdfs://alpha.centos:8020/data 7484930 [hadoop@alpha hadoop-1.0.4]$ mkdir test [hadoop@alpha hadoop-1.0.4]$ cd test [hadoop@alpha test]$ hadoop dfs -getmerge /data/text/ ./MERGED.txt "\n\n\n" 13/01/27 00:41:32 INFO util.NativeCodeLoader: Loaded the native-hadoop library [hadoop@alpha test]$ ls -l 합계 456 -rwxrwxrwx. 1 hadoop hadoop 461832 2013-01-27 00:41 MERGED.txt [hadoop@alpha test]$
2013년 1월 17일 목요일
MySQL / LOAD DATA INFILE 실행 시 ERROR 13
ERROR 13 (HY0000): Can't get stat of '/home/~' (Errcode: 13)
- Others에 읽기 권한이 없는 경우.
- Others가 파일경로 내의 디렉토리에 접근할 수 없는 경우.
- 지정한 파일이 MySQL 서버 내에 없는 경우.
- "LOAD DATA INFILE ~" 구문을 실행 권한이 없는 경우.
mysql> show variables like 'local%';
$ mysql -h 'host' -u 'userName' -p -local-infile=1
2013년 1월 11일 금요일
Eclipse에서 Subversion Commit 문제
Java로 작업할 일이 있어 Eclipse(JUNO)에 Subversion 플러그-인(어떤 건지는 잘 모르겠음)을 설치하여 사용하고 있다. 오늘 야심차게 작업한 소스를 Commit하려고 했는데 아무런 메시지도 없이 계속 사용자 인증화면만 나타나는 것이다. 내 계정 암호가 틀려서 그런가 해서 다른 사람 계정으로 인증하려고 해도 안되고 조용히 인증화면만 보여 줄 뿐이다.
왜 그런지 이것 저것 해 보다가 안 사실! 내가 사용하고 있는 Subversion 플러그-인은 다음과 같은 현상이 있다는 것이다.
- 사용자 계정이 틀리거나 암호가 틀려 인증이 안될 경우 조용히 인증화면만 띄운다.
- 한글로된 계정을 제대로 인식하지 못한다.
뭔가 위 문제를 해결할 옵션 같은 것이 있을텐데 잘 모르겠다. 어떻게 할까 하다가 Tortoise SVN을 이용하여 Commit하였다. Explorer에서 해야 한다는 불편함은 있지만 작업을 빨리 해야 하는 상황이니 어쩔 수 없지. Tortoise SVN은 한글 계정도 잘 처리한다.
플러그-인 이름이 뭔지 알아 내야 하는데... 일하다 보면 일 외에 다른 문제로 시간을 잡아 먹는 경우가 참 많다.
2013년 1월 8일 화요일
피싱 메시지 1588-9999
2. 은행이 자발적으로 정보유출 문제를 알려 줄 리가 없다.
3. 정보가 유출됐으니 보안승급을 하란다. 문맥이 좀 이상하다.
회사에 와서 검색해 보니 많은 분들이 받은 메시지인듯.
뭐든지간에 개인정보를 묻는건 꼭 의심해 봅시다.