apache phoenix의 qps에 jdbc를 연동하려면 다음 코드를 참조해 개발할 수 있다. 


https://www.javaworld.com/article/3030214/big-data/open-source-java-projects-apache-phoenix.html?page=2



내가 테스트한 버전은 다음과 같다.


<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>4.11.0-HBase-1.2</version>
</dependency>


phoenix 상황에 따라서는 설정 값을 주어야 하는데. 

sqlline.py를 실행할 때 hbase-site.xml를 설정하는데. 이에 맞게 jdbc의 속성에도 추가하는 것이 좋다. 



Properties props = new Properties();
props.setProperty("phoenix.schema.isNamespaceMappingEnabled", "true");
props.setProperty("phoenix.functions.allowUserDefinedFunctions", "true");
connection = DriverManager.getConnection("jdbc:phoenix:...", props);


만약 설정을 모른다 해도 어짜치 에러가 난다. pheonix를 jdbc로 연동할 때 에러가 발생하면 https://github.com/apache/phoenix/blob/master/phoenix-core/src/main/java/org/apache/phoenix/exception/SQLExceptionCode.java를 참조하는 것이 좋다.





아래 문제는 phoenix.schema.isNamespaceMappingEnabled를 추가해서. 해결했다.


java.sql.SQLException: ERROR 726 (43M10):  Inconsistent namespace mapping properites.. Cannot initiate connection as SYSTEM:CATALOG is found but client does not have phoenix.schema.isNamespaceMappingEnabled enabled





아래 문제는 phoenix.functions.allowUserDefinedFunctions를 추가해서 해결했다. 


org.apache.phoenix.schema.FunctionNotFoundException: ERROR 6001 (42F01): Function undefined. functionName=[CONCAT]




'hadoop' 카테고리의 다른 글

keytab 파일 확인/cron 사용하기  (0) 2017.12.04
[hadoop] data locality(데이터 지역성)  (0) 2017.11.25
[phoenix] PQS  (0) 2017.10.11
[hadoop] hadoop dfs count 커맨드 예제  (0) 2017.09.12
[hive] reducer에 메모리 할당하기  (0) 2017.07.27
Posted by '김용환'
,

[phoenix] PQS

hadoop 2017. 10. 11. 18:42


apache phoenix server에 접속하기 위해 jdbc 또는 sqlline을 사용할 수 있는 PQS(phoenix query server)가 있다. 


https://phoenix.apache.org/server.html



ha를 구성하기 위해 ha_proxy를 사용할 수 있다. 쓸만할 것 같다. 


https://community.hortonworks.com/articles/9377/deploying-the-phoenix-query-server-in-production-e.html

Posted by '김용환'
,



python3로 마이그레이션 하던 중에 다음과 같은 에러를 만났다.


 {%- for hostname, stat in stat.iteritems() %}

jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'iteritems'





python3의 dict 클래스의 iteritems는 items로 변경되었다.







Posted by '김용환'
,



virtualenv에서 그냥 가상 환경을 실행하면 python2 환경으로 구축된다.



$ virtualenv envname




python3 환경으로 구축하고 싶다면 다음 커맨드를 실행한다.



$ virtualenv -p python3 envname



Posted by '김용환'
,


python 컴파일시 아래와 같은 python 에러가 발생할 수 있다. 




gevent/gevent.corecext.c:5:20: fatal error: Python.h: No such file or directory
#include "Python.h"
^
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1




python 개발 라이브러리가 없어서 에러가 발생한 것이다.




python 2.x라면 다음과 같이 실행한다.


$ sudo apt-get install python-dev



python 3.x라면 다음과 같이 실행한다.


$ sudo apt-get install python3-dev



Posted by '김용환'
,


카산드라 테이블에 STATIC을 선언에 사용할 수 있다. 



STATIC으로 선언된 컬럼은 파티션 키당 하나의 값을 가진다. 

예를 들어 user 라는 테이블이 있고 username, password라는 필드가 있다면, 주어진 username 이름과 연관된 password 값은 정확히 하나만 있다. 이런 모델링을 위해 STATIC이라는 키워드를 사용할 수 있다.


정적 컬럼의 목표는 파티션 키 값을 공유하는 로우가 다른 데이터도 공유하도록 허용하는 것이다. 

정적 컬럼 기능을 유용하게 사용하려면 파티션 키마다 여러 로우가 있어야 한다. 

즉 적어도 하나 이상의 클러스터링 컬럼이 있어야 함을 의미한다. 

클러스터링 컬럼이 없는 테이블에서 정적 컬럼을 선언할 수 없다.


또한..
STATIC은 두 개의 테이블을 하나로 합쳐 JOIN된 결과처럼 보이게 하는 효과가 있다.
A와 B 테이블의 SQL LEFT JOIN 결과와 매우 유사하게 동작한다. (A 테이블의 값은 고정되어 있다. STATIC 적용)



참고 
https://www.datastax.com/dev/blog/cql-in-2-0-6


Posted by '김용환'
,


존경하는 분의 인터뷰 기사.


http://v.media.daum.net/v/20170928202404220?d=y



문 대통령은 1970~1980년대 정권에 반대하는 시위에 참여하고 감옥까지 갔는데 어떻게 계속 투쟁할 수 있었느냐는 질문을 받았다. 이에 "그것은 낙관의 힘, 당장은 어렵더라도 역사의 발전을 잇는 낙관주의, 그게 중요하다고 생각한다"고 답했다. 이어 "그 시절에 '계란으로 바위치기다'라고 말했지만 저는 계란의 힘을 믿었다"며 "그리고 계란의 힘은 증명됐다"고 말했다.


Posted by '김용환'
,

[python3] ++ 연산자

python 2017. 9. 28. 20:03

python3에는 ++ 연산자가 없다.


+= 연산자만 있을 뿐이다.


예제



            if not self.conn.connected:

                retry_count += 1

Posted by '김용환'
,





            

            

python2에서 string 타입에 대해서 decode('utf-8')를 잘 실행할 수 있지만, 

python3에서는 기본이 utf-8이기 때문에 굳이 decode를 사용할 필요가 없다. 따라서 decode 함수도 없다. 



>>> result = ""

>>> str(type(result))

"<class 'str'>"

>>> result.decode('utf-8')

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

AttributeError: 'str' object has no attribute 'decode'

>>>


https://docs.python.org/3/howto/unicode.html


The default encoding for Python source code is UTF-8, so you can simply include a Unicode character in a string literal:





또한 None도 생겼다.


python2에서는 kazoo를 통해서 얻은 값은 empty string이였는데.. python3에서는 None타입을 사용했다.

flask에서는 다음과 같이 사용했다.

{% if node.data == None %}
{% else %}
<span style="word-wrap: break-word">
{{node.data}}
</span>
{% endif %}




그리고 




파이썬2에서 딕셔너리의 iteritems()는 사라지고 items()로 대체되었다.





message = '\n'.join("%s: %s" % (key, val) for (key, val) in (sorted(rep.items())))







그 외


https://wiki.python.org/moin/Python3.0#Built-In_Changes를 참고한다.





파이썬2에서 3로 전환하면서.. 발생했는데..


flask에서는 아래와 같은 코드는 에러가 발생한다 (TypeError: 'NoneType' object is not subscriptable)

if request.json['head_commit'] is not None:


flask 0.10부터 json 프로퍼티는 None을 리턴한다. 2->3 버전 이슈는 아니고 라이브러리 이슈가 있다.


if request.get_json('head_commit') is not None:


Posted by '김용환'
,


파이썬에서 타입, 값을 확인할 수 있는 예제이다. 



type()을 이용해 타입 확인할 수 있다. 


print("aaaaaaa : " + str(type(result)))


str()을 이용해 값을 확인할 수 있다.


print("aaaaaaa : " + str(result))



string 인스턴스라면..


if isinstance(result, str):


string 인스턴스가 아니라면.



if not isinstance(result, str):



None을 확인하는 코드이다.


a = None

if not a:

    print("1")

else:

    print("2")



결과는 다음과 같다.


1



None을 체크하는 코드이다. 


a = "1"

if not a:

    print("1")

else:

    print("2")



결과는 다음과 같다.

2



'python' 카테고리의 다른 글

[python3] ++ 연산자  (0) 2017.09.28
python2와 python3의 차이점 - string.decode()  (0) 2017.09.28
flask 환경 구성하기  (0) 2017.09.19
pyenv 설치 방법  (0) 2017.09.19
[python3] sorted 함수 예제  (0) 2017.07.20
Posted by '김용환'
,