1
SELECT * FROM sale_item_option_store i WHERE i.i_uid = (SELECT s.uid FROM sale_item s WHERE s.m_id = 9);
 

위와 같은 서브 쿼리문은 아래와 같은 에러를 발생시킨다. 그이유는 '=' 때문이다. 'IN'으로 바꾸어야 한다.

<출처>http://www.gurubee.net/lecture/2179

 

1
SELECT * FROM sale_item_option_store i WHERE i.i_uid IN (SELECT s.uid FROM sale_item s WHERE s.m_id = 9)
 

DB에 없는 값을 주었으면 당연히 rowcount는 0으로 나와야 정상인데...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def test():
    value = request.form['SensorID']
    esn_sql = "SELECT esnData FROM ESensorTable WHERE esnSensorId ='"+value+"'"
    curs.execute(esn_sql)               # 쿼리문 실행
 
    row_result = curs.rowcount          # 쿼리 실행후 가져운 값의 수(가져온 수가 0이라면 SensorID가 없다는 의미)
    
    if row_result == 0:
        return json.dumps({"value":"Fail"})
    else:
        data_list = curs.fetchall()
        data= data_list[0]
        return json.dumps(data[0])
 
    curs.close()
 
 

row_result 의 값이 0이 아니라 -1로 나오길래 찾아보니 아래와 같은 설정을 해주어야 하나보다.

 

해결 방법

1
mysql.connector.connect(host="ip주소", user="사용자명",passwd="비번", db='db명', port=3309, buffered=True)
 

mysql.connector.connect 맨 뒤에 buffered=True 추가

 

설정하니 0으로 나온다.

1
2
3
4
5
>>> json_data = [{'id'1'name''smith''phone''010-1111-1111'}]
>>> print(json_data)
[{'id'1'name''smith''phone''010-1111-1111'}]
>>> print(type(json_data))
<class 'list'>
 

위와 같이 mysql에서 fetchall()함수를 사용하여 JSON 값을 가져오면 대부분 list 형태이다.

 

1
2
3
4
5
>>> json_tuple=json_data[0]
>>> print(json_tuple)
{'id'1'name''smith''phone''010-1111-1111'}
>>> print(type(json_tuple))
<class 'dict'>
 
 

위의 코드는 list를 dict type으로 바꾼거다.

 

1
2
3
4
>>> json.dumps(json_tuple)
'{"id": 1, "name": "smith", "phone": "010-1111-1111"}'
>>> print(type(json.dumps(json_tuple)))
<class 'str'>
 
 

json.dump()함수는 dict type의 데이터를 json문법의 str으로 바꾸어주는 함수이다.

이 함수를 사용하려면 json을 import 해주어야 한다.

 

한대로 json 문법의 str을 dict type으로 바꾸고 싶다면 json.loads()함수를 사용하면 된다.

1
2
3
4
File /tmp/hive/blablabla.... could only be replicated to 0 nodes instead of minReplication (=1). 
There are 3 datanode(s) running and no node(s) are excluded in this operation.
 

위와 같은 에러가 발생하는 원인은 두가지로 볼 수 있겠다.

1. namenode와 datanode가 연동 되지 못해서..(커맨드에 jps를 쳤을때 Master에서 namenode가 안보이거나 Slave에서 datanode가 안보일때)

해결 방법 : namenode 포멧

 - master에서 [하둡 홈]/dfs/namenode폴더 삭제 후 재 생성(slave에서도 datanode폴더 삭제 후 재 생성)

 - 커맨드에 hdfs namenode -format

2. hdfs의 디스크 용량이 가득 찼을때

특정 디스크에 블록이 집중되는 것을 방지하고 고르게 분포되게 끔 balancer를 주기적으로 실행.

만약 slave 모두 용량일 부족하다면 백업을 할 수 밖에 읍다ㅠㅠ

1
2
Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143
 

해결 방법 :

yarn-site.xml 파일에 다음과 같은 코드 작성

1
2
3
4
<property>
      <name>yarn.nodemanager.vmem-check-enabled</name>
      <value>false</value>
</property>
 
 

 

 

필자는 sqoop --options-file [파일명] 명령어 입력시

다음과 같은 에러가 발생하였다.

 

1
access denied for user '계정명'@'호스트네임'
 

위와 같은 에러 발생시 두가지 이유로 

1. 해당 서버에서 mysql port를 개방하지 않아서 발생

해결방법 : mysql port 개방(mysql 디폴트 포트는 3306, 필자는 3309로 mysql 사용할려고 3309로 포트 개방)

1
2
sudo firewall-cmd --permanent--zone=public--add-port=3306/tcp
sudo firewall-cmd --reload
 

 

 

2. 해당 계정에 mysql 접근 권한이 없어서 발생

해결 방법 : 접근 권한 부여

1
2
grant all privileges on *.* to '계정명'@'호스트네임' identified by '비밀번호';
flush privileges;
 
 

 

+ Recent posts