Hadoop简介
Apache Hadoop是一个开源的分布式计算平台,可以处理大规模数据集的分布式存储和处理。它是由Apache基金会下的Hadoop项目开发的,采用Java语言编写。Hadoop的核心组件包括Hadoop分布式文件系统(HDFS)和Hadoop MapReduce,它们共同提供了一个可靠、可扩展的分布式计算环境。Hadoop已经成为了大数据处理的标准工具之一。
Docker简介- Docker是一种容器化技术,能够将应用程序及其依赖项打包在一个可移植的容器中,以便在不同的环境中运行。相比于传统的虚拟化技术,Docker更加轻量级、快速、易于管理和部署。
安装Docker
安装Docker
sudo apt-get update
sudo apt-get install docker.io
sudo yum update
sudo yum install docker
docker --version
下载Hadoop镜像
下载Hadoop镜像
docker pull sequenceiq/hadoop-docker:latest
这个命令将会从docker hub上下载最新的Hadoop镜像到本地。
创建Docker网络- 创建Docker网络
docker network create hadoop-net
这个命令会在Docker中创建一个名为"hadoop-net"的网络,用于连接Hadoop集群中的各个容器。
启动Hadoop容器集群
使用docker-compose启动Hadoop容器集群
version: '2.2'
services:
namenode:
image: sequenceiq/hadoop-docker:2.7.1
container_name: namenode
hostname: namenode
ports:
- "50070:50070"
- "9000:9000"
volumes:
- hadoop_namenode:/hadoop/dfs/name
environment:
- CLUSTER_NAME=hadoop
- REPLICATION=1
- NODE_TYPE=NAMENODE
command: /etc/bootstrap.sh -d && tail -f /dev/null
datanode1:
image: sequenceiq/hadoop-docker:2.7.1
container_name: datanode1
hostname: datanode1
volumes:
- hadoop_datanode1:/hadoop/dfs/data
environment:
- CLUSTER_NAME=hadoop
- REPLICATION=1
- NODE_TYPE=DATANODE
- NAMENODE_HOST=namenode
command: /etc/bootstrap.sh -d && tail -f /dev/null
datanode2:
image: sequenceiq/hadoop-docker:2.7.1
container_name: datanode2
hostname: datanode2
volumes:
- hadoop_datanode2:/hadoop/dfs/data
environment:
- CLUSTER_NAME=hadoop
- REPLICATION=1
- NODE_TYPE=DATANODE
- NAMENODE_HOST=namenode
command: /etc/bootstrap.sh -d && tail -f /dev/null
volumes:
hadoop_namenode:
hadoop_datanode1:
hadoop_datanode2:
以上是一个简单的docker-compose文件,包含一个namenode和两个datanode,可以使用docker-compose up -d
命令启动容器集群。启动后,可以通过http://localhost:50070
访问Hadoop web界面。
配置Hadoop集群
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/hadoop_data/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/hadoop_data/hdfs/datanode</value>
</property>
</configuration>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop_data/tmp</value>
</property>
</configuration>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
<configuration>
<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.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>2</value>
</property>
</configuration>
启动Hadoop服务- 启动Hadoop服务:
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
jps
输出结果中应该包含NameNode、DataNode、ResourceManager、NodeManager等进程。启动Hadoop样例程序
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi 2 5
查看Hadoop运行状态- 使用命令jps
查看Hadoop运行状态:
$ jps
1234 NameNode
5678 DataNode
9012 ResourceManager
3456 NodeManager
7890 SecondaryNameNode
这里展示了一个包含NameNode、DataNode、ResourceManager、NodeManager、SecondaryNameNode的Hadoop集群的运行状态。
Docker部署Hadoop的优势
Hadoop在Docker中的限制
容器内存限制:由于Docker容器内存限制的原因,可能会导致Hadoop无法正常运行,需要在Docker启动命令中设置--ulimit memlock=-1:-1
参数来解决。
网络限制:Docker容器默认使用的是bridge网络模式,可能会导致Hadoop集群无法正常通信,需要使用Docker的host网络模式或自定义网络模式。
存储限制:Docker容器的存储默认是临时性的,容器停止后会被删除,需要使用Docker的数据卷或绑定宿主机目录的方式来持久化Hadoop数据。
性能限制:由于Docker容器的虚拟化技术,可能会导致Hadoop性能下降,需要根据实际情况进行优化。
后续工作建议- 后续工作建议: