Hadoop 在同一台计算机上运行多个DataNode

Hadoop 在同一台计算机上运行多个DataNode,hadoop,mapreduce,Hadoop,Mapreduce,我有一些关于hadoop的问题,我们计划在out生产环境中实现hadoop 我们有一个大型的机器集群,每台机器都是一台服务器机器,具有大型RAM和8个内核。每台40台机器每5分钟收集约60 gb的数据。这些机器还分布在多个地点,分布在世界各地。 在hadoop环境中,有一台单独的服务器机器将充当namenode。剩下的40台机器都是数据采集器,我将它们作为数据节点加入hadoop集群 由于每台机器上的数据收集量都很高,我不希望我的数据跨服务器、跨地域传输。这是我的两个要求 1) 我想要的是我的6

我有一些关于hadoop的问题,我们计划在out生产环境中实现hadoop

我们有一个大型的机器集群,每台机器都是一台服务器机器,具有大型RAM和8个内核。每台40台机器每5分钟收集约60 gb的数据。这些机器还分布在多个地点,分布在世界各地。 在hadoop环境中,有一台单独的服务器机器将充当namenode。剩下的40台机器都是数据采集器,我将它们作为数据节点加入hadoop集群

由于每台机器上的数据收集量都很高,我不希望我的数据跨服务器、跨地域传输。这是我的两个要求

1) 我想要的是我的60 gb数据被分割成块,但应该在本地进行处理。为此,我希望在同一台服务器上有多个datanodes Deomon。 是否可能在同一台服务器上运行多个datanodes Deomon

2) 是否可以在指定的数据节点上处理块

我将举一个例子来阐明我的观点 假设我有服务器机器,如A、B、C、D

一台机器每5分钟将有60 gb的数据。 我可以在计算机上运行多个datanodes守护程序吗? 如果可能的话,我可以告诉我的namemode只将块发送到服务器A上运行的datanodes守护进程,而不发送到其他机器


我不想要数据的高可用性,也不需要故障保护,因此无需复制数据。

要在单个节点上启动多个数据节点,请首先下载/构建hadoop二进制文件

1) 从hadoop源代码下载hadoop二进制文件或构建hadoop二进制文件

2) 准备hadoop配置以在单个节点上运行(将hadoop默认tmp目录位置从/tmp更改为其他可靠位置)

3) 将以下脚本添加到$HADOOP_HOME/bin目录,并将其chmod到744

4) 格式HDFS–bin/hadoop namenode–格式(适用于hadoop 0.20及以下版本),bin/HDFS namenode–格式(适用于版本>0.21)

5) 启动HDFS bin/Start-dfs.sh(这将启动Namenode和1个数据节点),可在上查看

6) 使用bin/run-additionalDN.sh启动其他数据节点

运行附加DN.sh

#!/bin/sh
# This is used for starting multiple datanodes on the same machine.
# run it from hadoop-dir/ just like 'bin/hadoop' 

#Usage: run-additionalDN.sh [start|stop] dnnumber
#e.g. run-datanode.sh start 2

DN_DIR_PREFIX="/path/to/store/data_and_log_of_additionalDN/"

if [ -z $DN_DIR_PREFIX ]; then
echo $0: DN_DIR_PREFIX is not set. set it to something like "/hadoopTmp/dn"
exit 1
fi

run_datanode () {
DN=$2
export HADOOP_LOG_DIR=$DN_DIR_PREFIX$DN/logs
export HADOOP_PID_DIR=$HADOOP_LOG_DIR
DN_CONF_OPTS="\
-Dhadoop.tmp.dir=$DN_DIR_PREFIX$DN\
-Ddfs.datanode.address=0.0.0.0:5001$DN \
-Ddfs.datanode.http.address=0.0.0.0:5008$DN \
-Ddfs.datanode.ipc.address=0.0.0.0:5002$DN"
bin/hadoop-daemon.sh --script bin/hdfs $1 datanode $DN_CONF_OPTS
}

cmd=$1
shift;

for i in $*
do
run_datanode  $cmd $i
done

我希望这将帮助您

数据节点和名称节点只是一个软件,可以在任何商品机器上运行。因此这是可能的,但在现实世界中很少使用。如果您推测服务器中的数据不可用会带来风险,那么您可能会想到将数据节点分布在不同的服务器上

除此之外,apache官方网站还提到:

该体系结构不排除在同一台机器上运行多个DataNode,但在实际部署中很少出现这种情况

资料来源: