This is an automated email from the ASF dual-hosted git repository. gary pushed a commit to branch release-1.7 in repository https://gitbox.apache.org/repos/asf/flink.git
The following commit(s) were added to refs/heads/release-1.7 by this push: new f9e2c6a [FLINK-10992][tests] Revise Hadoop configuration. f9e2c6a is described below commit f9e2c6aa5a7ea82a3d9df42807e98419ca698e8e Author: Gary Yao <g...@data-artisans.com> AuthorDate: Tue Nov 27 15:15:17 2018 +0100 [FLINK-10992][tests] Revise Hadoop configuration. Do not use /tmp directory to place log files or the HDFS data directory. Reconfigure dfs.replication to 1 because file availability is irrelevant in tests. Increase heap size of HDFS DataNodes and NameNode. Change find-files! function to not fail if directory does not exist. --- flink-jepsen/src/jepsen/flink/hadoop.clj | 57 +++++++++++++++++++------------- flink-jepsen/src/jepsen/flink/utils.clj | 14 ++++++++ 2 files changed, 48 insertions(+), 23 deletions(-) diff --git a/flink-jepsen/src/jepsen/flink/hadoop.clj b/flink-jepsen/src/jepsen/flink/hadoop.clj index 99f3f72..4ba7859 100644 --- a/flink-jepsen/src/jepsen/flink/hadoop.clj +++ b/flink-jepsen/src/jepsen/flink/hadoop.clj @@ -19,12 +19,15 @@ [clojure.tools.logging :refer :all] [jepsen [control :as c] - [db :as db]] - [jepsen.control.util :as cu])) + [db :as db] + [util :refer [meh]]] + [jepsen.control.util :as cu] + [jepsen.flink.utils :as fu])) (def install-dir "/opt/hadoop") (def hadoop-conf-dir (str install-dir "/etc/hadoop")) -(def yarn-log-dir "/tmp/logs/yarn") +(def log-dir (str install-dir "/logs")) +(def yarn-log-dir (str log-dir "/yarn")) (defn name-node [nodes] @@ -51,7 +54,12 @@ (defn core-site-config [test] - {:fs.defaultFS (str "hdfs://" (name-node (:nodes test)) ":9000")}) + {:hadoop.tmp.dir (str install-dir "/tmp") + :fs.defaultFS (str "hdfs://" (name-node (:nodes test)) ":9000")}) + +(defn hdfs-site-config + [_] + {:dfs.replication "1"}) (defn property-value [property value] @@ -66,8 +74,23 @@ (xml/element :configuration {} (map (fn [[k v]] (property-value k v)) (seq config))))] - (c/exec :echo config-xml :> config-file) - )) + (c/exec :echo config-xml :> config-file))) + +(defn- write-hadoop-env! + "Configures additional environment variables in hadoop-env.sh" + [] + (let [env-vars ["export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" + "export HADOOP_NAMENODE_OPTS=\"-Xms2G -Xmx2G $HADOOP_NAMENODE_OPTS\"" + "export HADOOP_DATANODE_OPTS=\"-Xms2G -Xmx2G $HADOOP_DATANODE_OPTS\""]] + (doseq [env-var env-vars] + (c/exec :echo env-var :>> (str install-dir "/etc/hadoop/hadoop-env.sh"))))) + +(defn- write-configuration! + [test] + (write-config! (str install-dir "/etc/hadoop/yarn-site.xml") (yarn-site-config test)) + (write-config! (str install-dir "/etc/hadoop/core-site.xml") (core-site-config test)) + (write-config! (str install-dir "/etc/hadoop/hdfs-site.xml") (hdfs-site-config test)) + (write-hadoop-env!)) (defn start-name-node! [test node] @@ -104,12 +127,6 @@ (info "Start NodeManager") (c/exec (str install-dir "/sbin/yarn-daemon.sh") :--config hadoop-conf-dir :start :nodemanager))) -(defn find-files! - [dir] - (->> - (clojure.string/split (c/exec :find dir :-type :f) #"\n") - (remove clojure.string/blank?))) - (defn db [url] (reify db/DB @@ -117,26 +134,20 @@ (info "Install Hadoop from" url) (c/su (cu/install-archive! url install-dir) - (write-config! (str install-dir "/etc/hadoop/yarn-site.xml") (yarn-site-config test)) - (write-config! (str install-dir "/etc/hadoop/core-site.xml") (core-site-config test)) - (c/exec :echo (c/lit "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64") :>> (str install-dir "/etc/hadoop/hadoop-env.sh")) + (write-configuration! test) (start-name-node-formatted! test node) (start-data-node! test node) (start-resource-manager! test node) (start-node-manager! test node))) - (teardown! [_ test node] + (teardown! [_ _ _] (info "Teardown Hadoop") (c/su (cu/grepkill! "hadoop") - (c/exec (c/lit (str "rm -rf /tmp/hadoop-* ||:"))))) + (c/exec :rm :-rf install-dir))) db/LogFiles (log-files [_ _ _] (c/su - (concat (find-files! (str install-dir "/logs")) - (if (cu/exists? yarn-log-dir) - (do - (c/exec :chmod :-R :777 yarn-log-dir) - (find-files! yarn-log-dir)) - [])))))) + (meh (c/exec :chmod :-R :755 log-dir)) + (fu/find-files! log-dir))))) diff --git a/flink-jepsen/src/jepsen/flink/utils.clj b/flink-jepsen/src/jepsen/flink/utils.clj index 2c7328f..1aa53ef 100644 --- a/flink-jepsen/src/jepsen/flink/utils.clj +++ b/flink-jepsen/src/jepsen/flink/utils.clj @@ -51,6 +51,20 @@ (recur op (assoc keys :retries (dec retries)))) (success r))))) +(defn find-files! + "Lists files recursively given a directory. If the directory does not exist, an empty collection + is returned." + [dir] + (let [files (try + (c/exec :find dir :-type :f) + (catch Exception e + (if (.contains (.getMessage e) "No such file or directory") + "" + (throw e))))] + (->> + (clojure.string/split files #"\n") + (remove clojure.string/blank?)))) + ;;; runit process supervisor (http://smarden.org/runit/) (def runit-version "2.1.2-3")