hadoop + docker 搭建hadoop学习环境
在学习大数据的情况下免不了自己搭建一个hadoop环境,但是使用虚拟机在自己的电脑上启动一个集群环境会很吃机器的资源,所以我们使用docker来进行搭建大数据的集群环境。同时docker搭建hadoop环境可以省去很多重复的步骤。
同时现在hadoop的版本比较多,虽然推荐使用HDP和CDH进行集群的搭建,但是在学习时间推荐使用Apache Hadoop进行搭建,可以更快的学习hadoop的工作原理。
环境准备
- docker-ce 环境
- ubuntu 16.04的镜像
- jdk1.7.0_80
- hadoop-2.7.3
所需的都为开源的,可以很方便的从网上找寻到相应的软件。
ubuntu 16.04 镜像环境的制作可以参考下篇博文:
可以直接再镜像制作的时候安装上相应的环境,比如java.
将制作好的系统打包为docker镜像
sudo tar -C /opt/new_os/ -c . | sudo docker import - ubuntu:v1
然后将镜像启动三个容器,可以直接写shell脚本一步到位
#!/bin/bash
paaswd="root"
echo ${passwd}|sudo -S docker run -itd -h master --privileged=True -v /data:/data -p 9000:9000 -p 9001:9001 -p 50070:50070 -p 8088:8088 --name="master-server" ubuntu:v1 bash
echo ${passwd}|sudo -S docker run -itd -h client1 --privileged=True -v /data:/data --name="client2-server" ubuntu:v1 bash
echo ${passwd}|sudo -S docker run -itd -h client2 --privileged=True -v /data:/data --name="client2-server" ubuntu:v1 bash
启动后的容器如下图所示:
2018-10-25 16-54-41 的屏幕截图.png
安装JDK
将jdk1.7拷贝到/data目录下进行解压,下面就展现出docker搭建hadoop学习环境的好处。
在所有的容器里配值java环境变量,~/.bashrc或/etc/profile
export JAVA_HOME=/data/jdk1.7.0_80
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
环境搭建
- 安装ntp,ssh服务
apt-get install ntp
apt-get install ssh
#启动ssh服务
service ssh start
- 设置所有容器的密码和允许远程访问
sudo passwd root
123
vim /etc/ssh/sshd_config
替换
PermitRootLogin without-password
为PermitRootLogin yes
重新启动ssh服务
service ssh restart
配值ssh无密访问
在master上运行
ssh-keygen
ssh-copy-id root@master
ssh-copy-id root@client1
ssh-copy-id root@client2
然后ssh root@client1进行测试是否可以无密访问
Hadoop配置
在/data下解压hadoop-2.7.3 进入hadoop-2.7.3/etc/hadoop/下进行修改配值文件
- vim hadoop-env.sh 在其中添加java环境
export JAVA_HOME=/data/jdk1.7.0_80
- vim core-site.xml
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop-2.7.3/tmp</value>
<description>Abaseforothertemporarydirectories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
- vim hdfs-site.xml
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/hadoop-2.6.0/dfs/name</value>
<description>Path on the local filesystem where the NameNode stores the namespace andtransactionslogspersistently.</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/hadoop-2.6.0/dfs/data</value>
<description>Comma separatedlistofpathsonthelocalfilesystemofaDataNodewhere itshouldstoreitsblocks.</description>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
- vim mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
<description>HostofIPandportofJobTracker.</description>
</property>
</configuration>
- vim yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</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:8031</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>
- vim yarn-env.sh
export JAVA_HOME=/data/jdk1.7.0_80
- vim slaves
client1
client2
vim /etc/profile
export HADOOP_HOME=/data/hadoop-2.7.3
exportPATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH
启动集群
bin/hdfsnamenode-format
sbin/start-all.sh
访问50070:
http://master:50070
出现页面,检查datanode是否完全启动成功
启动成功即可
否则:
hadoop-daemons.sh start datanode client1
- P05_kafka_2.9.2-0.8.1集群搭建
- 再探matplotlib
- 分布式系统(Distributed System)资料
- Python性能提升20倍居然不是标题党?
- Spark开发电商日志分析用户行为聚合功能练习下面开始搭建开发环境注意Task表中最后一个列task_param中,Json的StartDate和EndDate需要设置成今天,因为mock数据的时候,
- HDU 3783 ZOJ
- HDU 1412 {A} + {B}
- HDU 2092 整数解
- Hadoop数据分析平台实战——020Hadoop Shell命令(初学跳过)离线数据分析平台实战——020Hadoop Shell命令(可跳过)
- HDU 2080 夹角有多大II
- 二分查找模版
- Hadoop数据分析平台实战——010hadoop介绍安装
- Python为什么文件运行和在命令行运行同样语句但结果却不同?
- HDU 2034 人见人爱A-B
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 解决tp5在nginx下修改配置访问的问题
- 在PHP中实现使用Guzzle执行POST和GET请求
- c 语言函数指针之回调函数
- 解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
- php和js实现根据子网掩码和ip计算子网功能示例
- php ZipArchive实现多文件打包下载实例
- PHP 代码简洁之道(小结)
- Thinkphp 在api开发中异常返回依然是html的解决方式
- Laravel 连接(Join)示例
- 解决Laravel自定义类引入和命名空间的问题
- 详解Laravel服务容器的绑定与解析
- 修改Laravel自带的认证系统的User类的命名空间的步骤
- PHP使用递归按层级查找数据的方法
- Laravel6.2中用于用户登录的新密码确认流程详解
- PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】