> Linux集群 > Hadoop >

hadoop分布式集群搭建

hadoop版本:hadoop-0.20.205.0-1.i386.rpm 
下载地址:http://www.fayea.com/apache-mirror/hadoop/common/hadoop-0.20.205.0/
jdk版本:jdk-6u35-linux-i586-rpm.bin  

下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk6u35-downloads-1836443.html

 

环境为redhat6.2 32bit
master: 192.169.1.133
slave1: 192.169.1.134
slave2: 192.169.1.135

总体的步骤:
1.修改主机名/etc/hosts(虚拟机拷贝后若不一致要从新修改,从新分发)
2.创建一个普通账户(hadoop),hadoop以此账户运行。
2.root安装jdk
3.修改环境变量
4.安装hadoop,修改配置文件
5.将虚拟机拷贝2份,分别作为slave1,slave2
6.配置ssh,使两两之间,自己登陆自己都免密码
7.用普通账户格式化namenode
8.启动,并观察是否正常运行了


注意两个错误:
1.Warning: $HADOOP_HOME is deprecated. 关闭
解决方法:将export HADOOP_HOME_WARN_SUPPRESS=TRUE添加到每个节点的/etc/hadoop/hadoop-env.sh配置文件中。
2.提示不能创建虚拟机错误
#[root@master ~]# /usr/bin/start-all.sh 
namenode running as process 26878. Stop it first.
slave2: starting datanode, logging to /var/log/hadoop/root/hadoop-root-datanode-slave2.out
slave1: starting datanode, logging to /var/log/hadoop/root/hadoop-root-datanode-slave1.out
slave2: Unrecognized option: -jvm
slave2: Could not create the Java virtual machine.
slave1: Unrecognized option: -jvm
slave1: Could not create the Java virtual machine.
master: secondarynamenode running as process 26009. Stop it first.
jobtracker running as process 25461. Stop it first.
slave2: starting tasktracker, logging to /var/log/hadoop/root/hadoop-root-tasktracker-slave2.out
slave1: starting tasktracker, logging to /var/log/hadoop/root/hadoop-root-tasktracker-slave1.out

解决方法:root不能启动hadoop,需要用普通账户启动。

注意:下面hdfs-site.xml应该这样配置,否则两个从节点的datanode启动不了,同时应该创建/var/hadoop/data文件夹,并改拥有者和拥有者为hadoop

[root@master hadoop]# cat hdfs-site.xml 
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
<property>
<name>dfs.data.dir</name>
<value>/var/hadoop/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>

 

[plain] view plaincopy
  1. ------------------------1.设置主机ip地址映射/etc/hosts-----------------------------  
  2. ------------------------2.添加hadoop用户,作为运行hadoop的用户---------------------  
  3. ------------------------3.安装jdk并设置环境变量------------------------------------  
  4.   
  5. [chen@master 桌面]$ su - root  
  6. 密码:  
  7. [root@master ~]# useradd hadoop  
  8. [root@master ~]# passwd hadoop  
  9. 更改用户 hadoop 的密码 。  
  10. 新的 密码:  
  11. 无效的密码: 过短  
  12. 无效的密码: 过于简单  
  13. 重新输入新的 密码:  
  14. passwd: 所有的身份验证令牌已经成功更新。  
  15. [root@master ~]# vim /etc/hosts  
  16. [root@master ~]# cat /etc/hosts  
  17. 192.169.1.133 master  
  18. 192.169.1.134 slave1  
  19. 192.169.1.135 slave2  
  20. [root@master ~]# cd /home/chen/  
  21. [root@master chen]# ls  
  22. hadoop-0.20.205.0-1.i386.rpm  公共的  视频  文档  音乐  
  23. jdk-6u35-linux-i586-rpm.bin   模板    图片  下载  桌面  
  24. [root@master chen]# chmod 744 jdk-6u35-linux-i586-rpm.bin  #给bin执行权限  
  25. [root@master chen]# ./jdk-6u35-linux-i586-rpm.bin   
  26. Unpacking...  
  27. Checksumming...  
  28. Extracting...  
  29. UnZipSFX 5.50 of 17 February 2002, by Info-ZIP (Zip-Bugs@lists.wku.edu).  
  30.   inflating: jdk-6u35-linux-i586.rpm    
  31.   inflating: sun-javadb-common-10.6.2-1.1.i386.rpm    
  32.   inflating: sun-javadb-core-10.6.2-1.1.i386.rpm    
  33.   inflating: sun-javadb-client-10.6.2-1.1.i386.rpm    
  34.   inflating: sun-javadb-demo-10.6.2-1.1.i386.rpm    
  35.   inflating: sun-javadb-docs-10.6.2-1.1.i386.rpm    
  36.   inflating: sun-javadb-javadoc-10.6.2-1.1.i386.rpm    
  37. Preparing...                ########################################### [100%]  
  38.    1:jdk                    ########################################### [100%]  
  39. Unpacking JAR files...  
  40.     rt.jar...  
  41.     jsse.jar...  
  42.     charsets.jar...  
  43.     tools.jar...  
  44.     localedata.jar...  
  45.     plugin.jar...  
  46.     javaws.jar...  
  47.     deploy.jar...  
  48. Installing JavaDB  
  49. Preparing...                ########################################### [100%]  
  50.    1:sun-javadb-common      ########################################### [ 17%]  
  51.    2:sun-javadb-core        ########################################### [ 33%]  
  52.    3:sun-javadb-client      ########################################### [ 50%]  
  53.    4:sun-javadb-demo        ########################################### [ 67%]  
  54.    5:sun-javadb-docs        ########################################### [ 83%]  
  55.    6:sun-javadb-javadoc     ########################################### [100%]  
  56.   
  57. Java(TM) SE Development Kit 6 successfully installed.  
  58.   
  59. Product Registration is FREE and includes many benefits:  
  60. * Notification of new versions, patches, and updates  
  61. * Special offers on Oracle products, services and training  
  62. * Access to early releases and documentation  
  63.   
  64. Product and system data will be collected. If your configuration  
  65. supports a browser, the JDK Product Registration form will  
  66. be presented. If you do not register, none of this information  
  67. will be saved. You may also register your JDK later by  
  68. opening the register.html file (located in the JDK installation  
  69. directory) in a browser.  
  70.   
  71. For more information on what data Registration collects and   
  72. how it is managed and used, see:  
  73. http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html  
  74.   
  75. Press Enter to continue.....  
  76.   
  77.    
  78. Done.  
  79. [root@master chen]# vim /etc/profile  
  80. [root@master chen]# ls /usr/java/jdk1.6.0_35/  
  81. bin        lib          register.html        THIRDPARTYLICENSEREADME.txt  
  82. COPYRIGHT  LICENSE      register_ja.html  
  83. include    man          register_zh_CN.html  
  84. jre        README.html  src.zip  
  85. [root@master chen]# tail -3 /etc/profile    #设置环境变量  
  86. export JAVA_HOME=/usr/java/jdk1.6.0_35  
  87. export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib  
  88. export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH  
  89. [root@master chen]#   
  90.   
  91. -----------------------安装hadoop,修改配置文件-----------------------  
  92. #这一步完后后,将虚拟机拷贝两份,分别作为slave1,slave2  
  93. #若启动两个拷贝后,ip地址和hosts不一样,要改为实际的ip  
  94.   
  95. [root@master chen]# ls  
  96. hadoop-0.20.205.0-1.i386.rpm            公共的  
  97. jdk-6u35-linux-i586.rpm                 模板  
  98. jdk-6u35-linux-i586-rpm.bin             视频  
  99. sun-javadb-client-10.6.2-1.1.i386.rpm   图片  
  100. sun-javadb-common-10.6.2-1.1.i386.rpm   文档  
  101. sun-javadb-core-10.6.2-1.1.i386.rpm     下载  
  102. sun-javadb-demo-10.6.2-1.1.i386.rpm     音乐  
  103. sun-javadb-docs-10.6.2-1.1.i386.rpm     桌面  
  104. sun-javadb-javadoc-10.6.2-1.1.i386.rpm  
  105. [root@master chen]# rpm -ivh hadoop-0.20.205.0-1.i386.rpm   
  106. Preparing...                ########################################### [100%]  
  107.    1:hadoop                 ########################################### [100%]  
  108. [root@master chen]# cd /etc/hadoop/  
  109. [root@master hadoop]# ls  
  110. capacity-scheduler.xml      hadoop-policy.xml      slaves  
  111. configuration.xsl           hdfs-site.xml          ssl-client.xml.example  
  112. core-site.xml               log4j.properties       ssl-server.xml.example  
  113. fair-scheduler.xml          mapred-queue-acls.xml  taskcontroller.cfg  
  114. hadoop-env.sh               mapred-site.xml  
  115. hadoop-metrics2.properties  masters  
  116. [root@master hadoop]# vim hadoop-env.sh   
  117.   
  118. export JAVA_HOME=/usr/java/jdk1.6.0_35  
  119.   
  120. [root@master hadoop]# vim core-site.xml   
  121. [root@master hadoop]# cat core-site.xml   
  122. <?xml version="1.0"?>  
  123. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
  124.   
  125. <!-- Put site-specific property overrides in this file. -->  
  126.   
  127. <configuration>  
  128. <property>  
  129. <name>fs.default.name</name>  
  130. <value>hdfs://master:9000</value>  
  131. </property>  
  132. </configuration>  
  133.   
  134. [root@master hadoop]# vim hdfs-site.xml   
  135. [root@master hadoop]# cat hdfs-site.xml   
  136. <?xml version="1.0"?>  
  137. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
  138.   
  139. <!-- Put site-specific property overrides in this file. -->  
  140.   
  141. <configuration>  
  142. <property>  
  143.   
  144. <name>dfs.replication</name>  
  145.   
  146. <value>2</value>  
  147.   
  148. </property>  
  149. </configuration>  
  150.   
  151. [root@master hadoop]# vim mapred-site.xml   
  152. [root@master hadoop]# cat mapred-site.xml   
  153. <?xml version="1.0"?>  
  154. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
  155.   
  156. <!-- Put site-specific property overrides in this file. -->  
  157.   
  158. <configuration>  
  159. <property>  
  160.   
  161. <name>mapred.job.tracker</name>  
  162.   
  163. <value>hdfs://master:9001</value>  
  164.   
  165. </property>  
  166. </configuration>  
  167. [root@master hadoop]# cat masters   
  168. master  
  169. [root@master hadoop]# cat slaves   
  170. slave1  
  171. slave2  
  172. [root@master hadoop]#   
  173.   
  174.   
  175. ------------------------下面切换到hadoop用户,设置ssh免密码登陆------------------------------  
  176.   
  177. [hadoop@master ~]$ ssh-keygen -t dsa    #这个步骤在两个从节点上也要做一遍  
  178. Generating public/private dsa key pair.  
  179. Enter file in which to save the key (/home/hadoop/.ssh/id_dsa):   
  180. Created directory '/home/hadoop/.ssh'.  
  181. Enter passphrase (empty for no passphrase):   
  182. Enter same passphrase again:   
  183. Your identification has been saved in /home/hadoop/.ssh/id_dsa.  
  184. Your public key has been saved in /home/hadoop/.ssh/id_dsa.pub.  
  185. The key fingerprint is:  
  186. 6f:88:68:8a:d6:c7:b0:c7:e2:8b:b7:fa:7b:b4:a1:56 hadoop@master  
  187. The key's randomart image is:  
  188. +--[ DSA 1024]----+  
  189. |                 |  
  190. |                 |  
  191. |                 |  
  192. |                 |  
  193. |        S        |  
  194. |   . E . o       |  
  195. |  . @ + . o      |  
  196. | o.X B   .       |  
  197. |ooB*O            |  
  198. +-----------------+  
  199. [hadoop@master ~]$ cd .ssh/  
  200. [hadoop@master .ssh]$ ls  
  201. id_dsa  id_dsa.pub  
  202. [hadoop@master .ssh]$ cp id_dsa.pub authorized_keys #必须要将公钥改名为authorized_keys  
  203.   
  204. #编辑authorized_keys文件,将两个从节点中生成的公钥id_dsa.pub中的内容拷贝到authorized_keys中  
  205. [hadoop@master .ssh]$ vim authorized_keys         
  206. [hadoop@master .ssh]$ exit  
  207. logout  
  208. [chen@master .ssh]$ su - root  
  209. 密码:  
  210. [root@master ~]# cd /home/hadoop/  
  211. [root@master hadoop]# ls  
  212. [root@master hadoop]# cd .ssh/  
  213. [root@master .ssh]# ls  
  214. authorized_keys  id_dsa  id_dsa.pub   
  215.   
  216. #切换到root,将authorized_keys分别拷贝到两个从节点的/home/hadoop/.ssh下  
  217. #这里root拷贝的时候不需要输入密码,因为之前也被我设置免密码了  
  218. [root@master .ssh]# scp authorized_keys slave1:/home/hadoop/.ssh/  
  219. authorized_keys                                                100% 1602     1.6KB/s   00:00      
  220. [root@master .ssh]# scp authorized_keys slave2:/home/hadoop/.ssh/  
  221. authorized_keys                                                100% 1602     1.6KB/s   00:00      
  222. [root@master .ssh]#  
  223.   
  224. #这样拷贝完后,三台机用hadoop用户ssh登陆就不需要密码了,  
  225. #注意,第一次登陆需要,然后再登陆就不需要了,一定要两两之间  
  226. #自己登陆自己都走一遍  
  227.   
  228.   
  229. -------------------------------格式化并启动hadoop---------------------------  
  230. #注意:把三台机的防火墙都关掉测试。  
  231. [hadoop@master ~]$ /usr/bin/hadoop namenode -format  
  232. 12/09/01 16:52:24 INFO namenode.NameNode: STARTUP_MSG:   
  233. /************************************************************  
  234. STARTUP_MSG: Starting NameNode  
  235. STARTUP_MSG:   host = master/192.169.1.133  
  236. STARTUP_MSG:   args = [-format]  
  237. STARTUP_MSG:   version = 0.20.205.0  
  238. STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20-security-205 -r 1179940; compiled by 'hortonfo' on Fri Oct  7 06:19:16 UTC 2011  
  239. ************************************************************/  
  240. 12/09/01 16:52:24 INFO util.GSet: VM type       = 32-bit  
  241. 12/09/01 16:52:24 INFO util.GSet: 2% max memory = 2.475 MB  
  242. 12/09/01 16:52:24 INFO util.GSet: capacity      = 2^19 = 524288 entries  
  243. 12/09/01 16:52:24 INFO util.GSet: recommended=524288, actual=524288  
  244. 12/09/01 16:52:24 INFO namenode.FSNamesystem: fsOwner=hadoop  
  245. 12/09/01 16:52:24 INFO namenode.FSNamesystem: supergroup=supergroup  
  246. 12/09/01 16:52:24 INFO namenode.FSNamesystem: isPermissionEnabled=true  
  247. 12/09/01 16:52:24 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100  
  248. 12/09/01 16:52:24 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)  
  249. 12/09/01 16:52:24 INFO namenode.NameNode: Caching file names occuring more than 10 times   
  250. 12/09/01 16:52:24 INFO common.Storage: Image file of size 112 saved in 0 seconds.  
  251. 12/09/01 16:52:25 INFO common.Storage: Storage directory /tmp/hadoop-hadoop/dfs/name has been successfully formatted.  
  252. 12/09/01 16:52:25 INFO namenode.NameNode: SHUTDOWN_MSG:   
  253. /************************************************************  
  254. SHUTDOWN_MSG: Shutting down NameNode at master/192.169.1.133  
  255. ************************************************************/  
  256. [hadoop@master ~]$ /usr/bin/start-all.sh    #启动信息像下面这样就正常启动了  
  257. starting namenode, logging to /var/log/hadoop/hadoop/hadoop-hadoop-namenode-master.out  
  258. slave2: starting datanode, logging to /var/log/hadoop/hadoop/hadoop-hadoop-datanode-slave2.out  
  259. slave1: starting datanode, logging to /var/log/hadoop/hadoop/hadoop-hadoop-datanode-slave1.out  
  260. master: starting secondarynamenode, logging to /var/log/hadoop/hadoop/hadoop-hadoop-secondarynamenode-master.out  
  261. starting jobtracker, logging to /var/log/hadoop/hadoop/hadoop-hadoop-jobtracker-master.out  
  262. slave2: starting tasktracker, logging to /var/log/hadoop/hadoop/hadoop-hadoop-tasktracker-slave2.out  
  263. slave1: starting tasktracker, logging to /var/log/hadoop/hadoop/hadoop-hadoop-tasktracker-slave1.out  
  264. #但是通过查看java的进程信息查不到,可能原因有两个:  
  265. #1.防火墙没关  
  266. #2.若防火墙关了还这样,重启。  
  267. [hadoop@master ~]$ /usr/java/jdk1.6.0_35/bin/jps      
  268. 28499 Jps  
  269. [root@master ~]# iptables -F  
  270. [root@master ~]# exit  
  271. logout  
  272. [hadoop@master ~]$ /usr/bin/start-all.sh   
  273. starting namenode, logging to /var/log/hadoop/hadoop/hadoop-hadoop-namenode-master.out  
  274. slave2: starting datanode, logging to /var/log/hadoop/hadoop/hadoop-hadoop-datanode-slave2.out  
  275. slave1: starting datanode, logging to /var/log/hadoop/hadoop/hadoop-hadoop-datanode-slave1.out  
  276. master: starting secondarynamenode, logging to /var/log/hadoop/hadoop/hadoop-hadoop-secondarynamenode-master.out  
  277. starting jobtracker, logging to /var/log/hadoop/hadoop/hadoop-hadoop-jobtracker-master.out  
  278. slave2: starting tasktracker, logging to /var/log/hadoop/hadoop/hadoop-hadoop-tasktracker-slave2.out  
  279. slave1: starting tasktracker, logging to /var/log/hadoop/hadoop/hadoop-hadoop-tasktracker-slave1.out  
  280. [hadoop@master ~]$ /usr/java/jdk1.6.0_35/bin/jps   
  281. 30630 Jps  
  282. ---------------------------重启后正常了----------------------  
  283. ------------------------master节点---------------------------  
  284. [hadoop@master ~]$ /usr/bin/start-all.sh   
  285. starting namenode, logging to /var/log/hadoop/hadoop/hadoop-hadoop-namenode-master.out  
  286. slave2: starting datanode, logging to /var/log/hadoop/hadoop/hadoop-hadoop-datanode-slave2.out  
  287. slave1: starting datanode, logging to /var/log/hadoop/hadoop/hadoop-hadoop-datanode-slave1.out  
  288. master: starting secondarynamenode, logging to /var/log/hadoop/hadoop/hadoop-hadoop-secondarynamenode-master.out  
  289. starting jobtracker, logging to /var/log/hadoop/hadoop/hadoop-hadoop-jobtracker-master.out  
  290. slave2: starting tasktracker, logging to /var/log/hadoop/hadoop/hadoop-hadoop-tasktracker-slave2.out  
  291. slave1: starting tasktracker, logging to /var/log/hadoop/hadoop/hadoop-hadoop-tasktracker-slave1.out  
  292. [hadoop@master ~]$ /usr/java/jdk1.6.0_35/bin/jps   
  293. 3388 JobTracker  
  294. 3312 SecondaryNameNode  
  295. 3159 NameNode  
  296. 3533 Jps  
  297.   
  298. ------------------------salve1---------------------------------  
  299.   
  300. [hadoop@master ~]$ ssh slave1  
  301. Last login: Sat Sep  1 16:51:48 2012 from slave2  
  302. [hadoop@slave1 ~]$ su - root  
  303. 密码:  
  304. [root@slave1 ~]# iptables -F  
  305. [root@slave1 ~]# setenforce 0  
  306. [root@slave1 ~]# exit  
  307. logout  
  308. [hadoop@slave1 ~]$ /usr/java/jdk1.6.0_35/bin/jps   
  309. 3181 TaskTracker  
  310. 3107 DataNode  
  311. 3227 Jps  
  312.   
  313. --------------------------slave2------------------------------  
  314. [hadoop@master ~]$ ssh slave2  
  315. Last login: Sat Sep  1 16:52:02 2012 from slave2  
  316. [hadoop@slave2 ~]$ su - root  
  317. 密码:  
  318. [root@slave2 ~]# iptables -F  
  319. [root@slave2 ~]# setenforce 0  
  320. [root@slave2 ~]# exit  
  321. logout  
  322. [hadoop@slave2 ~]$ /usr/java/jdk1.6.0_35/bin/jps   
  323. 3165 DataNode  
  324. 3297 Jps  
  325. 3241 TaskTracker  
  326. [hadoop@slave2 ~]$   



(责任编辑:IT)