Hadoop是一个开源Apache项目,允许在大型数据集上创建并行处理应用程序,分布在网络节点上。它由处理节点间数据可扩展性和冗余的Hadoop分布式文件系统(HDFS™)和Hadoop YARN组成:用于在所有节点上执行数据处理任务的作业调度框架。
hadoop
任何Hadoop守护程序。千万不能创建SSH密钥hadoop
的用户。SSH密钥将在稍后的部分中介绍。注意本指南是为非root用户编写的。需要提升权限的命令带有前缀sudo
。如果您不熟悉该sudo
命令,请参阅“ 用户和组”指南。如果没有另外指定,本指南中的所有命令都与hadoop用户一起运行。
在配置主节点和从节点之前,了解Hadoop集群的不同组件非常重要。
一个主节点保持对分布式文件系统的知识,就像inode
上表ext3
文件系统,调度资源分配。node-master将在本指南中处理此角色,并托管两个守护进程:
从节点node1和node2存储实际数据并提供处理能力以运行作业,并将托管两个守护进程:
要使每个节点与其名称进行通信,请编辑该/etc/hosts
文件以添加三个服务器的IP地址。不要忘记用您的IP替换样本IP:
/ etc / hosts文件
1 2 3 | 192.0.2.1 node-master 192.0.2.2 node1 192.0.2.3 node2 |
---|
主节点将使用ssh-connection通过密钥对身份验证连接到其他节点,以管理群集。
hadoop
,并生成ssh-key:
ssh-keygen -b 4096hadoop
在询问时输入用户密码。如果系统提示您是否将密钥添加到已知主机,请输入yes
:
ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@node-master ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@node1 ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@node2以用户身份登录到node-masterhadoop
,从Hadoop项目页面下载Hadoop tarball ,然后解压缩:
cd
wget http://apache.mindstudios.com/hadoop/common/hadoop-2.8.1/hadoop-2.8.1.tar.gz
tar -xzf hadoop-2.8.1.tar.gz
mv hadoop-2.8.1 hadoop
将Hadoop二进制文件添加到PATH中。编辑/home/hadoop/.profile
并添加以下行:
/home/hadoop/.profile1
PATH=/home/hadoop/hadoop/bin:/home/hadoop/hadoop/sbin:$PATH
配置将在node-master上完成并复制到其他节点。
/bin/java
。例如在Debian上,链接是/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
,所以JAVA_HOME
应该是/usr/lib/jvm/java-8-openjdk-amd64/jre
。
如果从Oracle安装java,JAVA_HOME
则是解压缩java存档的路径。~/hadoop/etc/hadoop/hadoop-env.sh
并替换此行:
export JAVA_HOME=${JAVA_HOME}
与您的实际Java安装路径。例如在带有open-jdk-8的Debian上:
〜/ hadoop的在/ etc / hadoop的/ hadoop-env.sh1
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre在每个节点更新上,~/hadoop/etc/hadoop/core-site.xml
您要在端口上将NameNode位置设置为node-master9000
:
〜/ hadoop的在/ etc / hadoop的/芯-site.xml中
1 2 3 4 5 6 7 8 | <?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.conf
:
~/hadoop/etc/hadoop/hdfs-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <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
表示在群集中复制数据的次数。您可以设置2
为在两个节点上复制所有数据。请勿输入高于实际从属节点数的值。
~/hadoop/etc/hadoop/
,重命名mapred-site.xml.template
为mapred-site.xml
:
cd ~/hadoop/etc/hadoop mv mapred-site.xml.template mapred-site.xml编辑yarn-site.xml
:
~/hadoop/etc/hadoop/yarn-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <configuration> <property> <name>yarn.acl.enable</name> <value>0</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>node-master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration> |
---|
slaves
启动脚本使用该文件在所有节点上启动所需的守护程序。编辑~/hadoop/etc/hadoop/slaves
为:
~/hadoop/etc/hadoop/slaves
1 2 | node1 node2 |
---|
低RAM节点上的内存分配可能很棘手,因为默认值不适合RAM少于8GB的节点。本节将重点介绍内存分配如何适用于MapReduce作业,并提供2GB RAM节点的示例配置。
使用两种资源执行YARN作业:
两者都在从属节点上的容器中运行。每个从属节点都运行一个NodeManager守护程序,该守护程序负责在节点上创建容器。整个集群由ResourceManager管理,ResourceManager根据容量要求和当前费用调度所有从节点上的容器分配。
需要正确配置四种类型的资源分配才能使群集正常工作。这些是:
yarn-site.xml
为yarn.nodemanager.resource.memory-mb
。yarn-site.xml
文件中通过yarn.scheduler.maximum-allocation-mb
和yarn.scheduler.minimum-allocation-mb
两个变量名称进行配置。mapred-site.xml
文件中的yarn.app.mapreduce.am.resource.mb
进行配置。mapred-site.xml
文件中对属性mapreduce.map.memory.mb
和mapreduce.reduce.memory.mb
进行配置即可。所有这些属性之间的关系如下图所示:
对于2GB节点,工作配置可能是:
属性 | 值 |
---|---|
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
并添加以下行:
~/hadoop/etc/hadoop/yarn-site.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <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>
最后一个属性禁用虚拟内存检查,可以防止在JDK8上正确分配容器。
编辑/home/hadoop/hadoop/etc/hadoop/mapred-site.xml
并添加以下行:
~/hadoop/etc/hadoop/mapred-site.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <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,并监控所有内容是否正常工作以及与HDFS数据交互。
slaves
中的配置,它将在node-master上启动NameNode和SecondaryNameNode,在node1和node2上启动DataNode。jps
检查每个进程是否正在运行。你在node-master使用(PID会有所不同):
21922 Jps 21603 NameNode 21787 SecondaryNameNode
在node1和node2上使用:
19728 DataNode 19819 Jpshdfs dfsadmin
命令获取有关运行HDFS群集的有用信息。试试例子:
hdfs dfsadmin -report
这将打印所有正在运行的DataNode的信息(例如,容量和使用情况)。要获取所有可用命令的描述,请键入:
hdfs dfsadmin -help,您将获得一个用户友好的监控控制台。
使用命令hdfs dfs
完成HDFS的写入和读取。首先,手动创建主目录。所有其他命令将使用相对于此默认主目录的路径:
hdfs dfs -mkdir -p /user/hadoop
让我们以Gutenberg项目中的一些教科书为例。
/user/hadoop/books
:
hdfs dfs -mkdir booksbooks
目录中:
hdfs dfs -put alice.txt holmes.txt frankenstein.txt booksbook
:
hdfs dfs -ls books有许多命令可以管理您的HDFS。有关完整列表,您可以查看Apache HDFS shell文档,或者打印以下帮助:
hdfs dfs -help
HDFS是一个分布式存储系统,它不为集群中的运行和调度任务提供任何服务。这是YARN框架的工作。以下部分介绍如何启动,监控和向YARN提交作业。
jps
命令检查一切是否正在运行。除了以前的HDFS守护程序,您应该在node-master上看到ResourceManager,在node1和node2上看到NodeManager。yarn
命令提供了用于管理YARN群集的实用程序。您还可以使用以下命令打印正在运行的节点的报告:
yarn node -list
同样,您可以使用以下命令获取正在运行的应用程序列表:
yarn application -list
要获取该yarn
命令的所有可用参数,请参阅Apache YARN文档。8088
资源管理器的端口上启动。将浏览器指向http:// node-master-IP:8088并浏览UI:
将Yarn作业打包到jar
文件中并提交给YARN以使用该命令执行yarn jar
。Hadoop安装包提供了可以运行以测试集群的示例应用程序。您将使用它们在之前上传到HDFS的三本书上运行字数统计。
hdfs dfs -ls output
。如果成功,输出将类似于:
Found 2 items -rw-r--r-- 1 hadoop supergroup 0 2017-10-11 14:09 output/_SUCCESS -rw-r--r-- 1 hadoop supergroup 269158 2017-10-11 14:09 output/part-r-00000现在您已启动并运行YARN群集,您可以:
有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。