docker部署分散式大資料叢集hadoop、spark、hive、jdk、scala、
(一)1 用docker建立映象並搭建三個節點容器的hadoop及spark服務 包括:mysql,hadoop,jdk,spark,hive,scala,sqoop
docker已經安裝並且啟動 #搜尋centos映象: docker search centos
#拉取映象 docker pull centos #若不指定版本會下載latest 最好下載官方映象 如果拉取映象速度太慢可以指定到對應的庫拉取 #docker images 檢視已經建立或者下載的映象 [[email protected] bigdata]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hadoop latest 9d87f24c74a4 43 hours ago 1.4GB centos7_ssh_1 latest 4aa2376ef3f0 46 hours ago 313MB mysql 5.6 7edb93321b06 2 days ago 256MB centos latest 49f7960eb7e4 8 weeks ago 200MB
2 生成帶有SSH功能的centos的映象檔案
為了後面配置各節點之間的SSH免密碼登陸,需要在pull下的centos映象庫種安裝SSH, 這裡利用 Dockerfile 檔案來建立映象
# 目錄可以自定義建立 [[email protected] appcom]# cd app/ [[email protected] app]# ll total 0 drwxr-xr-x. 4 root root 49 Aug 1 23:31 DockerImagesFiles [[email protected] app]# cd DockerImagesFiles/ [[email protected]
#建立一個存放帶ssh的centos映象Dockerfile檔案的目錄 mkdir -p DockerImagesFiles/centos7_shh
cd centos7_shh
#建立帶ssh的centos的Dockerfile 檔案 vim Dockerfile
#base on image create library FROM centos MAINTAINER luzhen # install ssh RUN yum install -y openssh-server RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config RUN yum install -y openssh-clients
#config root RUN echo "root:123456" | chpasswd RUN echo "root ALL=(ALL) ALL" >> /etc/sudoers #greate ssh key RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
# config ssh serve RUN mkdir /var/run/sshd EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]
:wq 儲存退出
3 根據上面的Dockerfile生成centos7_ssh_1映象
docker build -t="centos7_ssh_1" . #在當前目錄建立映象,會有一個執行過程
#執行完成後,檢視已安裝的映象庫 docker images #看到當前的映象,會有,mysql,centos,centos7_ssh_1(自己建立)
4 生成Hadoop映象庫檔案 cd /appcom/app/DockerImagesFiles/hadoop
在構建Hadoop映象庫的Dockerfile所在目錄下,上傳已經下載的需要用到的軟體包 [[email protected] hadoop]# pwd /appcom/app/DockerImagesFiles/hadoop [[email protected] hadoop]# ll total 686748 -rw-r--r--. 1 root root 90859180 Aug 2 03:29 apache-hive-1.2.2-bin.tar.gz -rw-r--r--. 1 root root 1406 Aug 2 03:32 Dockerfile -rw-r--r--. 1 root root 210606807 Aug 2 03:27 hadoop-2.7.1.tar.gz -rw-r--r--. 1 root root 185646832 Aug 2 03:27 jdk-8u181-linux-x64.tar.gz -rw-r--r--. 1 root root 28678231 Aug 2 03:27 scala-2.11.8.tgz -rw-r--r--. 1 root root 187426587 Aug 2 03:27 spark-2.0.2-bin-hadoop2.7.tgz 注意:這裡要提前在Dockerfile檔案配置環境變數,如果映象庫構建完成後,在 容器中配置環境變數是不起作用的。 vim Dockerfile #base on centos7_ssh_1 structure FROM centos7_ssh_1 # install java ADD jdk-8u181-linux-x64.tar.gz /home/user_lu/lcal RUN mv /home/user_lu/lcal/jdk1.8.0_181 /home/user_lu/lcal/jdk1.8 #configuration java environment variables ENV JAVA_HOME /home/user_lu/lcal/jdk1.8.0_181 ENV PATH $JAVA_HOME/bin:$PATH #install hadoop ADD hadoop-2.7.1.tar.gz /home/user_lu/lcal RUN mv /home/user_lu/lcal/hadoop-2.7.1 /home/user_lu/lcal/hadoop #configuration hadoop environment variables ENV HADOOP_HOME /home/user_lu/lcal/hadoop-2.7.1 ENV PATH $HADOOP_HOME/bin:$PATH
#install scala note: scala versionn2.11.x for spark version 2.0.2 ADD scala-2.11.8.tgz /home/user_lu/lcal RUN mv /home/user_lu/lcal/scala-2.11.8 /home/user_lu/lcal/scala #configuration scala environment variables ENV SCALA_HOME /home/user_lu/lcal/scala-2.11.8 ENV PATH $SCALA_HOME/bin:$PATH #install spark ADD spark-2.0.2-bin-hadoop2.7.tgz /home/user_lu/lcal RUN mv /home/user_lu/lcal/spark-2.0.2-bin-hadoop2.7 /home/user_lu/lcal/spark #configuration spark environment variables ENV SPARK_HOME /home/user_lu/lcal/spark-2.0.2-bin-hadoop2.7 ENV PATH $SPARK_HOME/bin:$PATH
#install hive ADD apache-hive-1.2.2-bin.tar.gz /home/user_lu/lcal RUN mv /home/user_lu/lcal/apache-hive-1.2.2-bin /home/user_lu/lcal/hive
#config hive environ variables ENV HIVE_HOME /home/user_lu/lcal/apache-hive-1.2.2-bin ENV PATH $HIVE_HOME/bin:$PATH
RUN yum install -y which
:wq
note:注意:docker版本的差異會導致上述命令執行不成功,RUN mv 重新命名失敗
如果出現上述問題直接將檔案中的重新命名命令全部註釋掉。
5 根據上面的Dockerfile構建Hadoop映象庫
docker build -t="hadoop" . #執行完成後,檢視已安裝的映象庫 docker images [[email protected] hadoop]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hadoop latest 9d87f24c74a4 43 hours ago 1.4GB centos7_ssh_1 latest 4aa2376ef3f0 46 hours ago 313MB mysql 5.6 7edb93321b06 2 days ago 256MB centos latest 49f7960eb7e4 8 weeks ago 200MB 所有映象構建完成
6 生成三節點Hadoop容器叢集 6.1首先規劃一下節點的主機名稱,IP地址(區域網內構建docker映象時,自動分配172.17.0.1/16網段的IP)和埠號
master 172.17.0.3 slave01 172.17.0.4 slave02 172.17.0.5 因為之前mysql容器已經啟動執行,預設IP:172.17.0.2 6.2下面在Hadoop映象上建立三個容器,做為叢集的節點
#建立master容器,50070和8088,8080是用來在瀏覽器中訪問hadoop yarn spark #WEB介面, 這裡分別對映到物理機的50070和8088,8080埠。重點注意:容器啟動後,對映比較麻煩,最好在這裡對映。 docker run -d -P -p 50070:50070 -p 8088:8088 -p 8080:8080 --name master -h master --add-host slave1:172.17.0.4 --add-host slave2:172.17.0.5 hadoop
#建立slave1容器,在容器host檔案,新增hostname,並配置其他節點主機名稱和IP地址 docker run -d -P --name slave1 -h slave1 --add-host master:172.17.0.3 --add-host slave2:172.17.0.5 hadoop
#建立slave2容器 docker run -d -P --name slave2 -h slave2 --add-host master:172.17.0.3 --add-host slave1:172.17.0.4 hadoop
docker ps #檢視啟動的容器 [[email protected] hadoop]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 56b2fd94c238 hadoop "/usr/sbin/sshd -D" 43 hours ago Up 43 hours 0.0.0.0:32779->22/tcp slave2 26e2021a90af hadoop "/usr/sbin/sshd -D" 43 hours ago Up 43 hours 0.0.0.0:32778->22/tcp slave1 dc448d2d4352 hadoop "/usr/sbin/sshd -D" 43 hours ago Up 43 hours 0.0.0.0:8080->8080/tcp, 0.0.0.0:8088->8088/tcp, 0.0.0.0:50070->50070/tcp, 0.0.0.0:32777->22/tcp master 10ab732e1c60 mysql:5.6 "docker-entrypoint.s…" 2 days ago Up 2 days 0.0.0.0:3306->3306/tcp mysql [[email protected] hadoop]#
(二)在Docker上配置三節點root叢集 1開啟三個容器終端
docker exec -it master /bin/bash docker exec -it slave1 /bin/bash docker exec -it slave2 /bin/bash
2.1 配置hdfs賬號容器各節點間的SSH免密碼登陸
分別進入master,slave1,slave2三個容器節點,執行下面命令
ssh-keygen -t rsa (ssh免祕鑰登入,rsa加密)三次回車
執行完成後會在~/.ssh/目錄下面生成對應的兩個祕鑰檔案
執行下面的命令: cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys [email protected]:~/.ssh/ scp ~/.ssh/authorized_keys [email protected]:~/.ssh/
本機生成免祕鑰登入: ssh-copy-id -i
分別測試下ssm免祕鑰登入是否成功,第一次登入需要輸入密碼,exit後再次輸入不需要。 ssh master ssh slave1 ssh slave2
進入master容器: 修改對應的配置檔案: [[email protected] /]# cd /home/ hadoop/ user_lu/ [[email protected] /]# cd /home/user_lu/lcal/ [[email protected] lcal]# ll total 12 drwxr-xr-x. 1 root root 53 Aug 1 19:33 apache-hive-1.2.2-bin drwxr-xr-x. 1 10021 10021 67 Aug 1 19:53 hadoop-2.7.1 drwxr-xr-x. 7 10 143 4096 Jul 7 08:09 jdk1.8.0_181 -rw-rw-r--. 1 1000 1000 4214 Aug 1 18:51 region.txt drwxrwxr-x. 6 1001 1001 66 Mar 4 2016 scala-2.11.8 drwxr-xr-x. 1 500 500 40 Aug 1 20:10 spark-2.0.2-bin-hadoop2.7 [[email protected] lcal]# cd hadoop-2.7.1/etc/hadoop
修改slaves 刪除localhost 新增對應的節點 slave1 slave2
hadoop-env.sh 新增jdk環境變數
export JAVA_HOME=/home/user_lu/lcal/jdk1.8.0_181
core-site.xml配置
vi core-site.xml
<property> <name>fs.defaultFS</name> <value>hdfs://master:9000/</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/user_lu/lcal/hadoop-2.7.1/tmp</value> </property>
hdfs-site.xml配置
vi hdfs-site.xml <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/user_lu/lcal/hadoop-2.7.1/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/user_lu/lcal/hadoop-2.7.1/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property>
mv mapred-site.xml.template mapred-site.xml配置
vi mapred-site.xml
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobtracker.http.address</name> <value>master:50030</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> <property> <name>mapred.job.tracker</name> <value>http://master:9001</value> </property>
yarn-site.xml 配置
vi yarn-site.xml
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>master:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8035</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>master:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master:8088</value> </property>
cd /home/user_lu/lcal/
將配置好的檔案傳送到其他節點 scp -r hadoop-2.7.1 [email protected]:/home/user_lu/lcal/ scp -r hadoop-2.7.1 [email protected]:/home/user_lu/lcal/
格式化hdfs cd /home/user_lu/lcal/hadoop-2.7.1/sbin
hdfs namenode -format
3 啟動hadopp ./start.dfs.sh ./start.yarn.sh
[[email protected] sbin]# jps 532 SecondaryNameNode 299 NameNode 9675 Jps 3613 RunJar 799 ResourceManager [[email protected] sbin]#
4 配置spark叢集
cd /home/user_lu/lcal/spark-2.0.2-bin-hadoop2.7/conf #從配置模板複製 cp spark-env.sh.template spark-env.sh #新增配置內容 vi spark-env.sh
spark-env.sh末尾新增以下內容:
export JAVA_HOME=/home/user_lu/lcal/jdk1.8.0_181 export HADOOP_HOME=/home/user_lu/lcal/hadoop-2.7.1 export SCALA_HOME=/home/user_lu/lcal/scala-2.11.8 export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop SPARK_MASTER_HOST=master SPARK_LOCAL_DIRS=/home/user_lu/lcal/spark-2.0.2-bin-hadoop2.7 SPARK_DRIVER_MEMORY=2G
mv slaves.template slaves
在slaves檔案下填上slave主機名
slave01 slave02
master容器配置的spark目錄分別分發到slave01,slave02節點
cd /home/user_lu/lcal scp -r spark-2.0.2-bin-hadoop2.7 [email protected]:/home/user_lu/lcal/ scp -r spark-2.0.2-bin-hadoop2.7 [email protected]:/home/user_lu/lcal/
5.啟動spark叢集: ./start.all.sh [[email protected] sbin]# jps 1747 Master 532 SecondaryNameNode 9733 Jps 299 NameNode 3613 RunJar 799 ResourceManager [[email protected] sbin]#
6:可以通過web介面檢視叢集狀況埠方別為50070,8088,8080 IP為宿主機ip
(三)hive安裝 解壓到對應路徑:
cd /home/user_lu/lcal/apache-hive-1.2.2-bin/conf
建立hive相關的目錄: hdfs dfs -mkdir -p /user/hive/log hdfs dfs -mkdir -p /user/hive/tmp hdfs dfs -mkdir -p /user/hive/warehouse
授權:否則hive啟動報錯 hdfs dfs -chmod -R 777 /user/hive/log hdfs dfs -chmod -R 777 /user/hive/tmp hdfs dfs -chmod -R 777 /user/hive/warehouse
重新命名配置檔案 mv hive-env.sh.template hive-env.sh mv hive-default.xml.template hive-site.xml
vi hive-env.sh #新增如下內容
export JAVA_HOME=/home/user_lu/lcal/jdk1.8.0_181 export HADOOP_HOME=/home/user_lu/lcal/hadoop-2.7.1 export HIVE_HOME=/home/user_lu/lcal/apache-hive-1.2.2-bin vi hive-site.xml #配置
<property> <name>hive.exec.scratchdir</name> <value>/user/hive/tmp</value> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <property> <name>hive.querylog.location</name> <value>/user/hive/log</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://172.17.0.2:3306/metastore?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=false</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>root</value> </property> 7:建立hive臨時目錄: mkdir -p /home/hadoop/hive/tmp
並在hive-site.xml中修改:
把{system:java.io.tmpdir} 改成 /home/hadoop/hive/tmp/
把 {system:user.name} 改成 {user.name}
否則hive啟動報錯
8:新增連結mysql驅動包到hive 的lib庫 docker cp mysql-connector-java-5.1.7-bin.jar master:/home/user_lu/lcal/apache-hive-1.2.2-bin/lib
9:修改hive,否則啟動會報找不到spark的相關jar包 找到 sparkAssemblyPath=`ls ${SPARK_HOME}/lib/spark-assembly-*.jar` 將其修改為: sparkAssemblyPath=`ls ${SPARK_HOME}/jars/*.jar` 10:hive初始化 ./schematool -dbType mysql -initSchema --verbose 會遠端連結mysql,並建立元資料庫。
./hive #啟動hive
可以建庫建表查詢了。
退出後可以看下程序: [[email protected] lcal]# jps 5729 RunJar 1747 Master 9827 Jps 532 SecondaryNameNode 299 NameNode 3613 RunJar 799 ResourceManager
(四)sqoop安裝 安裝到slave1節點
在宿主機上執行; [[email protected]] docker cp sqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz slave1:/home/user_lu/lcal
1 進入到slave1容器,到對應的目錄。 tar -zxvf sqoop-1.4.4.bin__hadoop-2.0.4-alpha.tar.gz
直接可以執行。