Docker安装Hadoop
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker安装Hadoop相关的知识,希望对你有一定的参考价值。
参考技术A Docker、Java、Scala、Hadoop、 Hbase、Spark。集群共有5台机器,主机名分别为 h01、h02、h03、h04、h05。其中 h01 为 master,其他的为 slave。
JDK 1.8、Scala 2.11.6、Hadoop 3.2.1、Hbase 2.1.3、Spark 2.4.0
wget -qO- https://get.docker.com/ | sh
sudo service docker start
sudo docker ps
现在的 Docker 网络能够提供 DNS 解析功能,使用如下命令为接下来的 Hadoop 集群单独构建一个虚拟的网络。
sudo docker network create --driver=bridge hadoop
以上命令创建了一个名为 Hadoop 的虚拟桥接网络,该虚拟网络内部提供了自动的DNS解析服务。## 查看 Docker 中的网络
sudo docker network ls
可以看到刚刚创建的名为 hadoop 的虚拟桥接网络。
sudo docker search ubuntu
sudo docker pull ubuntu:16.04
sudo docker run -it ubuntu:16.04 /bin/bash
可以看出 shell 已经是容器的 shell 了
exit
sudo docker ps -a
sudo docker start fab4da838c2f
sudo docker stop fab4da838c2f
在当前容器中将配置配好,导入出为镜像。以此镜像为基础创建五个容器,并赋予 hostname
进入 h01 容器,启动 Hadoop。
sudo docker exec -it fab4da838c2f /bin/bash
备份源
cp /etc/apt/sources.list /etc/apt/sources_init.list
先删除旧源文件
rm /etc/apt/sources.list
这个时候没有 vim 工具,使用 echo 命令将源写入新文件
apt update
apt install openjdk-8-jdk
测试
java -version
apt install scala
测试
scala
安装 vim,用来编辑文件
apt install vim
安装 net-tools
apt install net-tools
安装 SSH,并配置免密登录,由于后面的容器之间是由一个镜像启动的,所以在当前容器里配置 SSH 自身免密登录就 OK 了。
安装 SSH
apt-get install openssh-server
安装 SSH 的客户端
apt-get install openssh-client
进入当前用户的用户根目录
cd ~
生成密钥,一直回车就行
ssh-keygen -t rsa -P ""
生成的密钥在当前用户根目录下的 .ssh 文件夹中以 . 开头的文件与文件夹 ls 是看不懂的,需要 ls -al 才能查看。
将公钥追加到 authorized_keys 文件中
cat .ssh/id_rsa.pub >> .ssh/authorized_keys
启动 SSH 服务
service ssh start
免密登录自己
ssh 127.0.0.1
修改 .bashrc 文件,启动 shell 的时候,自动启动 SSH 服务
vim ~/.bashrc
添加一行
service ssh start
wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
到 /usr/local 目录下面并重命名文件夹
tar -zxvf hadoop-3.2.1.tar.gz -C /usr/local/
cd /usr/local/
mv hadoop-3.2.1 hadoop
vim /etc/profile
追加以下内容,JAVA_HOME 为 JDK 安装路径,使用 apt 安装就是这个,用 update-alternatives --config java 可查看
使环境变量生效
source /etc/profile
在目录 /usr/local/hadoop/etc/hadoop 下,修改 hadoop-env.sh 文件,在文件末尾添加以下信息
cd /usr/local/hadoop/etc/hadoop
vim hadoop-env.sh
修改 core-site.xml,修改为
vim core-site.xml
chmod 777 /home/hadoop3/hadoop/tmp
修改 hdfs-site.xml,修改为
vim hdfs-site.xml
修改 mapred-site.xml,修改为
vim mapred-site.xml
修改 yarn-site.xml,修改为
vim yarn-site.xml
修改 worker 为
vim workers
此时,hadoop已经配置好了
exit
sudo docker commit -m "hadoop" -a "tomding" fab4da838c2f newuhadoop
查看镜像
sudo docker images
启动 h01 做 master 节点,所以暴露了端口,以供访问 web 页面,--network hadoop 参数是将当前容器加入到名为 hadoop 的虚拟桥接网络中,此网站提供自动的 DNS 解析功能
sudo docker run -it --network hadoop -h "h01" --name "h01" -p 9870:9870 -p 8088:8088 newuhadoop /bin/bash
sudo docker run -it --network hadoop -h "h02" --name "h02" newuhadoop /bin/bash
sudo docker run -it --network hadoop -h "h03" --name "h03" newuhadoop /bin/bash
sudo docker run -it --network hadoop -h "h04" --name "h04" newuhadoop /bin/bash
sudo docker run -it --network hadoop -h "h05" --name "h05" newuhadoop /bin/bash
先进行格式化操作,不格式化操作,hdfs会起不来
cd /usr/local/hadoop/bin
./hadoop namenode -format
进入 hadoop 的 sbin 目录
cd /usr/local/hadoop/sbin/
启动
./start-all.sh
查看分布式文件系统的状态
cd /usr/local/hadoop/bin
./hadoop dfsadmin -report
把license作为需要统计的文件
cd /usr/local/hadoop
cat LICENSE.txt > file1.txt
在 HDFS 中创建 input 文件夹
cd /usr/local/hadoop/bin
./hadoop fs -mkdir /input
上传 file1.txt 文件到 HDFS 中
./hadoop fs -put ../file1.txt /input
查看 HDFS 中 input 文件夹里的内容
./hadoop fs -ls /input
运作 wordcount 例子程序
./hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount /input /output
查看 HDFS 中的 /output 文件夹的内容
./hadoop fs -ls /output
查看 part-r-00000 文件的内容
./hadoop fs -cat /output/part-r-00000
Hadoop 部分结束了
在 Hadoop 集群的基础上安装 Hbase
root@h01:~# wget http://archive.apache.org/dist/hbase/2.1.3/hbase-2.1.3-bin.tar.gz
到 /usr/local 目录下面
tar -zxvf hbase-2.1.3-bin.tar.gz -C /usr/local/
vim /etc/profile
source /etc/profile
使用 ssh h02/3/4/5 进入其他四个容器,依次在 /etc/profile 文件后追加那两行环境变量
在目录 /usr/local/hbase-2.1.3/conf 修改配置
cd /usr/local/hbase-2.1.3/conf
修改 hbase-env.sh,追加
vim hbase-env.sh
修改 hbase-site.xml 为
vim hbase-site.xml
修改 regionservers 文件为
vim regionservers
使用 scp 命令将配置好的 Hbase 复制到其他 4 个容器中
scp -r /usr/local/hbase-2.1.3 root@h02:/usr/local/
scp -r /usr/local/hbase-2.1.3 root@h03:/usr/local/
scp -r /usr/local/hbase-2.1.3 root@h04:/usr/local/
scp -r /usr/local/hbase-2.1.3 root@h05:/usr/local/
cd /usr/local/hbase-2.1.3/bin
./start-hbase.sh
打开 Hbase 的 shell
hbase shell
在 Hadoop 的基础上安装 Spark
wget https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz
到 /usr/local 目录下面
tar -zxvf spark-2.4.0-bin-hadoop2.7.tgz -C /usr/local/
修改文件夹的名字
cd /usr/local/
mv spark-2.4.0-bin-hadoop2.7 spark-2.4.0
vim /etc/profile
source /etc/profile
使用 ssh h02/3/4/5 可进入其他四个容器,依次在 /etc/profile 文件后追加那两行环境变量
在目录 /usr/local/spark-2.4.0/conf 修改配置
cd /usr/local/spark-2.4.0/conf
修改文件名
mv spark-env.sh.template spark-env.sh
修改 spark-env.sh,追加
vim spark-env.sh
修改文件名
mv slaves.template slaves
修改 slaves 如下
vim slaves
使用 scp 命令将配置好的 Hbase 复制到其他 4 个容器中
scp -r /usr/local/spark-2.4.0 root@h02:/usr/local/
scp -r /usr/local/spark-2.4.0 root@h03:/usr/local/
scp -r /usr/local/spark-2.4.0 root@h04:/usr/local/
scp -r /usr/local/spark-2.4.0 root@h05:/usr/local/
cd /usr/local/spark-2.4.0/sbin
./start-all.sh
其他
3.1 HDFS 重格式化问题
参考 https://blog.csdn.net/gis_101/article/details/52821946
重新格式化意味着集群的数据会被全部删除,格式化前需考虑数据备份或转移问题 ;
先删除主节点(即namenode节点),Hadoop的临时存储目录tmp、namenode存储永久性元数据目录dfs/name、Hadoop系统日志文件目录log 中的内容 (注意是删除目录下的内容不是目录);
删除所有数据节点(即datanode节点) ,Hadoop的临时存储目录tmp、namenode存储永久性元数据目录dfs/name、Hadoop系统日志文件目录log 中的内容;
格式化一个新的分布式文件系统:
cd /usr/local/hadoop/bin
./hadoop namenode -format
注意事项
进入:
sudo docker run -it --network hadoop -h "h01" --name "h01" -p 9870:9870 -p 8088:8088 master /bin/bash
sudo docker run -it --network hadoop -h "h02" --name "h02" slave1 /bin/bash
sudo docker run -it --network hadoop -h "h03" --name "h03" slave2 /bin/bash
sudo docker run -it --network hadoop -h "h04" --name "h04" slave3 /bin/bash
sudo docker run -it --network hadoop -h "h05" --name "h05" slave14 /bin/bash
退出:
sudo docker commit -m "master" -a "tomding" h01 master
sudo docker commit -m "slave1" -a "tomding" h02 slave1
sudo docker commit -m "slave2" -a "tomding" h03 slave2
sudo docker commit -m "slave3" -a "tomding" h04 slave3
sudo docker commit -m "slave4" -a "tomding" h05 slave4
docker安装hadoop
docker hadoop
sudo docker pull kiwenlau/hadoop:1.0
git clone https://github.com/kiwenlau/hadoop-cluster-docker
sudo docker network create --driver=bridge hadoop
cd hadoop-cluster-docker
./start-container.sh
#启动hadoop
./start-hadoop.sh
#运行wordcount
./run-wordcount.sh
Hadoop网页管理地址:
NameNode: http://192.168.59.1:50070/
ResourceManager: http://192.168.59.1:8088/
192.168.59.1为运行容器的主机的IP。
源地址
安装docker
安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum源 安装
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum list docker-ce
启动
systemctl start docker
systemctl enable docker
docker version
docker换源
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
bcdedit /set hypervisorlaunchtype off
以上是关于Docker安装Hadoop的主要内容,如果未能解决你的问题,请参考以下文章