WAMP란?

Windows Apache Mysql PHP의 약자이다. 즉, 윈도우상에서 MYSQL과 PHP을 사용하는 아파치 웹 서버이다.

 

바로 설치 해보겠다.

 

wamp server 다운로드 링크

https://sourceforge.net/projects/wampserver/

 

WampServer

Download WampServer for free. A Windows Web development environment for Apache, MySQL, PHP databases. WampServer is a Web development platform on Windows that allows you to create dynamic Web applications with Apache2, PHP, MySQL and MariaDB. WampServer au

sourceforge.net

1. Download 클릭

 

2. exe 파일 실행

 

3. 언어 선택

 

4. 동의 체크 후 Next> 클릭

 

5. 대충 읽고 Next> 클릭

 

6. 필자는 이미 설치를 했기 떄문에 임의의 폴더로 경로를 설정했지만 상관 없으신 분들은

디폴트로 설정된 c:\wamp64를 건들지 않고 Next> 클릭하시면 됩니다.

 

7. Install 클릭

 

설치중....

 

 

8. 인터넷 익스플로러가 아닌 다른 웹브라우저를 WampServer에서 사용하는 디폴트 웹브라우저로 지정하려면 를 선택합니다. 저는 디폴트 웹브라우저를 크롬으로 설정 하겠습니다.

 

9. 노트패드가 아닌 다른 편집기를 WampServer에서 사용하는 디폴트 에디터로 지정하려면 를 선택합니다. 저는 Visual Stdio Code를 할 겁니다. 

 

10. 대충 읽고 Next> 클릭

 

11. Finish 클릭

 

12. 바탕화면에 설치된 wampserver64를 클리하여 실행 한다.

13. 우측 하단에 숨겨진 아이콘을 클릭해보면 아래와 같은 아이콘을 확인 할 수 있다.

(빨강색 아이콘 : 서버 중지 상태)

(주황색 아이콘 : 서버 로딩중)

(초록색 아이콘 : 서버 실행 상태)

14. 아래와 같이 wamp서버 아이콘을 왼클릭하여 mysql을 클릭하고 mysql console을 선택한다.

 

15. 그리하면 아래와 같은 화면이 뜬다. 디폴드 사용자는 root이다. ok를 눌러준다.

 

16. 처음 mysql root 사용자의 비번은 읍다. 기냥 Enter를 눌러준다. 

 

17.  접속 했으면 root 비번을 설정해 준다.

1
mysql> SET PASSWORD FOR root@localhost = PASSWORD("설정하고자 하는 비번입력");
 

이후 exit; 명령어로 mysql를 종료하고

 

18.  phpMyAdmind으로 접속 해보자.

 

19. 앞서 설정한 root의 비번을 입력 한다.

 

20. 빨강색으로 강조한 부분을 확인 해보자. mysql 포트번호, 사용자 등등...

 

php 버전 변경 방법은 다음과 같다.

[HTML] - search.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!DOCTYPE html>
<html>
        <script type=text/javascript src="{{url_for('static', filename='jQuery.js') }}"></script>
        <script>
        function test(){
                var text_data = $('#item_id').val();
                $.ajax({
                        type : 'POST',                                  <!--GET / POST-->
                        url : 'http://ip주소:5000/item_request',
                        data : {
                                item_id:text_data                       <!--key : "value"-->
                        },
                        dataType : 'JSON',
                        success : function(result){
                                alert("result = "+ result);
                                $('#a').html(result);
                        },
                        error : function(xtr,status,error){
                                alert(xtr +":"+status+":"+error);
                        }
                });
        }
        </script>
        <body>
                <p>검색하고자 하는 아이템을 입력하세요.</p>
                <input type = "text" name="item_id" id="item_id"/>
                <input type = "button" value = "데이터 요청" onclick="test()"/>
                <h1 id ="a"></h1>
        </body>
</html>
 
 

[Flask(python)] -controller.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from flask import Flask, request, Response, jsonify, render_template
 
app = Flask(__name__)
app.debug = True
 
import json
import mysql.connector
 
db = mysql.connector.connect(host="DB가 설치된 IP주소", user="DB사용자",passwd="DB비번", db='DB명', port=DB포트번호)
curs = db.cursor()
 
@app.route('/')
def index():
    return render_template('index.html')
 
@app.route('/search')
def item_search():
    return render_template('search.html')
    
@app.route('/item_request', methods =['POST'])
def item_query():
    value1 = request.form['item_id']
    item_sql = "select * from student where id ='"+value1+"'"
    curs.execute(item_sql)
    row_headers=[x[0for x in curs.description]
    rows=curs.fetchall()            
    json_data=[]                                        #list
    for result in rows:
        json_data.append(dict(zip(row_headers,result)))
    
    json_return=json.dumps(json_data[0])   #string #json
 
    return jsonify(json_return)
 
    curs.close()
 
if __name__=='__main__':
    app.run(host='0.0.0.0',port=5000)
 
db.close()
 
 

[index.html]

1
2
3
4
5
6
7
8
<!DOCTYPE html>
<html>
        <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
        <body>
            <p>정보</p>
            <br><a href ="http://ip:5000/search">item search</a>
        </body>
</html>
 
 

[실행 화면]

 

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()함수를 사용하면 된다.

[html]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!DOCTYPE html>
<html>
        <script type=text/javascript src="{{url_for('static', filename='jQuery.js') }}"></script>
        <script>
        function test(){
                var text_data = $('#SensorID').val();
                $.ajax({
                        type : 'POST',                                  <!--[GET / POST] 둘중 하나 선택-->
                        url : 'http://192.168.0.2:5000/request',
                        data : {
                               SensorID:text_data                       <!--{key : "value"}-->
                        },
                        dataType : 'JSON',
                        success : function(result){
                                alert("result = "+ result);
                        },
                        error : function(xtr,status,error){
                                alert(xtr +":"+status+":"+error);
                        }
                });
        }
        </script>
        <body>
                <p>검색하고자 하는 아이템을 입력하세요.</p>
                <input type = "text" name="SensorID" id="SensorID"/>
                <input type = "button" value = "데이터 요청" onclick="test()"/>
        </body>
</html>
 

[Flask API Server]

1
2
3
4
5
6
7
8
9
10
@app.route('/request', methods =['POST'])
def query():
    value = request.form['SensorID']
    sql = "select esnData from ESensorTable where esnSensorId ='"+value+"'"
    curs.execute(sql)
    data_list=curs.fetchall()       
    data= data_list[0]              
    jsondata=json.dumps(data[0])   <!--json문법으로 바꿔준다.-->
    
    return jsondata
 

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 모두 용량일 부족하다면 백업을 할 수 밖에 읍다ㅠㅠ

crontab -

예약된 작업 리스트 출력. 현재 아무런 작업이 예약되어있지 않아 "no crontab for hadoop" 로 나온다.

1
2
[hadoop@master ~]$ crontab -l
no crontab for hadoop
 

crontab -e

등록 및 수정, 삭제

1
[hadoop@master ~]$ crontab -e
 

작성 방법

분,시,일,월,요일 파일명

분 : 0~59

시 : 0~23

일 : 1~31

월 : 1~12

요일 : 0~6 / 0-일, 1-월, 2-화, 3-수, 4-목, 5-금, 6-토

 

예시

1분 마다 실행

1
[hadoop@master ~]$ * * * * * test.sh
 

매시 10분, 45분에 실행

1
[hadoop@master ~]$ 10,45 * * * * test.sh
 

 

매 오전 5시 10분, 45분에 실행

1
[hadoop@master ~]$ 10,45 5 * * * test.sh
 

 

매월 일요일 오전 5시 10분, 45분에 실행

1
[hadoop@master ~]$ 10,45 5 * * 0 test.sh
 

 

 

혹여 본인의 컴퓨터의 타임존하고 맞지 않는 경우가 있으니 아래와 같이 꼭 확인하세요.

1
2
[hadoop@master ~]$ date
2019. 05. 16. (목) 14:29:39 KST
 

KST 는 한국 표준시 이다.

'Centos7' 카테고리의 다른 글

Shell script에서 MySQL Query 사용하는 방법  (0) 2019.05.15

+ Recent posts