`
liujiekasini0312
  • 浏览: 147402 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

搭建Hadoop集群

 
阅读更多
官方配置手册:http://hadoop.apache.org/docs/stable/
通常,Hadoop集群里的一台机器被指定为NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode也作为TaskTracker,它们是slaves。
1、先决条件
确保在你的集群中的每个节点上都安装了所有必需软件:Java环境,SSH和Hadoop。其中Java使用1.6.x或以上的版本,必须安装,建议选择Sun公司发行的Java版本。ssh必须安装并且保证sshd一直运行,以便用Hadoop脚本管理远程Hadoop守护进程。

例如,如果没有安装ssh,在Ubuntu上可以安装:

  1. $sudoapt-getinstallopenssh-server
  2. $sudoapt-getinstallrsync
rsync是远程文件拷贝工具。执行$ netstat -nat查看22端口是否开启了。测试ssh localhost,输入当前用户的密码,回车就ok了。说明安装成功,同时ssh登录需要密码。这种默认安装方式完后,默认配置文件是在/etc/ssh/目录下。sshd配置文件是/etc/ssh/sshd_config。
Hadoop的稳定版(hadoop-1.0.4.tar.gz)可以从此处下载:http://hadoop.apache.org/releases.html
操作系统环境:Ubuntu 12.04 LTS版,安装在VMware Workstation中。Java使用的是最新的OpenJDK 1.7版本。
为了搭建集群,在vmvare安装好一台Ubuntu虚拟机后,可以导出或者克隆出另外两台虚拟机。注意要保证虚拟机的ip和主机的ip在同一个ip段,这样几个虚拟机和主机之间可以相互通信。为了保证虚拟机的ip和主机的ip在同一个ip段,虚拟机连接设置为桥接。
准备机器:一台master,若干台slave,配置每台机器的/etc/hosts保证各台机器之间通过机器名可以互访,例如:
机器jackzhou-node1:为master,地址192.168.1.6,作用NameNode, JobTracker。
机器jackzhou-node2:为slave1,地址192.168.1.7,作用DataNode, TaskTracker。
机器jackzhou-node3:为slave2,地址192.168.1.8,作用DataNode, TaskTracker。
一般要在所有的机器上都建立相同的Hadoop安装目录,例如可以建立相同的用户并以该用户的home路径来做hadoop的安装路径,我们统一解压到/home/jackzhou目录下。
2、单个节点的设置
解压hadoop-1.0.4.tar.gz到/home/jackzhou/下,编辑文件conf/hadoop-env.sh,至少要定义其中的JAVA_HOME并指向你的Java安装根目录(/usr/lib/jvm/java-7-openjdk-i386)。输入命令bin/hadoop可显示hadoop脚本的使用帮助。
现在你可以用下面的任一种模式来启动Hadoop集群:
(1)本地(独立)模式
(2)伪分布式模式
(3)完全分布式模式
缺省情况下,Hadoop以本地模式(非分布式模式)运行,只有一个单一的Java进程。这通常用作调试。下面的例子拷贝conf目录以用作输入,然后显示每个正则表达式的匹配。输出被写入到output目录。
  1. $mkdirinput
  2. $cpconf/*.xmlinput
  3. $bin/hadoopjarhadoop-examples-*.jargrepinputoutput'dfs[a-z.]+'
  4. $catoutput/*
Hadoop也可以通过伪分布式模式运行在单个节点上,这时每个Hadoop守护进程都是一个单独的Java进程。下面是一个配置实例:
conf/core-site.xml文件:

  1. <configuration>
  2. <property>
  3. <name>fs.default.name</name>
  4. <value>hdfs://localhost:9000</value>
  5. </property>
  6. </configuration>
conf/hdfs-site.xml文件:
  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>1</value>
  5. </property>
  6. </configuration>
conf/mapred-site.xml文件:
  1. <configuration>
  2. <property>
  3. <name>mapred.job.tracker</name>
  4. <value>localhost:9001</value>
  5. </property>
  6. </configuration>
完全分布式模式就是通常多个节点的大规模Hadoop集群。
3、Hadoop集群配置
(1)配置SSH

在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的,这就需要在节点之间执行指令的时候是无需输入密码的,因此我们需要配置SSH运用无密码公钥认证的形式。以本文中的三台机器为例,现在jackzhou-node1是主节点,他需要连接jackzhou-node2和jackzhou-node3。需要确定每台机器上都安装了ssh,并且DataNode机器上sshd服务已经启动。
$ssh-keygen -t rsa
这个命令将为节点上的用户生成其密钥对,询问其保存路径时直接回车采用默认路径,当提示要为生成的密钥输入passphrase的时候,直接回车,也就是将其设定为空密码。生成的密钥对id_rsa,id_rsa.pub,默认存储在.ssh目录下。然后将id_rsa.pub的内容复制到每个机器(也包括本机)的.ssh/authorized_keys文件中,如果机器上已经有authorized_keys这个文件了,就在文件末尾加上id_rsa.pub中的内容,如果没有authorized_keys这个文件,直接复制过去就行。
首先设置NameNode的ssh为无需密码,自动登录的。
  1. $cd/home/jackzhou
  2. $ssh-keygen-trsa(一直回车,设置成空密码)
  3. $cd.ssh
  4. $cpid_rsa.pubauthorized_keys
测试是否需要密码,若无需密码,则成功:
  1. $sshlocalhost
或者用$ssh jackzhou-node1,如果不行,则一般是/etc/hosts文件中的IP-主机名映射不正确,修改它使正确的IP地址映射到正确的主机名即可。注意当我们通过主机名来访问机器(不管是本机还以是另外两台远程Slave机器)时,都要在/etc/hosts文件设置好正确的IP-主机名映射,添加两台slave机器的IP-主机名映射。
然后复制authorized_keys到jackzhou-node2和jackzhou-node3上。在jackzhou-node2和jackzhou-node3上也要先用ssh-keygen -t rsa生成公钥和私钥,然后回到jackzhou-node1,复制authorized_keys到jackzhou-node2和jackzhou-node3。
  1. $scpauthorized_keysjackzhou-node2:/home/jackzhou/.ssh/
  2. $scpauthorized_keysjackzhou-node3:/home/jackzhou/.ssh/
测试ssh jackzhou-node2或者ssh jackzhou-node3(第一次需要输入yes)。如果不须要输入密码则配置成功,如果还须要请检查上面的配置是否正确。
(2)安装配置Hadoop
安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。并且安装路径要一致,如果我们用HADOOP_HOME指代安装的根路径,通常集群里的所有机器的HADOOP_HOME路径相同。
如果集群内机器的环境完全一样,可以在一台机器上配置好,然后把配置好的软件即hadoop-1.0.4整个文件夹拷贝到其他机器的相同位置即可。注意各个hadoop节点上的conf/hadoop-env.sh文件,使其JAVA_HOME指向Java安装根目录。
可以将Master上的Hadoop通过scp拷贝到每一个Slave相同的目录下,同时根据每一个Slave的Java_HOME的不同修改其hadoop-env.sh。
为了方便使用hadoop命令或者start-all.sh等命令,修改Master上/etc/profile新增以下内容:
export HADOOP_HOME=/home/jachzhou/hadoop-1.0.4
export PATH=$PATH:$HADOOP_HOME/bin
修改完毕后,执行source /etc/profile来使其生效。
下面是Hadoop集群配置(所有节点相同):
1)配置文件conf/core-site.xml:核心配置文件,这里配置的是HDFS的地址和端口号。
  1. <?xmlversion="1.0"?>
  2. <?xml-stylesheettype="text/xsl"href="configuration.xsl"?>
  3. <configuration>
  4. <property>
  5. <name>fs.default.name</name>
  6. <value>hdfs://jackzhou-node1:49000</value>
  7. </property>
  8. <property>
  9. <name>hadoop.tmp.dir</name>
  10. <value>/home/jachzhou/hadoop-1.0.4/tmp</value>
  11. <description>Abaseforothertemporarydirectories.</description>
  12. </property>
  13. </configuration>
fs.default.name:是NameNode的URI。hdfs://主机名:端口/
hadoop.tmp.dir:Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此tmp目录即可。不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令。如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为/tmp/hadoo-hadoop。而这个目录在每次重启后都会被干掉,必须重新执行format才行,否则会出错。
2)配置文件conf/hdfs-site.xml:这里配置HDFS的目录结构。
  1. <?xmlversionxmlversion="1.0"?>
  2. <?xml-stylesheettypexml-stylesheettype="text/xsl"href="configuration.xsl"?>
  3. <configuration>
  4. <property>
  5. <name>dfs.name.dir</name>
  6. <value>/home/jackzhou/name1,/home/jackzhou/name2</value>
  7. <description>Namedirectories</description>
  8. </property>
  9. <property>
  10. <name>dfs.data.dir</name>
  11. <value>/home/jackzhou/data1,/home/jackzhou/data2</value>
  12. <description>Datadirectories</description>
  13. </property>
  14. <property>
  15. <name>dfs.replication</name>
  16. <!--我们的集群有两个结点,所以rep两份-->
  17. <value>2</vaue>
  18. </property>
  19. </configuration>
dfs.name.dir:是NameNode持久存储名字空间及事务日志的本地文件系统路径。当这个值是一个逗号分割的目录列表时,NameTable数据将会被复制到所有目录中做冗余备份。
dfs.data.dir:是DataNode存放块数据的本地文件系统路径,逗号分割的列表。当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。
dfs.replication:是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。
注意此处的name1、name2、data1、data2目录不能预先创建,hadoop格式化时会自动创建,如果预先创建反而会有问题。
3)配置文件conf/mapred-site.xml:这里是MapReduce的配置文件,配置JobTracker的地址和端口。
  1. <?xmlversionxmlversion="1.0"?>
  2. <?xml-stylesheettypexml-stylesheettype="text/xsl"href="configuration.xsl"?>
  3. <configuration>
  4. <property>
  5. <name>mapred.job.tracker</name>
  6. <value>jackzhou-node1:49001</value>
  7. </property>
  8. <property>
  9. <name>mapred.local.dir</name>
  10. <value>/home/jachzhou/hadoop-1.0.4/tmp</value>
  11. </property>
  12. </configuration>
mapred.job.tracker:是JobTracker的主机名(或者IP)和端口。主机:端口。
mapred.local.dir:临时目录,存放MapReduce的临时数据。
4)配置masters和slaves主从结点
配置conf/masters和conf/slaves来设置主从结点,注意最好使用主机名,并且保证机器之间通过主机名可以互相访问,每个主机名一行。
masters文件中输入jackzhou-node1。
slaves文件中输入jackzhou-node2和jackzhou-node3。
配置结束,把配置好的hadoop文件夹拷贝到其他集群的机器中,并且保证上面的配置对于其他机器而言正确,例如如果其他机器的Java安装路径不一样,要修改conf/hadoop-env.sh。
4、Hadoop启动和关闭
(1)格式化一个新的分布式文件系统
先格式化一个新的分布式文件系统:bin/hadoop namenode -format
成功时系统输出:
  1. 13/04/0517:47:47INFOnamenode.NameNode:STARTUP_MSG:
  2. /************************************************************
  3. STARTUP_MSG:StartingNameNode
  4. STARTUP_MSG:host=jackzhou-node1/127.0.1.1
  5. STARTUP_MSG:args=[-format]
  6. STARTUP_MSG:version=1.0.4
  7. STARTUP_MSG:build=https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0-r1393290;compiledby'hortonfo'onWedOct305:13:58UTC2012
  8. ************************************************************/
  9. 13/04/0517:47:47INFOutil.GSet:VMtype=32-bit
  10. 13/04/0517:47:47INFOutil.GSet:2%maxmemory=19.33375MB
  11. 13/04/0517:47:47INFOutil.GSet:capacity=2^22=4194304entries
  12. 13/04/0517:47:47INFOutil.GSet:recommended=4194304,actual=4194304
  13. 13/04/0517:47:52INFOnamenode.FSNamesystem:fsOwner=jackzhou
  14. 13/04/0517:47:52INFOnamenode.FSNamesystem:supergroup=supergroup
  15. 13/04/0517:47:52INFOnamenode.FSNamesystem:isPermissionEnabled=true
  16. 13/04/0517:47:52INFOnamenode.FSNamesystem:dfs.block.invalidate.limit=100
  17. 13/04/0517:47:52INFOnamenode.FSNamesystem:isAccessTokenEnabled=falseaccessKeyUpdateInterval=0min(s),accessTokenLifetime=0min(s)
  18. 13/04/0517:47:52INFOnamenode.NameNode:Cachingfilenamesoccuringmorethan10times
  19. 13/04/0517:47:52INFOcommon.Storage:Imagefileofsize114savedin0seconds.
  20. 13/04/0517:47:53INFOcommon.Storage:Storagedirectory/home/jackzhou/name1hasbeensuccessfullyformatted.
  21. 13/04/0517:47:53INFOcommon.Storage:Imagefileofsize114savedin0seconds.
  22. 13/04/0517:47:53INFOcommon.Storage:Storagedirectory/home/jackzhou/name2hasbeensuccessfullyformatted.
  23. 13/04/0517:47:53INFOnamenode.NameNode:SHUTDOWN_MSG:
  24. /************************************************************
  25. SHUTDOWN_MSG:ShuttingdownNameNodeatjackzhou-node1/127.0.1.1
  26. ************************************************************/
查看输出保证分布式文件系统格式化成功。执行完后可以到master机器上看到/home/jackzhou/name1和/home/jackzhou/name2两个目录。在主节点master上面启动hadoop,主节点会启动所有从节点的hadoop。
(2)启动所有节点
同时启动所有HDFS集群和MapReduce集群:bin/start-all.sh。执行完后可以到master和slaves机器上看到/home/jackzhou/data1和/home/jackzhou/data2两个目录。
单独启动HDFS集群:bin/start-dfs.sh。该脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。
单独启动MapReduce集群:bin/start-mapred.sh。该脚本在JobTracker机器上运行,它参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。
(3)关闭所有节点
从主节点master关闭hadoop:bin/stop-all.sh。主节点会关闭所有从节点的hadoop。Hadoop守护进程的日志写入到${HADOOP_LOG_DIR}目录(默认是${HADOOP_HOME}/logs)。
5、测试
(1)查看集群:NameNode的默认地址为http://jackzhou-node1:50070/,JobTracker的默认地址为http://jackzhou-node1:50030/
(2)使用netstat –nat查看端口49000和49001是否正在使用。
(3)使用jps查看进程。要想检查守护进程是否正在运行,可以使用jps命令(这是用于JVM进程的ps实用程序)。这个命令列出5个守护进程及其进程标识符。
(5)将输入文件拷贝到分布式文件系统:
  1. $bin/hadoopfs-mkdirinput
  2. $bin/hadoopfs-putconf/core-site.xmlinput
运行发行版提供的示例程序:
  1. $bin/hadoopjarhadoop-examples-*.jargrepinputoutput'dfs[a-z.]+'
这条命令意思是使用hadoop命令运行jar包,包名为hadoop-examples-1.0.4.jar,即hadoop示例程序。整个命令就是运行hadoop示例程序中的grep,对应的hdfs上的输入目录为input、输出目录为output。这里的grep是一个MapReduce程序,用来对输入进行正则表达式匹配,匹配正确的结果写到输出中,正则表达式是后边的'dfs[a-z.]+'。
在分布式文件系统上查看输出文件:bin/hadoop fs -cat output/*
统计结果:hadoop fs -cat output/part-00000
6、HDFS常用操作
hadoop dfs -ls:列出HDFS下的文件
hadoop dfs -ls in:列出HDFS下某个文档中的文件
hadoop dfs -put test1.txt test:上传文件到指定目录并且重新命名,只有所有的DataNode都接收完数据才算成功
hadoop dfs -get in getin:从HDFS获取文件并且重新命名为getin,同put一样可操作文件也可操作目录
hadoop dfs -rmr out:从HDFS上删除指定文件
hadoop dfs -cat in/*:查看HDFS上in目录的内容
hadoop dfsadmin -report:查看HDFS的基本统计信息
hadoop dfsadmin -safemode leave:退出安全模式
hadoop dfsadmin -safemode enter:进入安全模式
7、添加节点
可扩展性是HDFS的一个重要特性,首先在新加的节点上安装hadoop,然后修改$HADOOP_HOME/conf/master文件,加入NameNode主机名,然后在NameNode节点上修改$HADOOP_HOME/conf/slaves文件,加入新加节点
主机名,再建立到新加节点无密码的SSH连接。
运行启动命令:start-all.sh
然后可以通过http://(Master主机名):50070,查看新添加的DataNode
8、负载均衡
start-balancer.sh,可以使DataNode节点上选择策略重新平衡DataNode上的数据块的分布。
官方配置手册:http://hadoop.apache.org/docs/stable/
通常,Hadoop集群里的一台机器被指定为NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode也作为TaskTracker,它们是slaves。
1、先决条件
确保在你的集群中的每个节点上都安装了所有必需软件:Java环境,SSH和Hadoop。其中Java使用1.6.x或以上的版本,必须安装,建议选择Sun公司发行的Java版本。ssh必须安装并且保证sshd一直运行,以便用Hadoop脚本管理远程Hadoop守护进程。

例如,如果没有安装ssh,在Ubuntu上可以安装:

  1. $sudoapt-getinstallopenssh-server
  2. $sudoapt-getinstallrsync
rsync是远程文件拷贝工具。执行$ netstat -nat查看22端口是否开启了。测试ssh localhost,输入当前用户的密码,回车就ok了。说明安装成功,同时ssh登录需要密码。这种默认安装方式完后,默认配置文件是在/etc/ssh/目录下。sshd配置文件是/etc/ssh/sshd_config。
Hadoop的稳定版(hadoop-1.0.4.tar.gz)可以从此处下载:http://hadoop.apache.org/releases.html
操作系统环境:Ubuntu 12.04 LTS版,安装在VMware Workstation中。Java使用的是最新的OpenJDK 1.7版本。
为了搭建集群,在vmvare安装好一台Ubuntu虚拟机后,可以导出或者克隆出另外两台虚拟机。注意要保证虚拟机的ip和主机的ip在同一个ip段,这样几个虚拟机和主机之间可以相互通信。为了保证虚拟机的ip和主机的ip在同一个ip段,虚拟机连接设置为桥接。
准备机器:一台master,若干台slave,配置每台机器的/etc/hosts保证各台机器之间通过机器名可以互访,例如:
机器jackzhou-node1:为master,地址192.168.1.6,作用NameNode, JobTracker。
机器jackzhou-node2:为slave1,地址192.168.1.7,作用DataNode, TaskTracker。
机器jackzhou-node3:为slave2,地址192.168.1.8,作用DataNode, TaskTracker。
一般要在所有的机器上都建立相同的Hadoop安装目录,例如可以建立相同的用户并以该用户的home路径来做hadoop的安装路径,我们统一解压到/home/jackzhou目录下。
2、单个节点的设置
解压hadoop-1.0.4.tar.gz到/home/jackzhou/下,编辑文件conf/hadoop-env.sh,至少要定义其中的JAVA_HOME并指向你的Java安装根目录(/usr/lib/jvm/java-7-openjdk-i386)。输入命令bin/hadoop可显示hadoop脚本的使用帮助。
现在你可以用下面的任一种模式来启动Hadoop集群:
(1)本地(独立)模式
(2)伪分布式模式
(3)完全分布式模式
缺省情况下,Hadoop以本地模式(非分布式模式)运行,只有一个单一的Java进程。这通常用作调试。下面的例子拷贝conf目录以用作输入,然后显示每个正则表达式的匹配。输出被写入到output目录。
  1. $mkdirinput
  2. $cpconf/*.xmlinput
  3. $bin/hadoopjarhadoop-examples-*.jargrepinputoutput'dfs[a-z.]+'
  4. $catoutput/*
Hadoop也可以通过伪分布式模式运行在单个节点上,这时每个Hadoop守护进程都是一个单独的Java进程。下面是一个配置实例:
conf/core-site.xml文件:

  1. <configuration>
  2. <property>
  3. <name>fs.default.name</name>
  4. <value>hdfs://localhost:9000</value>
  5. </property>
  6. </configuration>
conf/hdfs-site.xml文件:
  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>1</value>
  5. </property>
  6. </configuration>
conf/mapred-site.xml文件:
  1. <configuration>
  2. <property>
  3. <name>mapred.job.tracker</name>
  4. <value>localhost:9001</value>
  5. </property>
  6. </configuration>
完全分布式模式就是通常多个节点的大规模Hadoop集群。
3、Hadoop集群配置
(1)配置SSH

在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的,这就需要在节点之间执行指令的时候是无需输入密码的,因此我们需要配置SSH运用无密码公钥认证的形式。以本文中的三台机器为例,现在jackzhou-node1是主节点,他需要连接jackzhou-node2和jackzhou-node3。需要确定每台机器上都安装了ssh,并且DataNode机器上sshd服务已经启动。
$ssh-keygen -t rsa
这个命令将为节点上的用户生成其密钥对,询问其保存路径时直接回车采用默认路径,当提示要为生成的密钥输入passphrase的时候,直接回车,也就是将其设定为空密码。生成的密钥对id_rsa,id_rsa.pub,默认存储在.ssh目录下。然后将id_rsa.pub的内容复制到每个机器(也包括本机)的.ssh/authorized_keys文件中,如果机器上已经有authorized_keys这个文件了,就在文件末尾加上id_rsa.pub中的内容,如果没有authorized_keys这个文件,直接复制过去就行。
首先设置NameNode的ssh为无需密码,自动登录的。
  1. $cd/home/jackzhou
  2. $ssh-keygen-trsa(一直回车,设置成空密码)
  3. $cd.ssh
  4. $cpid_rsa.pubauthorized_keys
测试是否需要密码,若无需密码,则成功:
  1. $sshlocalhost
或者用$ssh jackzhou-node1,如果不行,则一般是/etc/hosts文件中的IP-主机名映射不正确,修改它使正确的IP地址映射到正确的主机名即可。注意当我们通过主机名来访问机器(不管是本机还以是另外两台远程Slave机器)时,都要在/etc/hosts文件设置好正确的IP-主机名映射,添加两台slave机器的IP-主机名映射。
然后复制authorized_keys到jackzhou-node2和jackzhou-node3上。在jackzhou-node2和jackzhou-node3上也要先用ssh-keygen -t rsa生成公钥和私钥,然后回到jackzhou-node1,复制authorized_keys到jackzhou-node2和jackzhou-node3。
  1. $scpauthorized_keysjackzhou-node2:/home/jackzhou/.ssh/
  2. $scpauthorized_keysjackzhou-node3:/home/jackzhou/.ssh/
测试ssh jackzhou-node2或者ssh jackzhou-node3(第一次需要输入yes)。如果不须要输入密码则配置成功,如果还须要请检查上面的配置是否正确。
(2)安装配置Hadoop
安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。并且安装路径要一致,如果我们用HADOOP_HOME指代安装的根路径,通常集群里的所有机器的HADOOP_HOME路径相同。
如果集群内机器的环境完全一样,可以在一台机器上配置好,然后把配置好的软件即hadoop-1.0.4整个文件夹拷贝到其他机器的相同位置即可。注意各个hadoop节点上的conf/hadoop-env.sh文件,使其JAVA_HOME指向Java安装根目录。
可以将Master上的Hadoop通过scp拷贝到每一个Slave相同的目录下,同时根据每一个Slave的Java_HOME的不同修改其hadoop-env.sh。
为了方便使用hadoop命令或者start-all.sh等命令,修改Master上/etc/profile新增以下内容:
export HADOOP_HOME=/home/jachzhou/hadoop-1.0.4
export PATH=$PATH:$HADOOP_HOME/bin
修改完毕后,执行source /etc/profile来使其生效。
下面是Hadoop集群配置(所有节点相同):
1)配置文件conf/core-site.xml:核心配置文件,这里配置的是HDFS的地址和端口号。
  1. <?xmlversion="1.0"?>
  2. <?xml-stylesheettype="text/xsl"href="configuration.xsl"?>
  3. <configuration>
  4. <property>
  5. <name>fs.default.name</name>
  6. <value>hdfs://jackzhou-node1:49000</value>
  7. </property>
  8. <property>
  9. <name>hadoop.tmp.dir</name>
  10. <value>/home/jachzhou/hadoop-1.0.4/tmp</value>
  11. <description>Abaseforothertemporarydirectories.</description>
  12. </property>
  13. </configuration>
fs.default.name:是NameNode的URI。hdfs://主机名:端口/
hadoop.tmp.dir:Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此tmp目录即可。不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令。如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为/tmp/hadoo-hadoop。而这个目录在每次重启后都会被干掉,必须重新执行format才行,否则会出错。
2)配置文件conf/hdfs-site.xml:这里配置HDFS的目录结构。
  1. <?xmlversionxmlversion="1.0"?>
  2. <?xml-stylesheettypexml-stylesheettype="text/xsl"href="configuration.xsl"?>
  3. <configuration>
  4. <property>
  5. <name>dfs.name.dir</name>
  6. <value>/home/jackzhou/name1,/home/jackzhou/name2</value>
  7. <description>Namedirectories</description>
  8. </property>
  9. <property>
  10. <name>dfs.data.dir</name>
  11. <value>/home/jackzhou/data1,/home/jackzhou/data2</value>
  12. <description>Datadirectories</description>
  13. </property>
  14. <property>
  15. <name>dfs.replication</name>
  16. <!--我们的集群有两个结点,所以rep两份-->
  17. <value>2</vaue>
  18. </property>
  19. </configuration>
dfs.name.dir:是NameNode持久存储名字空间及事务日志的本地文件系统路径。当这个值是一个逗号分割的目录列表时,NameTable数据将会被复制到所有目录中做冗余备份。
dfs.data.dir:是DataNode存放块数据的本地文件系统路径,逗号分割的列表。当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。
dfs.replication:是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。
注意此处的name1、name2、data1、data2目录不能预先创建,hadoop格式化时会自动创建,如果预先创建反而会有问题。
3)配置文件conf/mapred-site.xml:这里是MapReduce的配置文件,配置JobTracker的地址和端口。
  1. <?xmlversionxmlversion="1.0"?>
  2. <?xml-stylesheettypexml-stylesheettype="text/xsl"href="configuration.xsl"?>
  3. <configuration>
  4. <property>
  5. <name>mapred.job.tracker</name>
  6. <value>jackzhou-node1:49001</value>
  7. </property>
  8. <property>
  9. <name>mapred.local.dir</name>
  10. <value>/home/jachzhou/hadoop-1.0.4/tmp</value>
  11. </property>
  12. </configuration>
mapred.job.tracker:是JobTracker的主机名(或者IP)和端口。主机:端口。
mapred.local.dir:临时目录,存放MapReduce的临时数据。
4)配置masters和slaves主从结点
配置conf/masters和conf/slaves来设置主从结点,注意最好使用主机名,并且保证机器之间通过主机名可以互相访问,每个主机名一行。
masters文件中输入jackzhou-node1。
slaves文件中输入jackzhou-node2和jackzhou-node3。
配置结束,把配置好的hadoop文件夹拷贝到其他集群的机器中,并且保证上面的配置对于其他机器而言正确,例如如果其他机器的Java安装路径不一样,要修改conf/hadoop-env.sh。
4、Hadoop启动和关闭
(1)格式化一个新的分布式文件系统
先格式化一个新的分布式文件系统:bin/hadoop namenode -format
成功时系统输出:
  1. 13/04/0517:47:47INFOnamenode.NameNode:STARTUP_MSG:
  2. /************************************************************
  3. STARTUP_MSG:StartingNameNode
  4. STARTUP_MSG:host=jackzhou-node1/127.0.1.1
  5. STARTUP_MSG:args=[-format]
  6. STARTUP_MSG:version=1.0.4
  7. STARTUP_MSG:build=https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0-r1393290;compiledby'hortonfo'onWedOct305:13:58UTC2012
  8. ************************************************************/
  9. 13/04/0517:47:47INFOutil.GSet:VMtype=32-bit
  10. 13/04/0517:47:47INFOutil.GSet:2%maxmemory=19.33375MB
  11. 13/04/0517:47:47INFOutil.GSet:capacity=2^22=4194304entries
  12. 13/04/0517:47:47INFOutil.GSet:recommended=4194304,actual=4194304
  13. 13/04/0517:47:52INFOnamenode.FSNamesystem:fsOwner=jackzhou
  14. 13/04/0517:47:52INFOnamenode.FSNamesystem:supergroup=supergroup
  15. 13/04/0517:47:52INFOnamenode.FSNamesystem:isPermissionEnabled=true
  16. 13/04/0517:47:52INFOnamenode.FSNamesystem:dfs.block.invalidate.limit=100
  17. 13/04/0517:47:52INFOnamenode.FSNamesystem:isAccessTokenEnabled=falseaccessKeyUpdateInterval=0min(s),accessTokenLifetime=0min(s)
  18. 13/04/0517:47:52INFOnamenode.NameNode:Cachingfilenamesoccuringmorethan10times
  19. 13/04/0517:47:52INFOcommon.Storage:Imagefileofsize114savedin0seconds.
  20. 13/04/0517:47:53INFOcommon.Storage:Storagedirectory/home/jackzhou/name1hasbeensuccessfullyformatted.
  21. 13/04/0517:47:53INFOcommon.Storage:Imagefileofsize114savedin0seconds.
  22. 13/04/0517:47:53INFOcommon.Storage:Storagedirectory/home/jackzhou/name2hasbeensuccessfullyformatted.
  23. 13/04/0517:47:53INFOnamenode.NameNode:SHUTDOWN_MSG:
  24. /************************************************************
  25. SHUTDOWN_MSG:ShuttingdownNameNodeatjackzhou-node1/127.0.1.1
  26. ************************************************************/
查看输出保证分布式文件系统格式化成功。执行完后可以到master机器上看到/home/jackzhou/name1和/home/jackzhou/name2两个目录。在主节点master上面启动hadoop,主节点会启动所有从节点的hadoop。
(2)启动所有节点
同时启动所有HDFS集群和MapReduce集群:bin/start-all.sh。执行完后可以到master和slaves机器上看到/home/jackzhou/data1和/home/jackzhou/data2两个目录。
单独启动HDFS集群:bin/start-dfs.sh。该脚本会参照NameNode上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动DataNode守护进程。
单独启动MapReduce集群:bin/start-mapred.sh。该脚本在JobTracker机器上运行,它参照JobTracker上${HADOOP_CONF_DIR}/slaves文件的内容,在所有列出的slave上启动TaskTracker守护进程。
(3)关闭所有节点
从主节点master关闭hadoop:bin/stop-all.sh。主节点会关闭所有从节点的hadoop。Hadoop守护进程的日志写入到${HADOOP_LOG_DIR}目录(默认是${HADOOP_HOME}/logs)。
5、测试
(1)查看集群:NameNode的默认地址为http://jackzhou-node1:50070/,JobTracker的默认地址为http://jackzhou-node1:50030/
(2)使用netstat –nat查看端口49000和49001是否正在使用。
(3)使用jps查看进程。要想检查守护进程是否正在运行,可以使用jps命令(这是用于JVM进程的ps实用程序)。这个命令列出5个守护进程及其进程标识符。
(5)将输入文件拷贝到分布式文件系统:
  1. $bin/hadoopfs-mkdirinput
  2. $bin/hadoopfs-putconf/core-site.xmlinput
运行发行版提供的示例程序:
  1. $bin/hadoopjarhadoop-examples-*.jargrepinputoutput'dfs[a-z.]+'
这条命令意思是使用hadoop命令运行jar包,包名为hadoop-examples-1.0.4.jar,即hadoop示例程序。整个命令就是运行hadoop示例程序中的grep,对应的hdfs上的输入目录为input、输出目录为output。这里的grep是一个MapReduce程序,用来对输入进行正则表达式匹配,匹配正确的结果写到输出中,正则表达式是后边的'dfs[a-z.]+'。
在分布式文件系统上查看输出文件:bin/hadoop fs -cat output/*
统计结果:hadoop fs -cat output/part-00000
6、HDFS常用操作
hadoop dfs -ls:列出HDFS下的文件
hadoop dfs -ls in:列出HDFS下某个文档中的文件
hadoop dfs -put test1.txt test:上传文件到指定目录并且重新命名,只有所有的DataNode都接收完数据才算成功
hadoop dfs -get in getin:从HDFS获取文件并且重新命名为getin,同put一样可操作文件也可操作目录
hadoop dfs -rmr out:从HDFS上删除指定文件
hadoop dfs -cat in/*:查看HDFS上in目录的内容
hadoop dfsadmin -report:查看HDFS的基本统计信息
hadoop dfsadmin -safemode leave:退出安全模式
hadoop dfsadmin -safemode enter:进入安全模式
7、添加节点
可扩展性是HDFS的一个重要特性,首先在新加的节点上安装hadoop,然后修改$HADOOP_HOME/conf/master文件,加入NameNode主机名,然后在NameNode节点上修改$HADOOP_HOME/conf/slaves文件,加入新加节点
主机名,再建立到新加节点无密码的SSH连接。
运行启动命令:start-all.sh
然后可以通过http://(Master主机名):50070,查看新添加的DataNode
8、负载均衡
start-balancer.sh,可以使DataNode节点上选择策略重新平衡DataNode上的数据块的分布。
分享到:
评论

相关推荐

    基于Docker搭建Hadoop集群(2).docx

    "基于Docker搭建Hadoop集群" 在本文中,我们将介绍如何基于Docker搭建Hadoop集群。Hadoop是大数据处理的常用工具,而Docker则是当前最流行的容器化技术。通过将Hadoop部署到Docker容器中,我们可以更方便地管理和...

    脚本搭建hadoop集群

    脚本搭建hadoop集群 可以自定义主机名和IP地址 可以自定义安装jdk和hadoop(格式为*tar.gz) 注意事项 1、安装完jdk和hadoop请手动source /etc/profile 刷新环境变量 2测试脚本环境为centOS6,其他操作系统会有些...

    大数据教程之搭建Hadoop集群.zip_大数据环境搭建hadoop

    标题中的“大数据教程之搭建Hadoop集群.zip_大数据环境搭建hadoop”暗示了这是一个关于如何在大数据环境中构建Hadoop集群的教程。Hadoop是Apache软件基金会的一个开源项目,主要用于处理和存储海量数据,其分布式...

    LinuxRedHat、CentOS上搭建Hadoop集群.pdf

    搭建Hadoop集群在LinuxRedHat、CentOS上的实现 Hadoop是一种流行的开源大数据处理平台,由Google开发,现被Apache基金会维护。Hadoop的核心是HDFS(Hadoop Distributed File System)和MapReduce,分别负责数据存储...

    Linux_RedHat、CentOS上搭建Hadoop集群

    【搭建Hadoop集群详解】 Hadoop是一个开源的分布式计算框架,专为处理和存储大量数据而设计。它的核心设计理念是高容错性、高效性和可扩展性,这使得Hadoop能够在大规模集群中处理PB级别的数据。Hadoop的可靠性源于...

    搭建hadoop集群的全部配置文件

    在搭建Hadoop集群的过程中,配置文件起着至关重要的作用,它们定义了集群的运行方式、节点间通信方式以及数据存储和处理的策略。本压缩包包含的文件是全面的Hadoop集群配置集合,旨在帮助用户顺利构建和管理自己的...

    mac环境下hadoop集群搭建

    在进行搭建Hadoop集群的过程中,需要注意的是本文档提到的参考资料,包括北航王宝会老师在Windows下大数据虚拟集群配置的指导,以及CSDN博主zhishengqianjun关于VMware Fusion配置Nat静态IP的文章,它们为本文档的...

    hadoop集群搭建(超级详细)

    在搭建Hadoop集群之前,首先需要准备多台虚拟机。可以使用VMware或VirtualBox等虚拟机软件,创建至少三台虚拟机,分别作为NameNode、DataNode和Secondary NameNode。确保每台虚拟机的网络设置为同一网络模式(如NAT...

    通过虚拟化技术在Linux系统下搭建Hadoop集群的研究与实现.pdf

    本文主要研究了通过虚拟化技术在Linux系统下搭建Hadoop集群的方法,并对其进行了详细的研究和实现。首先,文章对Hadoop进行了简介,介绍了Hadoop的框架、HDFS和MapReduce等核心组件,并对Hadoop集群的组成进行了说明...

    使用 IBCS 虚拟专线搭建 Hadoop 集群:详细步骤与优势

    为了提高集群的性能、稳定性和安全性,许多企业选择了使用 IBCS 虚拟专线来搭建 Hadoop 集群。 IBCS 虚拟专线是基于 IP 专线技术的二层网络服务,它为本地服务器提供独享且固定的 IP 地址,类似于物理专线,但更...

    《Hadoop大数据开发实战》教学教案—02搭建Hadoop集群.pdf

    标题 "《Hadoop大数据开发实战》教学教案—02搭建Hadoop集群" 是关于Hadoop大数据开发实战课程中第二章的教学内容,主要聚焦于如何在Linux环境下搭建Hadoop集群。描述提到该章节适用于互联网相关领域的学习,暗示了...

    Hadoop集群环境虚拟机上搭建详解

    根据提供的文件信息,下面将详细介绍在虚拟机上搭建Hadoop集群环境的相关知识点。 1. 安装虚拟机和操作系统 首先,需要安装虚拟机软件,例如文档中提到的VMware Workstation,它是一款流行的虚拟化软件,可以安装在...

    Hadoop集群构建实训报告.doc

    这些步骤是搭建Hadoop集群的基础,每一步都至关重要,确保了集群的安全性和稳定性。在实际部署过程中,还需要根据具体需求进一步配置Hadoop的相关组件,如HDFS、MapReduce等,以满足数据处理的需求。

    《Hadoop大数据开发实战》教学教案—02搭建Hadoop集群.docx

    在本章《Hadoop大数据开发实战》的教学中,我们将深入探讨如何搭建Hadoop集群,这是进行大数据处理的基础。首先,我们需要了解的是,Hadoop是一个开源的分布式计算框架,广泛应用于大数据处理领域,尤其是在Linux...

    大数据教程之搭建Hadoop集群.zip

    在大数据领域,Hadoop...总之,搭建Hadoop集群是一个涉及多步骤的过程,需要理解Hadoop的基本原理,并熟悉Linux环境下的系统管理和网络配置。通过这些文档和资源,你可以逐步学习并实践,建立起自己的大数据处理平台。

    从零开始搭建hadoop集群 视频 # 谭子

    大数据课程入门,使用Vm虚拟机搭建hadoop集群,用到的系统是centOS6.8,该视频同步了如何安装虚拟机、修改虚拟网卡、配置ssh环境、配置JDK1.8及hadoop2.7.4。视频时长一小时半,当然也可以看另外一条链接:...

    CM5和CDH5 搭建Hadoop 集群

    在本篇中,我们将探讨如何使用CM5和CDH5搭建Hadoop集群,包括安装过程、可能遇到的问题以及解决方案。CM5(Cloudera Manager 5)是Cloudera公司提供的一个管理工具,用于简化Hadoop集群的部署、管理和监控。而CDH5...

    搭建Hadoop集群所需的tar包.zip

    在这个"搭建Hadoop集群所需的tar包.zip"压缩文件中,包含了几个关键组件:Hadoop、HBase、Kafka、ZooKeeper以及Apache Flume。这些工具在大数据生态系统中扮演着重要角色,下面将详细介绍它们的功能和在集群搭建中的...

Global site tag (gtag.js) - Google Analytics