在同一台机器上运行多个datanode

dddzy1tm  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(865)

我有一些关于hadoop的问题,我们计划在生产环境中实现hadoop
我们有一个大的机器集群,每台机器都是一台服务器机器,有大内存和8个核心。每台40台机器每5分钟收集大约60 gb的数据。这些机器还分布在世界各地的多个地点。在hadoop环境中,有一个单独的服务器机器充当namenode。剩下的40台机器都是数据采集器,我把它们作为hadoop集群的数据节点。
因为每台机器上的数据收集量都很高,所以我不希望我的数据跨服务器、跨地域传输。这是我的两个要求
1) 我想要的是我的60 gb的数据被分割成块,但应该在本地处理。为此,我希望在同一台服务器上有多个datanodes deomons。有可能在同一台服务器上运行多个datanodes deomon吗?
2) 是否可以处理指定数据节点上的块。
我将举一个例子来阐明我的观点,比如说我有a、b、c、d。。。。。。。。。。。。
一台机器每5分钟将有60 gb的数据。我可以在一台机器上运行多个datanodes守护程序吗?如果可能的话,我可以告诉我的namemode只将块发送到服务器a上运行的datanodes守护进程,而不发送到其他机器。
我不想要数据的高可用性,也不需要故障保护,所以不需要复制数据。

uqdfh47h

uqdfh47h1#

数据节点和名称节点只是软件的一部分,可以在任何商品机器上运行。因此,这是可能的,但很少在现实世界中使用。如果您推测服务器中的数据不可用会带来风险,那么您可能会想到将数据节点分布在不同的服务器上。
除此之外,apache官方网站还提到:
该体系结构并不排除在同一台机器上运行多个datanode,但在实际部署中很少出现这种情况。
资料来源:https://hadoop.apache.org/docs/r1.2.1/hdfs_design.html#namenode+和+数据节点

l5tcr1uw

l5tcr1uw2#

要在单个节点上启动多个数据节点,请首先下载/构建hadoop二进制文件。
1) 从hadoop源代码下载hadoop二进制文件或构建hadoop二进制文件。
2) 准备hadoop配置以在单个节点上运行(将hadoop默认tmp dir位置从/tmp更改为其他可靠位置)
3) 将以下脚本添加到$hadoop\u 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个数据节点),可以在上查看http://localhost:50070
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

我希望这对你有帮助

相关问题