얼마 전 업무를 하다가

Apache HBase 에서는 client 와 Region Server 사이에서 통신은 어떻게 이루어질까 하는 의문이 들었다.

그래서 HBase 소스를 보니 HBase 에서는 모든 통신을 ZooKeeper 를 통해서 한다는걸 알았다.

소스 상에서는 ZooKeeper 에다가 node 에 변경을 가하고 끝이다.

그러면 HBase 를 띄울 때 같이 실행된 ZKWatcher 에서는 해당 node 를 계속 listen 하고 있다가 node 가 변경되면 뭔가의 작업이 이루어지는 구조였다.

그래서 mapper 가 많은데 mapper 에서 HTable 을 열어서 뭔가의 작업을 하면 항상 ZooKeeper max connection 에러가 나서 Region Server 가 몇개 죽거나 그랬다

애초에 mapper 에서 HTable.delete() 를 한다는게 말이 안되는 거였다.

왜냐하면 HTable 을 열고 뭔가 작업을 하면 HBase cluster 전체에 있는 Region Server 전체가 실행할 것이다 근데 그걸 모든 mapper 에서 실행했으니 ZooKeeper max connection 을 초과하는게 당연한 얘기일 것이다.


그리고 가끔 Apache incubator project list 를 보는데 Ratis 라는 project 를 보니 ZooKeeper 와 비슷한 project 였다.

Ratis project 는 Raft 알고리즘의 구현체이다.

Raft 알고리즘은 대표적인 합의 알고리즘(Consensus algorithm)인 Paxos 보다 이해가 쉽고 구현이 쉬운 알고리즘이라고 소개하고 있다.

구글링 해보면 합의 알고리즘이란 분산환경에서 신뢰성을 보장하도록 하는 알고리즘으로 최근 블록체인이 이슈가 되면서 합의 알고리즘 포스팅도 많아진 것 같다.


다음 포스팅은 Raft Protocol 논문을 읽고 요약해봐야겠다

'[프로그래밍]' 카테고리의 다른 글

Apache Ratis 소개  (3) 2018.03.21
java 로 KMP 알고리즘  (0) 2017.12.21
dfs 알고리즘을 java 로 구현하기  (0) 2017.02.16
[IntelliJ] SVN 커밋 시 'is out of date' 에러 문제  (0) 2015.10.23
rsync 로 CRAN mirroring  (0) 2015.10.06
GIS shp 파일 변환  (0) 2015.07.28
Posted by FeliZ_하늘..

댓글을 달아 주세요

  1. FeliZ_하늘.. 2018.03.26 19:56 신고  댓글주소  수정/삭제  댓글쓰기

    https://www.youtube.com/watch?v=JEpsBg0AO6o

  2. FeliZ_하늘.. 2018.03.26 19:56 신고  댓글주소  수정/삭제  댓글쓰기

    https://www.youtube.com/watch?v=YbZ3zDzDnrw

  3. FeliZ_하늘.. 2018.10.22 21:15 신고  댓글주소  수정/삭제  댓글쓰기

    아마 이때부터 장비 노후화가 진행된 것 같다
    BulkLoad 를 하면 hdfs schema 가 다르면 copy 를 하고 schema 가 같으면 move 를 하는데 thread 를 여러개 만들어서 실행한다
    이때 thread 개수는 nrThreads = conf.getInt("hbase.loadincremental.threads.max", Runtime.getRuntime().availableProcessors()); 이다. (BulkLoad source 중)
    일할 때 이것마저 여러개를 실행하니
    node 의 IO 가 급격히 올라가고 ssh 도 접속이 힘들어지더니
    Ambari 에서는 Heartbeat Lost 됐다가 결국엔 reboot 됐다
    그래서 BulkLoad 를 순차로 실행하도록 수정하거나 thread 개수를 수정하거나 해야했다

'[Java]' 카테고리의 다른 글

java 에서 숫자의 자릿수 알아내기  (0) 2018.01.20
remote visual vm  (0) 2016.12.18
RxJava  (0) 2016.02.23
BigInteger 최대공약수 gcd 최소공배수 lcm 구하기  (0) 2016.02.22
java 로 클립보드 사용하기  (0) 2015.10.30
java 로 동영상 처리  (0) 2015.10.28
Posted by FeliZ_하늘..

댓글을 달아 주세요

'[프로그래밍]' 카테고리의 다른 글

Apache Ratis 소개  (3) 2018.03.21
java 로 KMP 알고리즘  (0) 2017.12.21
dfs 알고리즘을 java 로 구현하기  (0) 2017.02.16
[IntelliJ] SVN 커밋 시 'is out of date' 에러 문제  (0) 2015.10.23
rsync 로 CRAN mirroring  (0) 2015.10.06
GIS shp 파일 변환  (0) 2015.07.28
Posted by FeliZ_하늘..

댓글을 달아 주세요

hawq 가 설치 된 모든 노드에서 JAVA_HOME 을 지정한 후 아래 명령어를 실행한다



그리고 hawq master 에서 아래 명령어를 실행한다



pg_language table 을 조회해보면 java 와 javau 가 추가된 것을 확인할 수 있다


gpadmin=# select oid, * from pg_language;

  oid  | lanname  | lanispl | lanpltrusted | lanplcallfoid | lanvalidator | lanacl 

-------+----------+---------+--------------+---------------+--------------+--------

    12 | internal | f       | f            |             0 |         2246 | 

    13 | c        | f       | f            |             0 |         2247 | 

    14 | sql      | f       | t            |             0 |         2248 | 

 10885 | plpgsql  | t       | t            |         10883 |        10884 | 

 16542 | java     | t       | t            |         16540 |            0 | 

 16543 | javau    | t       | f            |         16541 |            0 | 

(6 rows)


제대로 java 가 실행되는 지 확인해보기 위해서 아래를 실행해봤다


gpadmin=# create function get_property(varchar) returns varchar as 'java.lang.System.getProperty' language java;

CREATE FUNCTION

gpadmin=# select get_property('user.name')

gpadmin-# ;

 get_property 

--------------

 gpadmin

(1 row)


gpadmin=# select get_property('user.home');

 get_property  

---------------

 /home/gpadmin

(1 row)



'[BigData] > [HDP]' 카테고리의 다른 글

HAWQ 2.1.1.0 에서 pljava 활성화  (0) 2017.04.08
HDP 2.4.2 install with Ambari 2.2.2.0  (0) 2016.06.18
Posted by FeliZ_하늘..

댓글을 달아 주세요

hdp 의 hdb(hawq) 에서 redis 를 사용해 볼 목적으로 redis 를 설치했다


hdp 는 6개의 노드로 구성했고 namenode HA, resourcemanager HA 가 설정돼있고 datanode 는 3개이다


hawq 도 master, standby master, segment 3개로 구성했다


목표는 6개의 노드 전체에 redis 를 설치한 후 cluster 로 묶는 것이다.


아래 문서들을 참조하였다


https://redis.io/topics/cluster-tutorial

http://the-earth.tistory.com/entry/redis-cluster-%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0

https://www.facebook.com/notes/yongbok-kim/redis-cluster-%EA%B0%84%EB%8B%A8-%EC%84%A4%EC%A0%95/704524782949857/

http://www.redisgate.com/redis/cluster/cluster.php


아래 명령어를 실행하여 컴파일 했다



그리고나서 src 아래의 모든 파일을 내가 사용 할 redis directory 에 복사했다


나는 /usr/local/redis/redis-3.2.8 디렉토리를 만들어 여기에 복사한 뒤


/usr/local/redis/default 라는 링크를 만들어 위에서 만든 디렉토리에 링크를 걸어줬다


그리고 내가 수정 한 redis.conf 는 아래 5개이다 (port 는 default 값 6379 를 그대로 사용했다)


그리고 다운받고 압축을 풀었던 디렉토리에 존재하는 redis.conf 를 /usr/local/redis/default 아래에 복사했다

bind 0.0.0.0
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000

그리고나서 아래 명령어를 실행하여 cluster 를 생성한다. (꼭 IP 로 적어야 정상실행 된다)

./redis-trib.rb create \
172.16.196.150:6379 \
172.16.196.151:6379 \
172.16.196.152:6379 \
172.16.196.153:6379 \
172.16.196.154:6379 \
172.16.196.155:6379

redis-trib.rb 를 실행할 때 각종 오류가 났다


1. rubygems 가 설치 돼있지 않음

-> yum install rubygems 를 실행했다


2. ruby 에서 redis 를 설치하지 않음

/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)

from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'

from ./redis-trib.rb:25

-> gem install redis 를 실행했다


3. redis-server 를 실행하지 않음

-> /usr/local/redis/default/redis-server /usr/local/redis/default/redis.conf 를 실행함


4. redis cluster cannot connect to node 오류가 발생함

-> redis.conf 에서 bind 값을 127.0.0.1 에서 0.0.0.0 으로 수정


5. redis cluster is already busy (Redis::CommandError) 오류가 발생함

-> cluster 로 묶으려는 전 노드에서 아래 명령어를 실행했다

flushall
cluster reset soft

그리고나서 redis-trib.rb 를 재실행한다


[root@admin default]# ./redis-trib.rb create 172.16.196.150:6379 172.16.196.151:6379 172.16.196.152:6379 172.16.196.153:6379 172.16.196.154:6379 172.16.196.155:6379

>>> Creating cluster

>>> Performing hash slots allocation on 6 nodes...

Using 6 masters:

172.16.196.155:6379

172.16.196.154:6379

172.16.196.153:6379

172.16.196.152:6379

172.16.196.151:6379

172.16.196.150:6379

M: b267c9964edae16d5b3c40e49f83c72585cac439 172.16.196.150:6379

   slots:13653-16383 (2731 slots) master

M: 000ac0c60361218076084d513306f15ea0460ab1 172.16.196.151:6379

   slots:10923-13652 (2730 slots) master

M: 16a628108b8ca9ecdcb353c1472a3e36d3269699 172.16.196.152:6379

   slots:8192-10922 (2731 slots) master

M: 99bd9cdd76efaa9a438844339114e654c3e92e6b 172.16.196.153:6379

   slots:5461-8191 (2731 slots) master

M: 4757a336d40f0203032acef88b3b440ea9f94152 172.16.196.154:6379

   slots:2731-5460 (2730 slots) master

M: 7d879254412e8636d106ea64161e95b8b8f09f13 172.16.196.155:6379

   slots:0-2730 (2731 slots) master

Can I set the above configuration? (type 'yes' to accept): yes

>>> Nodes configuration updated

>>> Assign a different config epoch to each node

>>> Sending CLUSTER MEET messages to join the cluster

Waiting for the cluster to join...

>>> Performing Cluster Check (using node 172.16.196.150:6379)

M: b267c9964edae16d5b3c40e49f83c72585cac439 172.16.196.150:6379

   slots:13653-16383 (2731 slots) master

   0 additional replica(s)

M: 000ac0c60361218076084d513306f15ea0460ab1 172.16.196.151:6379

   slots:10923-13652 (2730 slots) master

   0 additional replica(s)

M: 16a628108b8ca9ecdcb353c1472a3e36d3269699 172.16.196.152:6379

   slots:8192-10922 (2731 slots) master

   0 additional replica(s)

M: 4757a336d40f0203032acef88b3b440ea9f94152 172.16.196.154:6379

   slots:2731-5460 (2730 slots) master

   0 additional replica(s)

M: 99bd9cdd76efaa9a438844339114e654c3e92e6b 172.16.196.153:6379

   slots:5461-8191 (2731 slots) master

   0 additional replica(s)

M: 7d879254412e8636d106ea64161e95b8b8f09f13 172.16.196.155:6379

   slots:0-2730 (2731 slots) master

   0 additional replica(s)

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

[root@admin default]# ./redis-cli cluster nodes

b267c9964edae16d5b3c40e49f83c72585cac439 172.16.196.150:6379 myself,master - 0 0 1 connected 13653-16383

000ac0c60361218076084d513306f15ea0460ab1 172.16.196.151:6379 master - 0 1491643229950 6 connected 10923-13652

16a628108b8ca9ecdcb353c1472a3e36d3269699 172.16.196.152:6379 master - 0 1491643228945 2 connected 8192-10922

4757a336d40f0203032acef88b3b440ea9f94152 172.16.196.154:6379 master - 0 1491643228443 4 connected 2731-5460

99bd9cdd76efaa9a438844339114e654c3e92e6b 172.16.196.153:6379 master - 0 1491643229950 3 connected 5461-8191

7d879254412e8636d106ea64161e95b8b8f09f13 172.16.196.155:6379 master - 0 1491643228945 5 connected 0-2730

[root@admin default]# 

'[DB] > [Redis]' 카테고리의 다른 글

CentOS 6.7 에서 Redis cluster 구축  (0) 2017.04.08
Posted by FeliZ_하늘..

댓글을 달아 주세요

dfs 알고리즘


'[프로그래밍]' 카테고리의 다른 글

Apache Ratis 소개  (3) 2018.03.21
java 로 KMP 알고리즘  (0) 2017.12.21
dfs 알고리즘을 java 로 구현하기  (0) 2017.02.16
[IntelliJ] SVN 커밋 시 'is out of date' 에러 문제  (0) 2015.10.23
rsync 로 CRAN mirroring  (0) 2015.10.06
GIS shp 파일 변환  (0) 2015.07.28
Posted by FeliZ_하늘..

댓글을 달아 주세요

remote visual vm

[Java] 2016. 12. 18. 23:55

http://jnylove.tistory.com/335

'[Java]' 카테고리의 다른 글

java 에서 숫자의 자릿수 알아내기  (0) 2018.01.20
remote visual vm  (0) 2016.12.18
RxJava  (0) 2016.02.23
BigInteger 최대공약수 gcd 최소공배수 lcm 구하기  (0) 2016.02.22
java 로 클립보드 사용하기  (0) 2015.10.30
java 로 동영상 처리  (0) 2015.10.28
Posted by FeliZ_하늘..

댓글을 달아 주세요

ssh 접속이 느릴 때

[Mac] 2016. 11. 16. 23:37

ssh 접속이 느려서 이것저것 테스트를 해봤는데


아이피를 입력하면 접속이 빠른데 hostname 을 입력하면 접속이 느렸다


그래서 /etc/ssh/ssh_config 파일에 AddressFamily inet 를 추가해줬다


기본은 AddressFamily any 가 주석처리 돼있다


http://jeromejaglale.com/doc/mac/fix_ssh_connection_delays


위 글에서 2015년 12월 29일 댓글 참고.

'[Mac]' 카테고리의 다른 글

ssh 접속이 느릴 때  (0) 2016.11.16
vim syntax highlight 컬러 적용  (0) 2016.03.02
맥에서 ls color 바꾸기  (0) 2015.06.24
Posted by FeliZ_하늘..

댓글을 달아 주세요

CentOS 6.7 에서 SVN Repository 를 구축하고 http 로 접속한다.

<PROJECT>, <USERNAME>, <PASSWORD> 는 각자에 맞게 설정한다


# root 로 작업


# 1.7 로 할 경우만 설치

wget http://opensource.wandisco.com/rhel/6/svn-1.7/RPMS/x86_64/mod_dav_svn-1.7.22-1.x86_64.rpm

wget http://opensource.wandisco.com/rhel/6/svn-1.7/RPMS/x86_64/subversion-1.7.22-1.x86_64.rpm

wget http://opensource.wandisco.com/rhel/6/svn-1.7/RPMS/x86_64/subversion-tools-1.7.22-1.x86_64.rpm


# 1.6 으로 할 경우

yum install subversion mod_dav_svn


mkdir -p /var/www/svn/repos

cd /var/www/svn/repos

svnadmin create --fs-type fsfs <PROJECT>


vim /etc/httpd/conf.d/subversion.conf

# WANdisco Subversion Configuration

# For more information on HTTPD configuration options for Subversion please see:

# http://svnbook.red-bean.com/nightly/en/svn.serverconfig.httpd.html

# Please remember that when using webdav HTTPD needs read and write access your repositories.


# Needed to do Subversion Apache server.

LoadModule dav_svn_module modules/mod_dav_svn.so

# Only needed if you decide to do "per-directory" access control.

LoadModule authz_svn_module modules/mod_authz_svn.so

# 2016-08-07 hskimsky add

SVNAdvertiseV2Protocol Off


<Location /svn/repos>

  DAV svn

  # SVNPath /opt/repo/

  SVNParentPath /var/www/svn/repos

  ### /svn 로 access 할 경우 Repository 를 List 를 보여주려면 on 으로 설정한다.

  SVNListParentPath on

  AuthType Basic

  AuthName "SVN Repo"

  AuthUserFile /var/www/svn/conf/svn.passwd

  Require valid-user

  ## Path-Based Authorization 를 사용할 경우 설정한다.

  AuthzSVNAccessFile /var/www/svn/conf/svn-access-file

</Location>


mkdir -p /var/www/svn/conf


touch /var/www/svn/conf/svn.passwd

htpasswd -b /var/www/svn/conf/svn.passwd <USERNAME> <PASSWORD>


vim /var/www/svn/conf/svn-access-file

[<PROJECT>:/]

* = r

@admin = rw

@<PROJECT>-developers = rw


[groups]

<PROJECT>-developers = hskimsky

admin = hskimsky


chown -R apache:apache /var/www/svn


아래 URL 접속하고 위에서 입력한 USERNAME, PASSWORD 입력하고 보이면 성공!

http://<SERVER>/svn/repos/<PROJECT>



참고

http://zetawiki.com/wiki/CentOS_%EC%84%9C%EB%B8%8C%EB%B2%84%EC%A0%84_%EC%84%9C%EB%B2%84_%EC%84%A4%EC%B9%98_%EB%B0%8F_%EC%84%A4%EC%A0%95_(svn)#cite_ref-2

Posted by FeliZ_하늘..

댓글을 달아 주세요

apache hawq 는 postgresql 기반이다.

postgis 는 postgresql 에서 gis 연산을 할 수 있도록 해주는 postgresql extension 이다.

postgresql 9.2 이상 설치 가능한 것으로 기억하고 있다.

그런데 최근 greenplum committer 로 예상되는 누군가가 apache hawq 에서 postgis 를 사용 가능하도록 포팅했다.

greenplum gis extension 을 이용했다고 한다.

그래서 아래의 링크를 기반으로


apache hawq 에서 postgis 를 설치하는 아래의 문서를 작성했다.

https://github.com/HaNeul-Kim/apache-hawq-build/blob/master/postgis_for_hawq_build.asciidoc


Posted by FeliZ_하늘..

댓글을 달아 주세요