[demos] Update flink demo to version 1.15.2
Also make both flink job manager and task manager run in Occlum
This commit is contained in:
		
							parent
							
								
									f36d6d465c
								
							
						
					
					
						commit
						efafd12d7c
					
				
							
								
								
									
										18
									
								
								.github/workflows/demo_test.yml
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										18
									
								
								.github/workflows/demo_test.yml
									
									
									
									
										vendored
									
									
								
							| @ -766,16 +766,24 @@ jobs: | ||||
|     - name: Preinstall dependencies and download flink | ||||
|       run: docker exec ${{ github.job }} bash -c "cd /root/occlum/demos/flink && ./preinstall_deps.sh && ./download_flink.sh" | ||||
| 
 | ||||
|     - name: Run jobmanager on host | ||||
|       run: docker exec ${{ github.job }} bash -c "cd /root/occlum/demos/flink && SGX_MODE=SIM ./run_flink_jobmanager_on_host.sh" | ||||
|     - name: Build Occlum instance | ||||
|       run: docker exec ${{ github.job }} bash -c "cd /root/occlum/demos/flink && SGX_MODE=SIM ./build_occlum_instance.sh" | ||||
| 
 | ||||
|     - name: Run flink taskmanager | ||||
|       run: docker exec ${{ github.job }} bash -c "cd /root/occlum/demos/flink && SGX_MODE=SIM ./run_flink_on_occlum_glibc.sh tm > flink.log 2>&1 &" | ||||
|     - name: Run flink job manager on Occlum | ||||
|       run: docker exec ${{ github.job }} bash -c "cd /root/occlum/demos/flink && ./run_flink_on_occlum.sh jm" | ||||
| 
 | ||||
|     - name: Run flink task manager on Occlum | ||||
|       run: | | ||||
|         sleep ${{ env.nap_time }}; | ||||
|         docker exec ${{ github.job }} bash -c "cd /root/occlum/demos/flink && ./run_flink_on_occlum.sh tm > flink.log 2>&1 &" | ||||
|     - name: Run flink task | ||||
|       run: | | ||||
|         sleep ${{ env.nap_time }}; | ||||
|         docker exec ${{ github.job }} bash -c "cd /root/occlum/demos/flink && SGX_MODE=SIM ./run_flink_on_occlum_glibc.sh task" | ||||
|         docker exec ${{ github.job }} bash -c "cd /root/occlum/demos/flink && ./run_flink_on_occlum.sh task" | ||||
| 
 | ||||
|     - name: Check flink job manager's log | ||||
|       if: ${{ always() }} | ||||
|       run: docker exec ${{ github.job }} bash -c "cd /root/occlum/demos/flink; cat occlum_instance_jobmanager/flink--standalonesession-0.log" | ||||
| 
 | ||||
|     - name: Check flink task manager's log | ||||
|       if: ${{ always() }} | ||||
|  | ||||
| @ -6,21 +6,38 @@ Related dependencies: openjdk-11 | ||||
| ./preinstall_deps.sh | ||||
| ``` | ||||
| 
 | ||||
| ### Run the flink jobmanager | ||||
| ### Download flink | ||||
| ``` | ||||
| ./run_flink_jobmanager_on_host.sh | ||||
| ./download_flink.sh | ||||
| ``` | ||||
| 
 | ||||
| ### Run the taskManager | ||||
| ### Build Occlum instance | ||||
| ``` | ||||
| ./run_flink_on_occlum_glibc.sh tm | ||||
| ./build_occlum_instance.sh | ||||
| ``` | ||||
| 
 | ||||
| ### Run flink jobs example | ||||
| ### Run flink job manager on Occlum | ||||
| ``` | ||||
| ./run_flink_on_occlum_glibc.sh task | ||||
| ./run_flink_on_occlum.sh jm | ||||
| ``` | ||||
| 
 | ||||
| Wait a while for job manager started successfully. You can check the log `occlum_instance_jobmanager/flink--standalonesession-0.log` for detail status. | ||||
| 
 | ||||
| ### Run flink task manager on Occlum | ||||
| 
 | ||||
| Once the job manager is up, you can run the task manager. | ||||
| ``` | ||||
| ./run_flink_on_occlum.sh tm | ||||
| ``` | ||||
| 
 | ||||
| Wait a while for task manager started successfully. You can check the log `occlum_instance_taskmanager/flink--taskmanager-0.log` for detail status. | ||||
| 
 | ||||
| ### Submit a flink job to occlum | ||||
| 
 | ||||
| You can submit an example flink job by using the following command: | ||||
| ``` | ||||
| ./run_flink_on_occlum.sh task | ||||
| ``` | ||||
| 
 | ||||
| **Note:**   | ||||
| 1. If running the jobmanager in docker, please export the port 8081 and 6123 | ||||
| 2. Step 2 may report warning for not finding shared objects. It doesn't matter. To avoid these warnings, you can **REPLACE the FIRST LINE** of config file `/opt/occlum/etc/template/occlum_elf_loader.config` with `/opt/occlum/glibc/lib/ld-linux-x86-64.so.2 /usr/lib/x86_64-linux-gnu:/lib/x86_64-linux-gnu:/usr/lib/jvm/java-11-openjdk-amd64/lib/server`. | ||||
| If running the jobmanager in docker, please export the port 8081 and 6123. | ||||
|  | ||||
							
								
								
									
										41
									
								
								demos/flink/build_occlum_instance.sh
									
									
									
									
									
										Executable file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										41
									
								
								demos/flink/build_occlum_instance.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,41 @@ | ||||
| #!/bin/bash | ||||
| set -e | ||||
| 
 | ||||
| BLUE='\033[1;34m' | ||||
| NC='\033[0m' | ||||
| 
 | ||||
| RPC_BIND_PORT=8089 | ||||
| 
 | ||||
| build_instance() { | ||||
|     postfix=$1 | ||||
|     rm -rf occlum_instance* | ||||
|     occlum new occlum_instance_$postfix | ||||
|     cd occlum_instance_$postfix | ||||
|     new_json="$(jq '.resource_limits.user_space_size = "1MB" | | ||||
|         .resource_limits.user_space_max_size = "8GB" | | ||||
|         .resource_limits.kernel_space_heap_size="1MB" | | ||||
|         .resource_limits.kernel_space_heap_max_size="256MB" | | ||||
|         .resource_limits.max_num_of_threads = 256 | | ||||
|         .entry_points = [ "/usr/lib/jvm/java-11-openjdk-amd64/bin" ] | | ||||
|         .env.default = [ "LD_LIBRARY_PATH=/usr/lib/jvm/java-11-openjdk-amd64/lib/server:/usr/lib/jvm/java-11-openjdk-amd64/lib" ] | | ||||
|         .env.default = [ "FLINK_HOME=/opt/flink" ] | | ||||
|         .env.default = [ "JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64" ] | | ||||
|         .env.default = [ "HOME=/root" ] | | ||||
|         .env.untrusted += [ "TZ", "FLINK_CONF_DIR" ]' Occlum.json)" && \ | ||||
|     echo "${new_json}" > Occlum.json | ||||
| 
 | ||||
|     # Copy JVM and class file into Occlum instance and build | ||||
|     rm -rf image | ||||
|     copy_bom -f ../flink.yaml --root image --include-dir /opt/occlum/etc/template | ||||
|     occlum build | ||||
|     cd .. | ||||
| } | ||||
| 
 | ||||
| update_flink_conf() { | ||||
|     echo "rest.port: $RPC_BIND_PORT" >> flink-1.15.2/conf/flink-conf.yaml | ||||
| } | ||||
| 
 | ||||
| update_flink_conf | ||||
| build_instance jobmanager | ||||
| # flink job manager and taks manager use the same occlum instance | ||||
| cp -rf occlum_instance_jobmanager occlum_instance_taskmanager | ||||
| @ -1,8 +1,8 @@ | ||||
| #!/bin/bash | ||||
| set -e | ||||
| 
 | ||||
| rm -rf flink-1.10.1* | ||||
| wget https://archive.apache.org/dist/flink/flink-1.10.1/flink-1.10.1-bin-scala_2.11.tgz | ||||
| tar -xvzf flink-1.10.1-bin-scala_2.11.tgz | ||||
| rm -rf flink-1.15.2* | ||||
| wget https://archive.apache.org/dist/flink/flink-1.15.2/flink-1.15.2-bin-scala_2.12.tgz | ||||
| tar -xvzf flink-1.15.2-bin-scala_2.12.tgz | ||||
| 
 | ||||
| echo "Download Flink Success" | ||||
|  | ||||
| @ -3,16 +3,26 @@ includes: | ||||
|   - java-11-openjdk-amd64.yaml | ||||
| targets: | ||||
|   # copy flink directory | ||||
|   - target: /bin | ||||
|   - target: /opt/flink | ||||
|     copy:  | ||||
|       - from: ../flink-1.10.1 | ||||
|   # copy localtime | ||||
|       - dirs: | ||||
|           - ../flink-1.15.2/ | ||||
|   # add timezone | ||||
|   - target: /opt/occlum/glibc/share/ | ||||
|     copy: | ||||
|       - dirs: | ||||
|         - /usr/share/zoneinfo | ||||
|   # etc files | ||||
|   - target: /etc | ||||
|     copy: | ||||
|       - dirs: | ||||
|           - /etc/ssl | ||||
|       - files: | ||||
|           - /etc/localtime | ||||
|           - /etc/nsswitch.conf | ||||
|   # copy libnss_files | ||||
|   - target: /opt/occlum/glibc/lib | ||||
|     copy: | ||||
|       - files: | ||||
|           - /opt/occlum/glibc/lib/libnss_files.so.2 | ||||
|           - /opt/occlum/glibc/lib/libnss_dns.so.2 | ||||
|           - /opt/occlum/glibc/lib/libresolv.so.2 | ||||
|  | ||||
| @ -1,3 +0,0 @@ | ||||
| export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/ | ||||
| ./flink-1.10.1/bin/jobmanager.sh start | ||||
| echo -e "${BLUE}Flink jobmanager${NC}" | ||||
							
								
								
									
										86
									
								
								demos/flink/run_flink_on_occlum.sh
									
									
									
									
									
										Executable file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										86
									
								
								demos/flink/run_flink_on_occlum.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,86 @@ | ||||
| #!/bin/bash | ||||
| set -e | ||||
| 
 | ||||
| BLUE='\033[1;34m' | ||||
| NC='\033[0m' | ||||
| 
 | ||||
| script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}"  )" >/dev/null 2>&1 && pwd )" | ||||
| FLINK_BIND_PORT=8089 | ||||
| 
 | ||||
| run_jobmanager() { | ||||
|     logfile="flink--standalonesession-0.log" | ||||
|     echo -e "${BLUE}occlum run JVM jobmanager${NC}" | ||||
|     echo -e "${BLUE}logfile=$logfile${NC}" | ||||
| 
 | ||||
|     cd occlum_instance_jobmanager | ||||
|     occlum run /usr/lib/jvm/java-11-openjdk-amd64/bin/java \ | ||||
|         -Dos.name=Linux -XX:ActiveProcessorCount=4 -Xmx800m -Xms800m \ | ||||
|         -XX:MaxMetaspaceSize=256m -Dlog.file=/host/$logfile \ | ||||
|         -Dlog4j.configuration=file:/opt/flink/conf/log4j.properties \ | ||||
|         -Dlog4j.configurationFile=file:/opt/flink/conf/log4j.properties \ | ||||
|         -Dlogback.configurationFile=file:/opt/flink/conf/logback.xml \ | ||||
|         -classpath /opt/flink/lib/* org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint \ | ||||
|         -D jobmanager.memory.off-heap.size=128mb \ | ||||
|         -D jobmanager.memory.jvm-overhead.min=192mb \ | ||||
|         -D jobmanager.memory.jvm-metaspace.size=256mb \ | ||||
|         -D jobmanager.memory.jvm-overhead.max=192mb \ | ||||
|         -D rest.bind-port=$FLINK_BIND_PORT \ | ||||
|         -D rest.bind-address=0.0.0.0 \ | ||||
|         --configDir /opt/flink/conf \ | ||||
|         --executionMode cluster \ | ||||
|         & | ||||
|     cd .. | ||||
| } | ||||
| 
 | ||||
| run_taskmanager() { | ||||
|     logfile="flink--taskmanager-0.log" | ||||
|     echo -e "${BLUE}occlum run JVM taskmanager${NC}" | ||||
|     echo -e "${BLUE}logfile=$logfile${NC}" | ||||
| 
 | ||||
|     cd occlum_instance_taskmanager | ||||
|     occlum run /usr/lib/jvm/java-11-openjdk-amd64/bin/java \ | ||||
|         -Dos.name=Linux -XX:ActiveProcessorCount=2 -XX:+UseG1GC \ | ||||
|         -Xmx600m -Xms600m -XX:MaxMetaspaceSize=256m \ | ||||
|         -Dlog.file=/host/$logfile \ | ||||
|         -Dlog4j.configuration=file:/opt/flink/conf/log4j.properties \ | ||||
|         -Dlog4j.configurationFile=file:/opt/flink/conf/log4j.properties \ | ||||
|         -Dlogback.configurationFile=file:/opt/flink/conf/logback.xml \ | ||||
|         -classpath /opt/flink/lib/* org.apache.flink.runtime.taskexecutor.TaskManagerRunner \ | ||||
|         --configDir /opt/flink/conf -D taskmanager.memory.network.min=128mb \ | ||||
|         -D taskmanager.cpu.cores=1.0 -D taskmanager.memory.task.off-heap.size=0b \ | ||||
|         -D taskmanager.memory.jvm-metaspace.size=256mb -D external-resources=none \ | ||||
|         -D taskmanager.memory.jvm-overhead.min=192mb \ | ||||
|         -D taskmanager.memory.framework.off-heap.size=128mb \ | ||||
|         -D taskmanager.memory.network.max=128mb \ | ||||
|         -D taskmanager.memory.framework.heap.size=128mb \ | ||||
|         -D taskmanager.memory.managed.size=256mb \ | ||||
|         -D taskmanager.memory.task.heap.size=383mb \ | ||||
|         -D taskmanager.numberOfTaskSlots=1 \ | ||||
|         -D taskmanager.memory.jvm-overhead.max=192mb \ | ||||
|         -D rest.bind-port=$FLINK_BIND_PORT \ | ||||
|         -D rest.bind-address=0.0.0.0 \ | ||||
|         & | ||||
|     cd .. | ||||
| } | ||||
| 
 | ||||
| run_task() { | ||||
|     cd flink-1.15.2 | ||||
|     ./bin/flink run ./examples/streaming/WordCount.jar | ||||
|     cd .. | ||||
| } | ||||
| 
 | ||||
| arg=$1 | ||||
| case "$arg" in | ||||
|     jm) | ||||
|         run_jobmanager | ||||
| 	cd ../ | ||||
|         ;; | ||||
|     tm) | ||||
|         run_taskmanager | ||||
| 	cd ../ | ||||
|         ;; | ||||
|     task) | ||||
|         run_task | ||||
| 	cd ../ | ||||
|         ;; | ||||
| esac | ||||
| @ -1,77 +0,0 @@ | ||||
| #!/bin/bash | ||||
| set -e | ||||
| 
 | ||||
| BLUE='\033[1;34m' | ||||
| NC='\033[0m' | ||||
| occlum_glibc=/opt/occlum/glibc/lib/ | ||||
| 
 | ||||
| init_instance() { | ||||
|     # Init Occlum instance | ||||
|     postfix=$1 | ||||
|     FLINK_LOG_PREFIX="/host/flink--$postfix-${id}" | ||||
|     log="${FLINK_LOG_PREFIX}.log" | ||||
|     out="./flink--$postfix-${id}.out" | ||||
| 
 | ||||
|     rm -rf occlum_instance_$postfix && mkdir occlum_instance_$postfix | ||||
|     cd occlum_instance_$postfix | ||||
|     occlum init | ||||
|     new_json="$(jq '.resource_limits.user_space_size = "1MB" | | ||||
|         .resource_limits.user_space_max_size = "5500MB" | | ||||
|         .resource_limits.kernel_space_heap_size="1MB" | | ||||
|         .resource_limits.kernel_space_heap_max_size="64MB" | | ||||
|         .resource_limits.max_num_of_threads = 64 | | ||||
|         .process.default_heap_size = "128MB" | | ||||
|         .entry_points = [ "/usr/lib/jvm/java-11-openjdk-amd64/bin" ] | | ||||
|         .env.default = [ "LD_LIBRARY_PATH=/usr/lib/jvm/java-11-openjdk-amd64/lib/server:/usr/lib/jvm/java-11-openjdk-amd64/lib:/usr/lib/jvm/java-11-openjdk-amd64/../lib:/lib" ]' Occlum.json)" && \ | ||||
|     echo "${new_json}" > Occlum.json | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| build_flink() { | ||||
|     # Copy JVM and class file into Occlum instance and build | ||||
|     rm -rf image | ||||
|     copy_bom -f ../flink.yaml --root image --include-dir /opt/occlum/etc/template | ||||
|     occlum build | ||||
| } | ||||
| 
 | ||||
| run_taskmanager() { | ||||
|     init_instance taskmanager | ||||
|     build_flink | ||||
|     echo -e "${BLUE}occlum run JVM taskmanager${NC}" | ||||
|     echo -e "${BLUE}logfile=$log${NC}" | ||||
|     occlum run /usr/lib/jvm/java-11-openjdk-amd64/bin/java \ | ||||
| 	-Xmx800m -XX:-UseCompressedOops -XX:MaxMetaspaceSize=256m \ | ||||
| 	-XX:ActiveProcessorCount=2 \ | ||||
| 	-Dlog.file=$log \ | ||||
| 	-Dos.name=Linux \ | ||||
| 	-Dlog4j.configuration=file:/bin/conf/log4j.properties \ | ||||
| 	-Dlogback.configurationFile=file:/bin/conf/logback.xml \ | ||||
| 	-classpath /bin/lib/flink-table-blink_2.11-1.10.1.jar:/bin/lib/flink-table_2.11-1.10.1.jar:/bin/lib/log4j-1.2.17.jar:/bin/lib/slf4j-log4j12-1.7.15.jar:/bin/lib/flink-dist_2.11-1.10.1.jar org.apache.flink.runtime.taskexecutor.TaskManagerRunner \ | ||||
| 	--configDir /bin/conf \ | ||||
| 	-D taskmanager.memory.network.max=64mb \ | ||||
| 	-D taskmanager.memory.network.min=64mb \ | ||||
| 	-D taskmanager.memory.managed.size=128mb \ | ||||
| 	-D taskmanager.cpu.cores=1.0 \ | ||||
| 	-D taskmanager.memory.task.heap.size=256mb \ | ||||
|     & | ||||
| } | ||||
| 
 | ||||
| run_task() { | ||||
|      | ||||
|     export FLINK_CONF_DIR=$PWD/flink-1.10.1/conf && \ | ||||
|         ./flink-1.10.1/bin/flink run ./flink-1.10.1/examples/streaming/WordCount.jar | ||||
| } | ||||
| 
 | ||||
| id=$([ -f "$pid" ] && echo $(wc -l < "$pid") || echo "0") | ||||
| 
 | ||||
| arg=$1 | ||||
| case "$arg" in | ||||
|     tm) | ||||
|         run_taskmanager | ||||
| 	cd ../ | ||||
|         ;; | ||||
|     task) | ||||
|         run_task | ||||
| 	cd ../ | ||||
|         ;; | ||||
| esac | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user