时间:2020-03-14来源:电脑系统城作者:电脑系统城
Hadoop集群的架构:
master节点维护分布式文件系统的所有信息,并负责调度资源分配,在Hadoop集群中node-master
就是master的角色,其包括两个服务:
worker节点负责存放数据,并提供执行任务的能力。在worker节点上包含两个进程:
NameNode
;以下配置都是针对Ubuntu系统的。我准备了3台机器:
hadoop
,并设置密码:
sudo adduser hadoop
hadoop
用户添加到sudo
用户组获取管理员权限:
sudo adduser hadoop sudo
我安装的是JDK8,安装方式略。
为了节点之间可以方便的通过名字来通信,我们在hosts文件中加入如下内容:
192.168.0.113 node-master
192.168.0.114 node1
192.168.0.115 node2
192.168.0.116 node3
配置了ssh证书后,master阶段通过ssh免密登录其他节点。
hadoop
用户登录到mastr机器,并创建SSH证书:
ssh-keygen -b 4096 -C 'hadoop-yarn'
cat /home/hadoop/.ssh/id_rsa.pub
/home/hadoop/.ssh
文件夹下创建名为master.pub
的文件,并将上面复制的公钥信息粘贴到里面;
cat ~/.ssh/master.pub >> ~/.ssh/authorized_keys
登录到node-master
,下载hadoop,并解压:
http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz
tar -xzf hadoop-3.1.3.tar.gz
ln -s hadoop-3.1.3 hadoop
/home/hadoop/.profile
,添加如下内容:
PATH=/home/hadoop/hadoop/bin:/home/hadoop/hadoop/sbin:$PATH
.bashrc
,添加下面的内容:
export HADOOP_HOME=/home/hadoop/hadoop
export PATH=${PATH}:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
这里我安装的是ORACLE版本的JDK,目录/usr/local/jdk
,修改~/hadoop/etc/hadoop-env.sh
,设置JAVA_HOME:
export JAVA_HOME=/usr/local/jdk
修改~/hadoop/etc/hadoop/core-site.xml
文件,设置NameNode的路径为node-master的9000端口:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://node-master:9000</value>
</property>
</configuration>
修改hdfs-site.xml
,内容如下:
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/data/nameNode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/data/dataNode</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
最后一个属性dfs.replication
表示该集群上的数据被冗余多少倍。注意replication的值不要超过worker节点的实际数量。
修改mapred-site.xml
,设置YARN作为默认的MapReduce操作的框架:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
</configuration>
修改yarn-site.xml
。yarn.resourcemanager.hostname
的值设置为node-master的ip地址:
<configuration>
<property>
<name>yarn.acl.enable</name>
<value>0</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>203.0.113.0</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
创建一个名为workers
的启动脚本,用来启动需要的进程。修改~/hadoop/etc/hadoop/workers
,把所有的worker节点都加进去。
默认的内存分配对于内存小于8GB的机器并不合适,所有对低内存的机器需要做一些特殊配置。
一个YARN任务的执行会用用到两种类型的资源:
为了集群能够正常工作,下面4个配置必须合理的配置:
yarn.nodemanager.resource.memory-mb
,配置在yarn-site.xml
中;yarn.scheduler.maximum-allocation-mb
和yarn.scheduler.minimum-allocation-mb
,都在yarn-site.xml
文件中配置;yarn.app.mapreduce.am.resource.mb
,配置在mapred-site.xml
中;mapreduce.map.memory.mb
和mapreduce.reduce.memory.mb
,都配置在mapred-site.xml
。以上四个类型的配置之间的关系如下图:
以2G内存的节点为例,可行的配置如下:
属性 | 值 |
---|---|
yarn.nodemanager.resource.memory-mb | 1536 |
yarn.scheduler.maximum-allocation-mb | 1536 |
yarn.scheduler.minimum-allocation-mb | 128 |
yarn.app.mapreduce.am.resource.mb | 512 |
mapreduce.map.memory.mb | 256 |
mapreduce.reduce.memory.mb | 256 |
home/hadoop/hadoop/etc/hadoop/yarn-site.xml
,添加如下配置:
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1536</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>1536</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>128</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
最后一个配置禁用虚拟内存检查。
/home/hadoop/hadoop/etc/hadoop/mapred-site.xml
, 添加如下内容:
<property>
<name>yarn.app.mapreduce.am.resource.mb</name>
<value>512</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>256</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>256</value>
</property>
和正常的单机文件系统一样,HDFS在使用之前也需要格式化。在node-master上,运行如下命令:
hdfs namenode -format
到这里,hadoop的安装完成了,可以运行了。
接下来看下如何在NameNode和DataNodes上启动HDFS,以及如何进行监控。
start-dfs.sh
这个命令会在node-master上启动NameNode
和SecondaryNameNode
进程,同时在数据节点上创建DataNode
进程。数据节点根据workers
文件中的配置。
jps
命令来查看。在node-master上运行jps,可以看到NameNode和SecondaryNameNode,在worker节点上运行jps课题看到DataNode进程。
stop-dfs.sh
hdfs dfsadmin
命令可以获得一些有用的信息:2024-07-16
如何使用 Go 依赖库管理器修复损坏的依赖项?2024-07-07
Java框架如何简化代码的调试过程2023-03-17
Python 使用tf-idf算法计算文档关键字权重并生成词云的方法有这么一段代码,可以先看一下有没有什么问题,作用是输入一段json字符串,反序列化成map,然后将另一个inputMap的内容,merge进这个map 1 2 3 4 5 6 7 8 9 10 11 12 13 14...
2023-03-15
由于数据库的类型为Data 类型,所以插入数据库的时候我先把前端传入的string类型的时间转为Time 再插入。 Go 提供了两种插入的方式,即time.Parse 和 time.ParseInLocation 。两种方式,他们的差异比较大。...
2023-03-09