Docker 搭建大数据平台
Hadoop Hive Flink
Docker 镜像
镜像配置
- 系统:centos-7
- JAVA:1.8.0_275
- SCALA:2.12.13
- Hadoop:3.1.4
docker pull cpq2020/hadoop-master
镜像中配置了基本的软件vim,ssh 等服务
配置sshd
安装好sshd之后,我们需要配置ssh无密码连接本地sshd服务,如下命令:
ssh-keygen -t rsa #一直按回车键即可
cat id_dsa.pub >> authorized_keys
保存当前镜像为hadoop-master 命令如下:
# 查看当前 hadoop-master 对应的镜像ID
docker ps
docker commit $CONTAINER_ID hadoop-master
安装Hadoop
启动镜像
docker run -it --name master hadoop-master /usr/bish
配置Hadoop集群
打开hadoop_env.sh文件,修改JAVA_HOME
#假设现在/usr/local/hadoop目录下
vim etc/hadoop/hadoop-env.sh
# 将export JAVA_HOME=${JAVA_HOME}替换成export
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
打开core-site.xml,输入一下内容:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/root/data/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
打开hdfs-site.xml输入以下内容:
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
<final>true</final>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/data/hadoop/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/root/data/hadoop/hdfs/datanode</value>
</property>
</configuration>
修改mapred-site.xml(复制mapred-site.xml.template,再修改文件名),输入以下内容:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
</configuration>
修改yarn-site.xml文件,输入以下内容:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>
打开master上的works文件,输入两个slave的主机名:
vim etc/hadoop/slaves
# 将localhost替换成两个slave的主机名
slave1
slave2
保存这个镜像,在其他终端输入如下命令:
# 查看当前 hadoop-master 对应的镜像ID
docker ps
docker commit $CONTAINER_ID hadoop-master
# 为每个节点创建对应镜像
docker commit $CONTAINER_ID hadoop-slave1
docker commit $CONTAINER_ID hadoop-slave1
创建hadoop内部网络
#指定固定ip号段
docker network create --driver=bridge --subnet=192.168.10.0/24 hadoop
在三个终端上开启三个容器运行ubuntu/hadoopinstalled镜像,分别表示Hadoop集群中的master,slave1和slave2
docker run --hostname master --name master -d -P -p 50070:9870 -p 8088:8088 --privileged=true --network hadoop --add-host=master:192.168.10.120 --add-host=slave1:192.168.10.121 --add-host=slave2:192.168.10.122 --ip 192.168.10.120 hadoop-master /usr/sbin/init
docker run --hostname slave1 --name slave1 -d -P --privileged=true --network hadoop --add-host=master:192.168.10.120 --add-host=slave1:192.168.10.121 --add-host=slave2:192.168.10.122 --ip 192.168.10.121 hadoop-slave1 /usr/sbin/init
docker run --hostname slave2 --name slave2 -d -P --privileged=true --network hadoop --add-host=master:192.168.10.120 --add-host=slave1:192.168.10.121 --add-host=slave2:192.168.10.122 --ip 192.168.10.122 hadoop-slave2 /usr/sbin/init
docker 参数
- –hostname 指定主机名
- –name 为容器指定一个名称
- -d 后台运行
- -P 随机端口映射,容器内部端口随机映射到主机的端口
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- –privileged=true 获取root权限
- –network 指定网络
- –add-host 添加自定义hosts
- –ip 指定容器ip
- hadoop-master 镜像名称
- /usr/sbin/init 启动后执行的命令
启动集群
在master终端上,首先进入/usr/local/hadoop,然后运行如下命令:
#格式化namenode元数据
cd /usr/local/hadoopbin/hdfs namenode -format
#启动集群服务
sbin/start-all.sh
在master,slave1和slave2上分别运行命令jps查看运行结果
可以看到服务起来了,本地范围宿主机ip的8088及9870端口可以看到监控信息
查看分布式文件系统状态
hdfs dfsadmin -report
运行测试用例WordCount
在 HDFS 中创建 input 文件夹
hdfs dfs -mkdir /user/hadoop/input/wordcount
上传 file1.txt 文件到 HDFS 中
file1.txt 内容
hadoop hadoop hive
spark
flink spark
hdfs dfs -put file1.txt /user/hadoop/input/wordcount
运作 wordcount 例子程序
yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.4.jar wordcount /user/hadoop/input/wordcount /user/root/wordcountoutput
查看 HDFS 中的 /user/root/wordcountoutput 文件夹的内容
hdfs dfs -cat /user/root/wordcountoutput/part-r-00000
flink 1
hadoop 2
hive 1
spark 2
Hadoop 部分结束了
HIVE部分
(更新中。。。)
参考
厦门大学数据库实验室-使用Docker搭建Hadoop分布式集群