아래와 같은 명령어를 실행할 때


 sudo docker run -dit --name master --cpu-shares 1024 --memory 10g ubuntu /bin/bash



경고가 뜨는 경우가 있음.


WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. 




아래 사이트의 4번 Memory 해결 방법으로 참고하자.


https://www.joinc.co.kr/w/man/12/docker/limits 








커널 설정의 문제로 swap에 대한 제한을 지원하지 않는다는 경고문구가 뜬다.


지금 사용하는 리눅스 커널은 swap limit capabilities를 지원한다.


grub 설정을 바꾸고 재시작하자.



# vi /etc/default/grub

...

...

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"

# sudo update-grub 

# sudo reboot 




경고 메시지 없이 도커가 실행된다.



# docker run -m=200m --memory-swap=500m -it ubuntu /bin/bash

# root@3b8fe21aa4c4:/# 

 



CLI에서


yarn application -list



명령어로 MR 작업의 리스트를 확인할 수 있습니다.


현재 MR 이 돌아가고 있는지, 성공인지 실패인지 등을 확인할 수 있습니다.




root@e0f41130ffbb:/# yarn application -list

2018-12-27 08:56:37,124 INFO client.RMProxy: Connecting to ResourceManager at master/10.0.0.5:8050

Total number of applications (application-types: [], states: [SUBMITTED, ACCEPTED, RUNNING] and tags: []):3

                Application-Id     Application-Name     Application-Type       User      Queue              State        Final-State        Progress                        Tracking-URL

application_1545820125263_0020            WordCount            MAPREDUCE       root    default           ACCEPTED          UNDEFINED              0%                                 N/A

application_1545820125263_0017            WordCount            MAPREDUCE       root    default            RUNNING          UNDEFINED          36.64%           http://0685e74f8486:42186

application_1545820125263_0018            WordCount            MAPREDUCE       root    default           ACCEPTED          UNDEFINED              0%                                 N/A






그 외의 yarn 명령어는 아래 링크 참고.


https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YarnCommands.html#User_Commands










docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [컨테이너의 이름 혹은 ID]



이렇게 해주면 바로 해당 container가 사용중인 ip 주소가 뽑힌다.




up vote



아래서 퍼왔습니다.


https://stackoverflow.com/questions/17157721/how-to-get-a-docker-containers-ip-address-from-the-host




The --format option of inspect comes to the rescue.

Modern Docker client syntax:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

Old Docker client syntax:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id

Which will return just the IP address.

  • 23
    This is a much, MUCH better solution. Only ask for what you need, if possible! – MikeyB Jan 7 '14 at 2:19
  • 18
    Just a note. The single dash options are being deprecated so that -format will become --format. – jamtur01Mar 22 '14 at 1:42 
  • 6
    Hmm. Getting a <no value> response on a Mac using Fig/Boot2Docker – cevaris Nov 24 '14 at 14:57
  • 37
    !WARNING! This doesn't work anymore. The new format is specific to the container and follows the form {{ .NetworkSettings.Networks.$network.IPAddress }}. The default appears to be bridge, but under docker-compose this will be a specific name that depends on the name of your app (I think from the --project-name flag, though that's also going to depend on what type of networking config you have set up). I wrote a full answer in an answer here stackoverflow.com/questions/17157721/… – Dunk Feb 10 '16 at 15:46 
  • 10
    The answer doesn't work anymore. Run this command to get the IP - docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${CID} – Kasun Gajasinghe Jul 8 '16 at 6:45







MongoDB 에 데이터를 넣기 위해서는 데이터가 json, csv, tsv 형식이어야 한다.


*csv는 몇 가지 필드를 쉼표(,)로 구분한 텍스트 데이터 및 텍스트 파일

반면 tsv는 tap 으로 구분.






아래와 같은 데이터가 있다고 하자.


<test.txt>

aaaaa bbbbb cccccc ddddddd

eeee fffff 111111 gggggg rrrrrrr oooooo ppppppp

llllll 2 22233344 5556677 8899 



나는 위의 데이터를 MongoDB 에 넣기 위해 아래와 같은 csv 파일로 만들고 싶다.


_id, data

1, aaaaa bbbbb cccccc ddddddd

2, eeee fffff 111111 gggggg rrrrrrr oooooo ppppppp

3, llllll 2 22233344 5556677 8899



아래 절차를 따라해보자.



cd


//test.txt를 만든다. 내용은 맨 위에 내용과 같다.

vi test.txt


<test.txt>

aaaaa bbbbb cccccc ddddddd

eeee fffff 111111 gggggg rrrrrrr oooooo ppppppp

llllll 2 22233344 5556677 8899 



//txt 파일을 csv 파일로 만드는 스크립트 파일을 만든다.

vi txt_2_csv.sh


<txt_2_csv.sh>

#!/bin/bash


READ=$1

SAVE=$2


echo "_id,data" > $SAVE


COUNTER=1

while read LINE; do

        echo "$COUNTER,$LINE" >> $SAVE

        COUNTER=$(($COUNTER+1))

done < $1 



sudo chmod 744 txt_2_csv.sh


//txt_2_csv 를 실행하는데, 첫번째 인자로 읽을 파일 이름을 지정하고, 두번째 인자로 저장할 파일 이름을 지정한다.

./txt_2_csv.sh test.txt test.csv


//test.csv 를 확인한다.

vi test.csv






아래는 결과.



<test.txt>




<test.csv>







이런 방식으로 txt 파일을 한 줄씩 읽어서 csv 로 만들 수 있다.


위에 스크립트 내용을 기반으로


csv 파일의 필드를 더 늘린다거나, 이름을 바꾸는 등의 커스터마이징 할 수 있겠다.









csv 가 아니라 tsv 로 바꾸는 스크립트는 아래와 같다.



#!/bin/bash


READ=$1

SAVE=$2


echo "_id       data" > $SAVE


COUNTER=1

while read LINE; do

        echo "$COUNTER  $LINE" >> $SAVE

        COUNTER=$(($COUNTER+1))

done < $1



_id 와 data 사이

$COUNTER 와 $LINE 사이

에 띄어쓰기가 아니라 tab 이어야 한다.


복사 붙여넣기를 하게 되면 띄어쓰기로 붙여넣어지므로 반드시 tab 으로 바꿔주자









참고:




MongoDB 에 넣는 데이터 형식 : https://docs.mongodb.com/manual/reference/program/mongoimport/#synopsis


Bash 파일 한 줄씩 읽기 : https://zetawiki.com/wiki/Bash_%ED%8C%8C%EC%9D%BC_%ED%95%9C%EC%A4%84%EC%94%A9_%EC%9D%BD%EA%B8%B0








도커를 이용하여 MongoDB cluster(sharding)를  만드는 작업을 하고 있었다.


shard 역할을 하는 mongo container 2 개를 만들고

config server 역할을 하는 mongo config server 1개를 만들고

router 역할을 하는 mongo router 1개를 만들었음.



sudo docker network create my-mongo-cluster sudo docker run -d --name mongo-1 --network my-mongo-cluster mongo mongod --shardsvr --port 27017 sudo docker run -d --name mongo-2 --network my-mongo-cluster mongo mongod --shardsvr --port 27017 sudo docker run -d --name mongo-cnf --network my-mongo-cluster mongo mongod --configsvr --port 27017 sudo docker run -d --name mongo-router --net my-mongo-cluster -p 27017:27017 mongo mongos --configdb mongo-cnf:27017 --bind_ip_all



근데 이상하게 mongo router 만 만들면 계속 docker가 Exited 되는거라


이상하게 생각해서 MongoDB 문서를 검색해 봄.


https://docs.mongodb.com/manual/sharding/#sharded-cluster

Sharded Cluster

A MongoDB sharded cluster consists of the following components:

  • shard: Each shard contains a subset of the sharded data. Each shard can be deployed as a replica set.
  • mongos: The mongos acts as a query router, providing an interface between client applications and the sharded cluster.
  • config servers: Config servers store metadata and configuration settings for the cluster. As of MongoDB 3.4, config servers must be deployed as a replica set (CSRS).

 





즉, MongoDB 3.4 버전 이상부터, config server 는 무조건 replica set 이어야 한다.


standalone mode 는 더 이상 지원되지 않는다.




그래서 config server를 replica set 으로 만들고 다시 mongo cluster 를 만들어보았다.


sudo docker network create my-mongo-cluster sudo docker run -d --name mongo-1 --network my-mongo-cluster mongo mongod --shardsvr --port 27017 sudo docker run -d --name mongo-2 --network my-mongo-cluster mongo mongod --shardsvr --port 27017 sudo docker run -d --name mongo-cnf --network my-mongo-cluster mongo mongod --replSet cnf-serv --configsvr --port 27017 docker exec -it mongo-cnf mongo rs.initiate( { _id: "cnf-serv", configsvr: true, members: [ { "_id": 0, "host": "mongo-cnf:27017" }] } ) sudo docker run -d --name mongo-router --net my-mongo-cluster -p 27017:27017 mongo mongos --configdb cnf-serv/mongo-cnf:27017 --bind_ip_all



mongo-cnf 를 run 할 때 --replSet [레플리카 이름] 옵션을 넣는다.

위에선 cnf-serv 를 이름으로 사용함.


mongo-cnf 의 mongo 로 들어가서 위에처럼 initiate 해준다.


mongo router를 run 할 때 --configdb [레플리카 이름]/mongo-cnf:27017 옵션을 넣는다.








만약 레플리카를 더 넣고 싶다면 아래처럼 하면 된다.




sudo docker network create my-mongo-cluster sudo docker run -d --name mongo-1 --network my-mongo-cluster mongo mongod --shardsvr --port 27017 sudo docker run -d --name mongo-2 --network my-mongo-cluster mongo mongod --shardsvr --port 27017 sudo docker run -d --name mongo-cnf-1 --network my-mongo-cluster mongo mongod --replSet cnf-serv --configsvr --port 27017 sudo docker run -d --name mongo-cnf-2 --network my-mongo-cluster mongo mongod --replSet cnf-serv --configsvr --port 27017 sudo docker run -d --name mongo-cnf-3 --network my-mongo-cluster mongo mongod --replSet cnf-serv --configsvr --port 27017 docker exec -it mongo-cnf mongo rs.initiate( { _id: "cnf-serv", configsvr: true, members: [ { "_id": 0, "host": "mongo-cnf-1:27017" }, { "_id": 1, "host": "mongo-cnf-2:27017" }, { "_id": 2, "host": "mongo-cnf-3:27017" }] } ) sudo docker run -d --name mongo-router --net my-mongo-cluster -p 27017:27017 mongo mongos --configdb cnf-serv/mongo-cnf-1:27017, mongo-cnf-2:27017, mongo-cnf-3:27017 --bind_ip_all








+ Recent posts