在docker容器中编译hadoop 3.1.0
优点:docker安装好之后可以一键部署编译环境,不用担心各种库不兼容等问题,编译失败率低。
Hadoop 3.1.0 的源代码目录下有一个 `start_build_env.sh** 的脚本,通过脚本会从Docker hub网站拉取hadoop-build镜像,然后在镜像中添加本地用户信息和环境变量等,最后运行Docker镜像并挂载本地目录。
docker跨平台的特性已经非常不错,最需要注意的一点在于:所有操作不要使用root用户,也不要使用sudo。对docker和linux权限管理比较熟悉的话,也可以考虑修改脚本上添加用户的那一项,以及后面一系列的权限问题。
大致流程:
1. 安装docker
2. 更改用户所在的组(用来运行Docker命令)
docker为了保证安全,默认只有root用户和root用户组(某些发行版是docker用户组)能够运行,因此需要将当前用户添加到对应的用户组。
查看docker文件所在的用户组 ls -l /var/run/docker.sock
更改用户组
usermod -g username groupname
3. 添加docker的源
docker 修改镜像源地址或添加代理,避免拉取镜像时失败。
此处可百度,方法多且不复杂,daocloud、163等都可以考虑。
4. 运行 start_build_env.sh
构建容器
下载Hadoop源码, ./start_build_env.sh
。
等待构建完成,这个主要看网速,需要下载一个多G的镜像。完成后会自动进入容器。
容器基于Ubuntu,编译相关的环境都已经安装好,vim等软件可以自行apt。
容器虚拟机挂载了当前用户目录下的.m2和当前的hadoop源代码位置,编译结果能够直接在docker外使用。
5. 容器中使用maven编译
简单的编译示例 mvn clean package -DskipTests -Pnative
可以在源代码目录执行,也可以在下面的目录执行。
详细的编译命令在 BUILDING.txt 中。
附几个Docker基本命令
docker ps
查看当前运行的容器,-a 选项能看到未运行的容器。
docker images
查看所有镜像
docker start container_id
启动容器,container_id在docker ps中可以看到,也可以使用container name。
docker exec -it container_id
进入运行中的容器
从容器中退出直接输入exit即可,退出后容器可能关闭。